日期:2014-05-19  浏览次数:20603 次

J2EE复习(四)servlet

一、什么是Servlet?
Servlet 是在服务器上运行来响应客户端请求的一种java组件。Servlet与具体的客户服务端协议无关,但Servlet常用于HTTP协议,所以,“Servle”t常被用于“HTTP Servlet”的意思。
Servlet使用的java软件包:javax.servlet(基本Servlet框架)和javax,servlet.http(HTTP Servlet)
HTTP Servlets典型应用包括:
1.通过提交HTML表单操作存储数据。
2.提供动态内容,如将从数据库中查询到的结果返回给客户端
3.管理无状态的HTTP上的有状态的信息,如一个为多个同时存在的客户管理购物车并映射每一个请求到正确的客户的在线购物系统
二、Servlets 和 CGI(Commone Gateway Interface)
最早用来产生动态网页服务的方法便是CGI,CGI是一种与语言无关的接口,此种接口允许服务器启动通过环境变化来获取与此次请求有关信息的外部程序。每一个请求都通过CGI程序或者CGI脚本由单独的线程响应。
Servlets相比CGI的几个优势:
1.Servlet中,每个请求由一个轻量级的Java线程处理,不用为每一个请求启动新的系统线程。
2.一个Servlet在请求期间会驻留在内存中。
3.响应所有并发的请求只需要唯一一个实例,节省了内存并可以使Servlet管理持久数据显得更快捷。
三、Servlet 生命周期
Servlet 的生命周期就是指创建 Servlet 实例之后其存在的时间以及何时消失
生命周期的 3个方法为:init()、service()、destroy()
1.装载servlet类以及其他可能使用到的类
2.调用init(ServletConfig config)方法加载配置信息,初始化servlet
3.调用service(doGet/doPost)方法处理业务逻辑,service方法在初始化前不会被调用
4.调用destroy方法销毁不再使用的servlet
四、Servlet的部署
1.用myeclipse建立好web工程,写好HelloClientServlet.java类

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloClientServlet extends HttpServlet
{
  //doGet() 方法处理客户端作出的 GET 请求。
  public void doGet(HttpServletRequest req,
                       HttpServletResponse res)
            throws ServletException, IOException
  {
    res.setContentType("text/html");
    PrintWriter out = res.getWriter();
    out.println("<HTML><HEAD><TITLE>Hello Client!</TITLE>"+
  "</HEAD><BODY>Hello Client!</BODY></HTML>");
    out.close();
  }

  //doPost() 方法处理客户端作出的 POST 请求。
  public void doPost(HttpServletRequest req,
                       HttpServletResponse res)
            throws ServletException, IOException
  {
    doGet(req,res);
  } 
}

 2.web.xml文件中配置Servlet

 

<!-- 第一个servlet程序配置 -->
<servlet>
<servlet-name>firstServlet</servlet-name>
<servlet-class>HelloClientServlet的包路径</servlet-class>
</servlet>
<!-- 第一个servlet程序映射 -->
<servlet-mapping>
<servlet-name>firstServlet</servlet-name><!-- 必须与配置中的servlet-name相同 -->
<url-pattern>/first.do</url-pattern>
</servlet-mapping>

 3.发布到本机web服务器(使用Tomcat5.5)中,通过http://localhost:服务器端口号/工程名/first.do启动servlet。
五、javax.servlet 包的接口介绍
ServletConfig
用来封装web.xml中对当前Servlet的配置信息
getInitParameter()---可以获取初始化参数
ServletContext
代表当前Servlet运行的上下文环境,Web容器会为每一个Web工程创建一个对应ServletContext对象
setAttribute()
getAttribute()
removeAttribute()
ServletRequest
为Servlet所发送的请求,用ServletRequest封装
setAttribute()
getAttribute()
removeAttribute()
getParameter()
常用子接口HttpServletRequest
ServletResponse
Servlet对客户段所做的响应,用ServletResponse描述
getWriter():获取PrintWriter输出流给客户发送的响应内容
setContentType:设置响应内容的响应类型和字符集信息
sendRedirect:设置重新请求路径
子接口HttpServletResponse
六、过滤器(Filter)
1.Servlet 过滤器是小型的 Web 组件,它们拦截请求和响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。
2.生命周期
初始化----当容器第一次加载该过滤器时, init() 方法将被调用。
过滤----doFilter() 方法被容器调用,同时传入分别指向这个请求/响应链中的ServletRequest 、 ServletResponse 和 FilterChain 对象的引用
销毁----容器紧跟在垃圾收集之前调用 destroy() 方法
3.编写字符编码过滤器
(1)实现Filter接口中的三个方法:
init() ----这个方法在容器实例化过滤器时被调用
doFilter() ----与 servlet 拥有一个 service() 方法(这个方法又调用 doPost() 或者 doGet() )来处理请求一样,过滤器拥有单个用于处理请求和响应的方法―― doFilter()。