java Servlet基础

目录

6.1servlet的部署,创建与运行

6.1.1源文件及字节码文件

6.1.2  编写部署文件web.xml

6.1.3  servlet的创建与运行

6.1.4  向servlet传递参数的值

6.2select的工作原理

6.2.1  servlet 对象的生命周期

6.2.2  init方法

6.2.3  service方法

6.2.4  destroy方法

6.3.通过JSP页面访问servlet

6.4.共享变量

6.5.doGet和doPOST方法

6.6.重定向与转发

6.7.使用session


6.1servlet的部署,创建与运行

6.1.1源文件及字节码文件


1.Servlet类

写一个创建servlet的类就是编写一个特殊类的子类,这个特殊的类就是javax.servlet.http包中的HttpServlet类。HttpServlet实现了Servlet接口,实现了响应用户的方法(这些方法将在后续内容中讲述)。HttpServlet的子类被习惯地称作一个Servlet类,这样的类创建的对象习惯地被称作一个servlet。

2.字节码文件的保存

字节码文件按着类的包名对应的目录路径保存到Web服务目录中特定子目录中。包名moon.sun对应的目录路径是moon\sun,因此,保存到: \ch6\WEB-INF\classes\moon\sun 可以事先将Java源文件,按照其包名,比如,包名为moon.sun,保存到 \ch6\WEB-INF\classes\moon\sun 然后用命令行进入moon\sun的父目录classes(不要进入moon或sun目录)编译

6.1.2  编写部署文件web.xml

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

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

Web服务目录的WEB-INF子目录下的web.xml文件负责管理当前Web服务目录下的全部servlet,当该Web服务目录需要提供更多的servlet时,只要在web.xml文件中增加servlet和servlet-mapping子标记即可。

6.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服务器

6.1.4  向servlet传递参数的值


在请求一个servlet时,可以在请求的url-pattern中额外加入参数及其值,格式是: url-pattern?参数1=值&参数2=值…参数n=值 那么被请求的servlet就可以使用request对象获取参数的值,例如: request.getParameter(参数n)   

6.2select的工作原理

6.2.1  servlet 对象的生命周期


servlet由Tomcat服务器负责创建并完成初始化工作。当多个用户请求一个servlet时,服务器为每个用户启动一个线程。 一个servlet的生命周期主要有下列三个过程组成: (1) servlet第一次被请求加载时,服务器创建servlet,servlet调用init方法完成必要的初始化工作。 (2) 新诞生的servlet再调用service方法响应用户的请求。 (3) 当服务器关闭时,调用destroy方法销毁servlet。

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

6.2.2  init方法


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

6.2.3  service方法


public void service(HttpServletRequest request  HttpServletResponse  response)throw ServletException,IOException Tomcat服务器将两个参数传递给该方法。和init方法不同的是,init方法只被调用一次,而service方法可能被多次的调用。当后续的用户请求该servlet时,Tomcat服务器将启动一个新的线程,在该线程中servlet调用service方法响应用户的请求,调用过程运行在不同的线程中,互不干扰。因此,不同线程的service方法中的局部变量互不干扰,一个线程改变了自己的service方法中局部变量的值不会影响其他线程的service方法中的局部变量。

6.2.4  destroy方法


public destroy() 当Tomcat服务器终止服务时,destroy()方法会被执行,销毁servlet.子类可直接继承这个方法,一般不需要重写

6.3.通过JSP页面访问servlet


按着部署文件web.xml给出的servlet的url-pattern,用户除了可以在浏览器输入url-pattern请求运行一个servlet外,也可以通过JSP页面来请求一个servlet。 需要特别注意的是,如果web.xml文件中给出的servlet的url-pattern是/lookHello,那么JSP页面请求servlet时,必须要写成 lookHello,不可以写成/lookHello。

通过表单向servlet提交数据

如果web.xml文件中给出的servlet的url-pattern是/computeBill,那么form表单中action给出的值就是computeBill : <form  action= "computeBill "  > </form>

6.4.共享变量


Servlet类是HttpServlet的一个子类,在编写子类时就可以声明某些成员变量,那么,请求servlet的用户将共享该servlet的成员变量。

service方法可能被多次的调用。也就是说,当后续的用户请求该servlet时,Tomcat服务器将启动一个新的线程,在该线程中servlet调用service方法响应用户的请求,即每个用户的请求都导致service方法被调用执行,调用过程运行在不同的线程中,互不干扰。因此,不同线程的service方法中的局部变量互不干扰,一个线程改变了自己的service方法中局部变量的值不会影响其他线程的service方法中的局部变量。

6.5.doGet和doPOST方法


HttpServlet类除了init、service、destroy方法外,该类还有两个很重要的方法:doGet和doPost,用来处理用户的请求并作出响应。 实际上HttpServlet类所给出的service方法的功能是检查HTTP请求类型(get、post),并在service方法中根据用户的请求方式,在service方法中对应地再调用doGet或doPost方法。 因此,在编写的Servlet类(HttpServlet类的一个子类)时,也可以不重写service方法来响应用户,直接继承service方法即可。 如果不重写service方法,就需要在Servlet类中重写doPost或doGet方法来响应用户的请求。

6.6.重定向与转发


转发(forwar)和重定向方法(sendRedirect)不同的是,用户可以看到转发到的JSP页面或servlet的运行效果,但是,在浏览器的地址栏中不能看到forward方法转发到的JSP页面的地址或servlet的地址,用户在浏览器的地址栏中所看到的仍然是当前JSP页面的URL或servlet的url-pattern。如果此时刷新浏览器,那么请求将是当前的JSP页面或servlet。所转发到的标页面或servlet可以使用request获取用户提交的数据。而重定向的目标页面或servlet无法使用request获取用户提交的数据。

6.7.使用session


HTTP通信协议是用户与服务器之间一种请求与响应(request/response)的通信协议,属于无状态协议。所谓无状态是指,当用户(浏览器)发送请求给服务器,Tomcat服务器作出响应后,如果同一个用户再发送请求给Tomcat服务器时,Tomcat服务器并不知道就是刚才的那个用户。简单地说,Tomcat服务器不会记录用户的信息。 用户在访问一个Web服务目录期间,Tomcat服务器为该用户分配一个session对象(称为用户的会话),Tomcat服务器可以在各个页面以及servlet中使用这个session记录用户的有关信息,而且Tomcat服务器保证不同用户的session对象互不相同。

HttpServletRequest对象request调用getSession方法获取用户的session对象: HttpSession session=request.getSession(true); 访问某个Web服务目录的用户,在不同的servlet中获取的session对象是完全相同的,不同的用户的session对象互不相同
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值