Servlet

来源:互联网 发布:阿里云 dns服务器地址 编辑:程序博客网 时间:2024/06/17 13:07

配置环境

除了JDK、Tomcat安装外,还要将Tomcat的lib中的servlet-api.jar配置到CLASSPATH中。

Servlet介绍

Servlet通常称为服务器端的小程序,运行在服务器端,用于处理及响应客户端的请求。

其为特殊的java类,必须继承HttpServlet。Servlet提供不同的方法用于响应客户端的请求,如doGet、doPost、doPut、doDelete等,大部分情况下,Servlet对所有请求的响应都是完全一样的,故只需重写service()方法即可。

另外,HttpServlet还包括两个方法(确切的说,HttpServlet的父类GenericServlet的两个方法)

  • init(ServletConfig config) :创建Servlet实例时,初始化Servlet资源。
  • destroy():销毁Servlet实例,自动调用该方法的回收资源。

一般无需重写这两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,或者在Web启动时立即创建Servlet实例,即load-on-startup Servlet,可以重写init方法,注意应在第一行调用super.init(config)。如果需要在销毁Servlet之前,先完成某些资源的回收,比如关闭数据库连接等,才需要重写destroy方法。如下列实例,其与JSP编译完得到的源码基本一致,效果也相同。

package lee;import javax.servlet.http.*;import javax.servlet.*;import java.io.*;public class FirstServlet extends HttpServlet{    public void service(HttpServletRequest request,HttpServletResponse response)         throws ServletException,java.io.IOException{      request.setCharacterEncoding("gb2312");      String name=request.getParameter("name");      String gender=request.getParameter("gender");      String[] color=request.getParameterValues("color");      String national=request.getParameter("country");      PrintStream out=new PrintStream(response.getOutputStream());      out.println("<html>");      out.println("<head>");      out.println("<title>Servlet测试</title>");      out.println("</head>");      out.println("<body>");      out.println("\t您的名字:");      out.print(name);      out.println("<hr>");      out.println("\t您的性别:");      out.print(gender);      out.println("<hr>");      out.println("\t您喜欢的颜色:");      for(String c:color) {out.println(c+" ");}      out.println("<hr>");      out.println("\t您来自的国家:");      out.print(national);      out.println("<hr>");      out.println("</body>");      out.println("</html>");    }}

Servlet的配置

将class文件放入classes文件夹中,然后配置web.xml,至少包括两部分:

  • 配置Servlet的名字:<servlet/>
  • 配置Servlet的URL:<servlet-mapping/>
    如:
<servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>lee.FirstServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/firstServlet</url-pattern> </servlet-mapping>

Servlet的生命周期

Servlet在容器中运行,其实例的创建和销毁都是由容器控制,创建Servlet实例的两个时机:

  • 客户端第一次请求时,大部分都是该情况;
  • Web应用启动时创建,即 load-on-startup Servlet

    每个Servlet都遵循如下生命周期,与JSP一致:

1、创建Servlet实例
2、Web容器调用init方法,对Servlet实例化
3、初始化后,一直存在于容器中,用于客户端的请求
4、Web容器决定销毁Servlet时,调用destroy方法,通常在关闭Web应用之时销毁Servlet

load-on-startup Servlet

应用启动时就创建Servlet,通常用于某后台服务。如:

package lee;import javax.servlet.http.*;import javax.servlet.*;import java.io.*;import java.util.Timer;import java.util.Date;import java.util.TimerTask;public class TimerServlet extends HttpServlet{ public void init(ServletConfig config) throws ServletException{  super.init(config);  Timer timer = new Timer();  timer.schedule(new Task(), 1000,500); } private class Task extends TimerTask {  public void run()     {     System.out.println("现在时间:");     System.out.println(new Date());     } }}

该servlet没有提供service方法,只是对init方法进行重写,表明其不响应用户的请求,故无需配置URL映射。web.xml的配置如:

<servlet> <servlet-name>timerServlet</servlet-name> <servlet-class>lee.TimerServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet>

整型值越小,优先实例化级别越高,1是最高级。

访问Servlet的配置参数

与JSP中的内置对象config一样,采用ServletConfig的getInitParameter(“paramName”),访问web.xml中配置的参数。Servlet配置参数使用init-param元素,如

<init-param> <param-name>user</param-name> <param-value>root</param-value> </init-param>

Servlet与JSP的区别

  • Servlet中没有内置对象,必须由程序显示创建
  • 对于静态HTML标签,Servlet必须使用页面输出流逐行输出。

总结:JSP是Servlet的一种简化,使用JSP只需要完成输出到客户端的内容,至于JSP脚本如何嵌入一个类中,由JSP容器完成。而Servlet则是完整的Java类,其中service用于生成对客户端的响应。

0 0
原创粉丝点击