JSP学习笔记 09 - Java Servlet基础

本文将使用 javax.servlet.http 包中的类 ,javax.servlet.http 包不在JDK 的核心类库中, 因此需要将 Tomcat 安装目录lib 子目录中的servlet-api.jar 文件复制到 Tomcat服务器所使用的JDK的扩展目录中,比如,复制到 D:\jdk1.7\jre\lib\ext中。

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

Java Servlet的核心思想是在服务器端创建能响应用户请求的对象, 即创建servlet , 简称servlet 。因此, 学习JavaServlet的首要任务是掌握怎样编写创建servlet的类、怎样在 Tomcat服务器上保存编译这个类所得到的字节码、怎样编写 部署文件、怎样请求Tomcat服务器创建一个servlet

编写创建servlet的类
保存编译
编写部署文件
请求 Tomcat服务器创建一 个servlet

1、源文件及字节码文件

  1. Servlet类
    写一个创建servlet的类就是编写一个特殊类的子类,这 个特殊的类就是javax.servlet.http包中的HttpServlet类。这 样的子类创建的对象习惯地被称作一个servlet
  2. 字节码文件的保存
    为了调试代码的方便,可以事先将创建servlet的类的源文件, 按着其包名,保存到Web服务目录的下述子目录中:
    \WEB-INF\classes\myservlet\control
    然后按如下格式编译源文件:classes>javac myservlet\control\Servlet源文件 例如:
    classes>javac myservlet\control\Example5_1_Servlet.java

2、编写部署文件 web.xml

Servlet类的字节码保存到指定的目录后,必须为Tomcat服务器编写一个部署文件,只有这样,Tomcat服务器才会 按用户的请求使用Servlet字节码文件创建对象。
编写的web.xml文件需要保存到Web服务目录的WEB-INF 子目录中, 比如ch5\WEB-INF 中。根据例子1给出的 Servlet类,我们编写的web.xml文件的内容如下):

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>myservlet.control.Example5_1_Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/lookHello</url-pattern>
</servlet-mapping>
</web-app>
  1. <servlet>标记及子标记
    <servlet>标记需要有2个子标记:
    <servlet-name>和<servlet-class>
    其中<servlet-name>标记的内容是创建的servlet的名字.
    <servlet-class>标记的内容指定用哪个Servlet类来创建servlet
  2. <servlet-mapping>标记及子标记
    一个<servlet> 标记会对应地出现一个 <servlet-mapping> 标记,
    <servlet-mapping>标记需要有两个子标记:
    <servet-name><url-pattern>.
    其中<servet-name>标记的是创建的servlet的名字,<url-pattern >标记 用来指定用户用怎样的URL格式来请求servlet,比如,<url-pattern>标记的内容是:/lookHello
    那么用户必须在浏览器的地址栏中键入:
    http://127.0.0.1:8080/ch5/lookHello
    来请求名字是helloservlet

3、servlet的创建与运行

servlet 由Tomcat 服务器负责创建, Web 设计者只需为 Tomcat服务器预备好Servlet类的字节码文件、编写好相应的配置文件web.xml即可。用户就可以根据web.xml部署文件来 请求服务器创建并运行一个servlet

4、向servlet传递参数的值

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

servlet名?参数1=值1&参数2=值…参数n=值

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

request.getParameter(参数n)

比如可以在浏览器的浏览器键入:

http://127.0.0.1:8080/ch5/lookHello?moon=loveliness

请求lookHello中的servlet,并向其传递参数moon的值:"loveliness"。

二、servlet的工作原理

servletjavax.servlet包中HttpServlet类的子类的一个实例、由服务器负责创建并完成初始化工作。当多个用户请求一个servlet时,服务器为每个用户启动一个线程而不是启动 一个进程,这些线程由服务器来管理,与传统的CGI为每个用户启动一个进程相比较,效率要高的多。

1、servlet 对象的生命周期

一个servlet的生命周期主要有下列三个过程组成:

  1. 初始化servletservlet第一次被请求加载时,服务器初 始化这个servlet,即创建一个servlet,这servlet调用init方法完成必要的初始化工作。
  2. 诞生的servlet再调用service方法响应用户的请求。
  3. 当服务器关闭时,调用destroy方法,消灭servlet

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

2、init方法

该方法是HttpServlet类中的方法,可以在子类中重写这个 方法。init方法的声明格式:

public void init(ServletConfig	config) throws ServletException

servlet第一次被请求加载时,服务器创建一个servlet,这 个对象调用init方法完成必要的初始化工作。init方法只被调用 一次,即在servlet第一次被请求加载时调用该方法。

3、service方法

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

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

当后续的用户请求该servlet时,服务器将启动一个新的线 程,在该线程中,servlet调用service方法响应用户的请求,即每个用户的请求都导致service方法被调用执行,调用过程运行在不同的线程中,互不干扰。

4、destroy方法

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

public destroy()

当服务器终止服务时,比如关闭服务器等,destroy()方法会被执行,消灭servlet

三、通过JSP页面访问servlet

用户除了可以在浏览器的地址栏中直接键入servlet的请求 格式来请求运行一个servlet外,也可以通过JSP页面来请求一 个servlet。也就是说,可以让JSP页面负责数据的显示,而让 一个servlet去做和处理数据有关的事情。
需 要 特 别 注 意 的 是 , 如果 web.xml 文 件 中 <servlet-mapping>标记的子标记<url-pattern>指定的请求servlet的格 式是“/lookHello”,那么JSP页面请求servlet时,必须要写成 “ lookHello” , 不可以写成“/lookHello” , 否则将变成请求 root服务目录下的某个servlet

1、通过表单向servlet提交数据

如果web.xml文件中<url-pattern>指定的请求servlet的格 式是 “/computeBill”, 那么form 表单中 action 给出的值就是 "computeBill ",如下所示意:

<form action= "computeBill"	… …>
</form>

当请求一个servlet时,可以加入参数及其值,格式是:

servlet名?参数1=值1&参数2=值…参数n=值 

例如:

<form action="computeBill?sideA=10.66&sideB=23.9&sideC=897"
… …>
</form>

2、通过超链接访问servlet

如果web.xml文件中<url-pattern>指定的请求servlet的格式是"/triangle",那么<a>超链接标记中href的值是"triangle",如下所示意:

<a href="triangle"></a>

四、共享变量

对于Servlet类所创建的servlet的,用户将共享该servlet的成员变量。

五、doGet和doPost方法

可以在Servlet类中重写doPostdoGet方法来响应用户的请求,这样可以增加响应的灵活性,并降低服务器的负担
如果不论用户请求类型是post还是get,服务器的处理过程完全相同,那么可以只在doPost方法中编写处理过程,而在doGet方法中再调用doPost方法即可,或只在doGet方法中编 写处理过程,而在doPost方法中再调用doGet方法。
如果根据请求的类型进行不同的处理,就需在两个方法中编写不同的处理过程

六、重定向与转发

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

1、sendRedirect方法

void sendRedirect(String location)HttpServletResponse类中的方法。
当用户请求一个servlet时,该servlet在处理数据后,可以 使用重定向方法将用户重新定向到另一个JSP页面或servlet。 重定向方法仅仅是将用户从当前页面或servlet定向到另一个JSP页面或servlet
但不能将用户对当前页面或 servlet 的请求(HttpServletRequest对象)转发给所定向的资源。
也就是说,重定向的目标页面或servlet无法使用request获取用户提交的数据。

2、RequestDispatcher对象

实现转发的步骤如下:
得到RequestDispatcher对象

RequestDispatcher dispatcher=
request.getRequestDispatcher("a.jsp");

转发
例如:dispatcher.forward (request,response);
将用户对当前JSP页面或servlet的请求转变成对a.jsp页面的请求。
注意:

  1. 转发的目标页面或servlet可以使用request获取用户 提交的数据。
  2. 用户在浏览器的地址栏中不能看到forward方法转发的页面的地址或servlet的地址,只能看到该页面或servlet的运行效果

七、使用session

HttpServletRequest对象request调用getSession方法获取用户的session对象:

HttpSession session=request.getSession(true);
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值