Servlet

配置环境

除了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用于生成对客户端的响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值