码迷,mamicode.com
首页 > 编程语言 > 详细

Java Web学习(28): Servlet学习(一)

时间:2016-08-01 12:37:21      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:

       一Servlet概述

       (1)什么是Servlet

       先有JSP还是先有Servlet呢?对于这个问题,我们只需要知道JSP的前身就是Servlet。因此我们乐意清楚的知道

Servlet是JSP的基础。

       Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过"请求-响应"编程模型来访问的

这个驻留在服务器内存里的Servlet程序。

       Servlet为创建基于Web的应用程序提供了基于组件、独立于平台的方法,可以不受CGI程序的性能限制。Servlet

有权限访问所有的Java API,包括访问企业级数据库的JDBC API。

       Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其他HTTP客户端的请求和

HTTP服务器上的数据库或应用程序之间的中间层。

       使用Servlet,可以收集来自表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

       Servlet通常情况下与使用CGI(Common Gateway Interface,公共网关接口)实现的程序可以达到异曲同工的效

果。但是相比于 CGI,Servlet 有以下几点优势:

       1)性能明显更好。

       2)Servlet在Web服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。

       3)Servlet是独立于平台的,因为它们是用Java编写的。

服务器上的Java安全管理器执行了一系列限制,以保护服务器计算机上的资源。因此,Servlet是可信的。

       4)Java类库的全部功能对Servlet来说都是可用的。它可以通过Socket和 RMI机制与Applet、数据库或其他软件

进行交互。

       (2)Servlet包

       Servlet是运行在带有支持Servlet规范的解释器的web服务器上的Java类。

Servlet可以使用 javax.servlet 和 javax.servlet.http 包创建,它是Java企业版的标准组成部分,Java企业版是支持大

型开发项目的Java类库的扩展版本。这些类实现Servlet和JSP规范。

       Servlet就像任何其他的Java类一样已经被创建和编译。

       (3)Servlet任务

       Servlet执行以下主要任务:

       1)读取客户端(浏览器)发送的显式的数据。这包括网页上的HTML表单,或者也可以是来自Applet或自定义的

HTTP客户端程序的表单。

       2)读取客户端(浏览器)发送的隐式的HTTP请求数据。这包括cookies、媒体类型和浏览器能理解的压缩格式等

等。

       3)处理数据并生成结果。这个过程可能需要访问数据库,执行RMI或CORBA调用,调用Web服务,或者直接计

算得出对应的响应。

       4)发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTM 或XML)、

二进制文件(GIF图像)、Excel等。

       5)发送隐式的HTTP响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如HTML,设置

cookies和缓存参数,以及其他类似的任务。

       二Servlet的运行过程

       下图显示了Servlet在Web应用程序中的位置:

       技术分享

       Servlet调用图:

   技术分享

       三在Eclipse中开发Servlet

       (1)Servlet接口实现类

  Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。

  HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比

Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。

  HttpServlet在实现Servlet接口时,覆写了service()方法,该方法体内的代码会自动判断用户的请求方式,如为

GET请求,则调用HttpServlet的doGet()方法,如为Post请求,则调用doPost()方法。因此,开发人员在编写Servlet

时,通常只需要覆写doGet()方法或doPost()方法,而不要去覆写service()方法。

       (2)实例开发

       1)在Eclipse中新建一个web project工程,Eclipse会自动创建下图所示目录结构:

   技术分享

       2)在com.servlet包右键下创建一个Servlet:

       技术分享

       3)在弹出的对话框中填写Servlet的名称,就像创建一个Java类一样:

       技术分享

       4)创建完成之后,我们就开始编写一些代码,在这里只是重写了doGet()方法,代码为:

package com.servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<h1>Hello Servlet</h1>");
	}


	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}


}

       5)在浏览器中输入;http://localhost:8080/ServletDemo1/HelloServlet,我们就可以访问这个Servlet:

       技术分享

       6)我们再编写一个测试的index.jsp页面,需要注意的是我们输入的URL地址必须与Servlet中注解中URL地址的一

致,其中输入的代码为:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Servlet编程</title>
</head>
<body>
       <h1>Servlet小程序</h1>
       <hr/>
       <a href="HelloServlet">get方式请求HelloServlet</a>
       <hr/>
       <form action="HelloServlet" method="post">
             <input type="submit"  value="post方式请求HelloServlet"/>
       </form>
</body>
</html>

       7)在浏览器中输入:http://localhost:8080/ServletDemo1/index.jsp,点击两个请求的方式,我们也可以得到

结果:

       技术分享

       这是最新的创建Servlet的方法,过去的我们在Eclipse中开发Servlet,需要手动编写一个web.xml配置文件,完

成Servlet的创建。那么我们也来手动编写一个Servlet程序。

       四过去的做法

       (1)直接使用类继承HttpServlet抽象类

       具体的步骤为:

       1)就像创建一个普通的Java类一样,这个类继承自HttpServlet类,

       技术分享

       2)我们在类中右键选择下图的选项:

       技术分享

       3)在出现的对话框中选择重写下图中的两个方法:

       技术分享

       代码为:

package com.servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletOld1 extends HttpServlet {
	private static final long serialVersionUID = 1L;


	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		resp.setContentType("text/html;charset=UTF-8");
		PrintWriter out = resp.getWriter();
		out.print("<h1>Hello Servlet</h1>");
	}


	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(req, resp);
	}
	
}

       4)完成后我们就需要在web.xml文件中配置Servlet:

       技术分享

       5)在浏览器中输入:http://localhost:8080/ServletDemo1/ServletOld1的结果:

       技术分享

       (2)Servlet3.0之前的做法

       具体的步骤:

       1)创建一个Servlet,不使用注解

package com.servlet;


import java.io.IOException;
import java.io.PrintWriter;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * Servlet implementation class ServletDemo
 */
public class ServletDemo extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletDemo() {
        super();
        // TODO Auto-generated constructor stub
    }


	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.print("<h1>Hello Servlet</h1>");
		
	}


	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}


}

       2)在web.xml配置文件中配置:

       技术分享

       3)在浏览器中输入:http://localhost:8080/ServletDemo1/ServletDemo的结果:

       技术分享

       综上这三个方法,使用注解的是最简单的,也是Serlet3.0的新特性,具体的可以参

考:http://blog.csdn.net/xiazdong/article/details/7208316

     



Java Web学习(28): Servlet学习(一)

标签:

原文地址:http://blog.csdn.net/erlian1992/article/details/52083711

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!