Java Servlet基础

目录

前言

一、 servlet的部署、创建与运行  

1.1  源文件及字节码文件 

 1.2  编写部署文件web.xml

1.3  servlet的创建与运行 

1.4  向servlet传递参数的值 

二、servlet的工作原理 

2.1  servlet 对象的生命周期

2.2  init方法

2.3  service方法 

2.4  destroy方法 

三、 通过JSP页面访问servlet 

四、共享变量

五、 doGet和doPost方法 

六、重定向与转发 

七、使用session


前言

本章主要内容为servlet的部署、创建、与运行, servlet的工作原理,通过JSP页面访问servlet, 共享变量,doPost和doGet方法,重定向与转发, 使用session。本章难点为servlet的工作原理和重定向与转发
 


一、 servlet的部署、创建与运行  

1.1  源文件及字节码文件 

①Servlet类 
写一个创建servlet的类就是编写一个特殊类的子类,这个特殊的类就是javax.servlet.http包中的HttpServlet类。HttpServlet的子类被习惯地称作一个Servlet类,这样的类创建的对象习惯地被称作一个servlet。 

②字节码文件的保存 
字节码文件按着类的包名对应的目录路径保存到Web服务目录中特定子目录中。包名moon.sun对应的目录路径是moon\sun,因此,保存到:\WEB-INF\classes\moon\sun。"保存类型"选择为"所有文件",将"编码方式"选择为"ANSI"。 然后用命令行进入moon\sun的父目录classes(不要进入moon或sun目录)编译

classes> javac -cp servlet-api.jar moon\sun\Example6_1.java

注意:编译时不要忘记使用-cp参数,该参数指定使用非核心类库中的类。本章使用的javax.servlet和javax.servlet.http包中的类不在JDK提供的核心类库中,均在servlet-aoi.jar文档中,因此可以将Tomcat安装目录中的lib子目录中的servlet-aoi.jar文件复制(不要剪切)到\WEB-INF\classes中。

 1.2  编写部署文件web.xml

(1)Servlet类的字节码文件保存到指定的目录后,必须为Tomcat服务器编写一个部署文件,只有这样,Tomcat服务器才会用Servlet类创建

(2)部署文件是一个XML文件,名字必须是web.xml。

(3)编写的 web.xml文件必须保存到Web服务目录的WEB-INF子目录中。

1.3  servlet的创建与运行 

  用户就可以根据web.xml部署文件来请求Tomcat服务器创建并运行一个servlet。 如果Tomcat服务器没有名字为hello的servlet,就会根据web.xml文件中servlet标记的子标记servlet-class指定的Servlet类创建一个名字为hello的servlet。因此,如果名字是hello的servlet被创建之后,又修改Java源文件、编译得到新的Servlet类,并希望Tomcat服务器用新的Servlet类创建servlet,那么就要重新启动Tomcat服务器。

1.4  向servlet传递参数的值 

在请求一个servlet时,可以在请求的url-pattern中额外加入参数及其值,格式是:

url-pattern?参数1=值&参数2=值…参数n=值

那么被请求的servlet就可以使用request对象获取参数的值,例如: 

request.getParameter(参数n)

二、servlet的工作原理 

2.1  servlet 对象的生命周期

  servlet由Tomcat服务器负责创建并完成初始化工作。当多个用户请求一个servlet时,服务器为每个用户启动一个线程。 一个servlet的生命周期主要有下列三个过程组成:

(1) servlet第一次被请求加载时,服务器创建servlet,servlet调用init方法完成必要的初始化工作。

(2) 新诞生的servlet再调用service方法响应用户的请求。

(3) 当服务器关闭时,调用destroy方法销毁servlet。 init方法只被调用一次。当后续的用户请求servlet服务时,Tomcat服务器将启动一个新的线程,在该线程中,servlet调用service方法。也就是说,每个用户的每次请求都导致service方法被调用执行,其执行过程分别运行在不同的线程中。 

2.2  init方法

  servlet第一次被请求加载时,服务器创建一个servlet,这个对象调用init方法完成必要的初始化工作。该方法在执行时,服务器会把一个SevletConfig类型的对象传递给init()方法,这个对象就被保存在servlet中,直到servlet被销毁。

2.3  service方法 

  该方法是HTTPServlet类中的方法,可以在子类中直接继承该方法或重写这个方法,service方法的声明格式时:

public void service(HttpServletRequest request  HttpServletResponse  response)throw ServletException,IOException

  Tomcat服务器将两个参数传递给该方法。一个是HTTPServletRequest类型的对象,该对象封装了用户的请求信息,另一个时HTTPServletResponse类型的对象,该对象用来响应用户的请求。和init方法不同的是,init方法只被调用一次,而service方法可能被多次的调用。因此,不同线程的service方法中的局部变量互不干扰,一个线程改变了自己的service方法中局部变量的值不会影响其他线程的service方法中的局部变量。

2.4  destroy方法 

  该方法是HTTPServlet类中的方法,子类可直接继承这个方法,一般不需要重写。声明格式为:

public destroy();
当Tomcat服务器终止服务时,destroy()方法会被执行,销毁servlet。 

三、 通过JSP页面访问servlet 

 按照部署文件 web.xml 给出的 servlet的 url-pattern,用户除了可以在浏览器输人 url-pattern请求运行一个servlet外,也可以通过JSP页面来请求一个servlet。
        需要特别注意的是,如果web.xml文件中给出的 servlet的url-pattcrn是/lookHello,那么JSP页面请求servlet时,必须要写成lookHello,不可以写成/lookHello,否则将变成请求root 服务目录下的某个servlet。
①通过表单向servlct 提交数据
        Web 服务目录下的JSP页面都可以通过[orm表单请求该 Web服务日录下的某个servlet。如果web.xml文件中给出的servlet 的url-pattern 是/computeBill,那么form表单中action给出的值就是computeBill,如下所示:

< form action = "computeBill" >

</form>

②通过超链接访问servlet

JSP页面可以使用超链接去请求某个servlet。如果web.xml文件中给出的请求servlet的url-pattern是/circle,那么超链接标记中的href的值是circle(/circle):

<a href ="circle"></a>

 

四、共享变量

Servlet容器允许在不同的Servlet之间共享数据,以便实现信息的交换和共享。我们可以使用ServletContext对象来存储和获取这些共享变量。ServletContext对象在整个Web应用程序中是唯一的,并且可以在所有的Servlet中访问到。

五、 doGet和doPost方法 

(1)HttpServlet类除了init、service、destroy方法外,该类还有两个很重要的方法:doGet和doPost,用来处理用户的请求并作出响应。

(2)实际上HttpServlet类所给出的service方法的功能是检查HTTP请求类型(get、post),并在service方法中根据用户的请求方式,在service方法中对应地再调用doGet或doPost方法。 因此,在编写的Servlet类(HttpServlet类的一个子类)时,也可以不重写service方法来响应用户,直接继承service方法即可。

(3)如果不重写service方法,就需要在Servlet类中重写doPost或doGet方法来响应用户的请求。如果不论用户请求类型是post还是get,Tomcat服务器的处理过程完全相同,那么可以只在doPost方法中编写处理过程,而在doGet方法中再调用doPost方法即可,或只在doGet方法中编写处理过程,而在doPost方法中再调用doGet方法。如果根据请求的类型进行不同的处理,就要在两个方法中编写不同的处理过程(这一点比service方法更为灵活)。

六、重定向与转发 

  重定向的功能是将用户从当前页面或servlet定向到另一个JSP页面或servlet。转发的功能是将用户对当前JSP页面或servlet的请求转发给另一个JSP页面或servlet。

①sendRedirect方法 
重定向方法void sendRedirect(String location) 将用户重新定向到另一个JSP页面或servlet。

② forward方法  
当前页面所转发道德JSP页面或servlet可以使用request获取用户提交的顺序。

③二者的区别 
  转发(forwar)和重定向方法(sendRedirect)不同的是,用户可以看到转发到的JSP页面或servlet的运行效果,但是,在浏览器的地址栏中不能看到forward方法转发到的JSP页面的地址或servlet的地址,用户在浏览器的地址栏中所看到的仍然是当前JSP页面的URL或servlet的url-pattern。如果此时刷新浏览器,那么请求将是当前的JSP页面或servlet。所转发到的标页面或servlet可以使用request获取用户提交的数据。而重定向的目标页面或servlet无法使用request获取用户提交的数据。另外,当servlet中执行forward方法实施转发操作时,Tomcat会立刻结速当前servlet的执行。而servlet中执行sendRedirect方法(重定向,也见4.2.3)时,Tomcat服务器还是要把当前的servlet代码执行完毕后才实施重定向(跳转)操作,但Tomcat服务器不再给用户看当前servlet代码的执行效果。如果在执行sendRedirect(URL url)方法后,servlet紧接着执行了return返回语句,那么Tomcat服务器会立刻结束当前servlet的执行。 

④使用转发的好处

使用转发技术可以让JSP页面和处理数据的servlet解耦,JSP页面只需和处理转发的servlet打交道。

七、使用session

用户在访问一个 Web服务目录期间,Tomcat 服务器为该用户分配一个 session对象(称为用户的会话),Tomcat 服务器可以在各个页面以及servlet 中使用这个session记录用户的有关信息,而且Tomcat 服务器保证不同用户的session对象互不相同。有关session对象的原理、常用方法可参见4.3节。本节学习怎样在servlet中使用session对象记录有关信息。HttpServletRequest 对象request 调用getSession方法获取用户的session对象:

HttpSession session= request.getSession(true);

总结

以上便是本章的所有内容。需熟练掌握,多加练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值