【JSP】java Servlet基础

目录

  • 概述
    • serlet 的部署、创建与运行
      • 源文件及字节码
        • sevlet类
        • 字节码文件的保存
      • 编写部署文件web.xml
        • ``标记及子标记
        • ``标记及子标记
      • servlet的创建与运行
      • 向servlet传递参数的值
    • servlet的工作原理
      • servlet对象的生命周期
      • init方法
      • service方法
      • destroy 方法
    • 通过JSP页面访问servlet
  • 剩下的见github中PPT

概述

有些Web应用可能只需要JSP+Javabean就能设计的很好,但是有些Web应用,就可能需要JSP+Javabean+servlet来完成,

即需要服务器再创建一些servlet,配合JSP页面来完成整个Web应用程序的工作,关于这一点将在MVC模式中讲述

本章将使用javax.servlet.http包中的类, javax.servlet.http包不在JDK的核心类库中,因此需要将Tomcat安装目录lib子目录中的servlet-api.jar文件复制到Tomcat服务器所使用的JDK的扩展目录中
程序代码见github

serlet 的部署、创建与运行

Java Servlet的核心思想是在服务器端创建能响应用户请求的对象,即创建servlet,简称servlet。

因此,学习Java Servlet的首要任务是掌握怎样编写创建servlet的类、怎样在Tomcat服务器上保存编译这个类所得到的字节码、怎样编写部署文件、怎样请求Tomcat服务器创建一个servlet。

源文件及字节码

sevlet类

写一个创建servlet的类就是编写一个特殊类的子类,这个特殊的类就是javax.servlet.http包中的HttpServlet类。

这样的子类创建的对象习惯地被称作一个servlet

例子1中的Example5_1_Servlet.java是一个简单的Servlet类,该类创建的servlet可以响应用户的请求

package myservlet.control;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Example5_1_Servlet extends HttpServlet{public void init(ServletConfig config) throws ServletException{super.init(config);}public void service(HttpServletRequest reqest,HttpServletResponse response)throws IOException{reqest.setCharacterEncoding("gb2312");String str=reqest.getParameter("moon");response.setContentType("text/html;charset=gb2312");//设置响应的MIME类型PrintWriter out=response.getWriter();//获得一个向用户发送数据的输出流String sevletName=getServletName();out.println("");out.println("请求的servlet的名字是"+sevletName+"
");out.println("servlet在Web设计中非常重要
(见稍后的第6章)
"
);if(str!=null&&str.length()>=1)out.println("

"+str+"

");out.println("");} }

字节码文件的保存

在这里插入图片描述

在这里插入图片描述

编写部署文件web.xml

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

编写的web.xml文件需要保存到Web服务目录的WEB-INF子目录中。
根据例1的servlet类,我们编写的web.xml文件如下:


<web-app><servlet><servlet-name>helloservlet-name><servlet-class>myservlet.control.Example5_1_Servletservlet-class>servlet><servlet-mapping><servlet-name>helloservlet-name><url-pattern>/lookHellourl-pattern>servlet-mapping>
web-app>

标记及子标记

标记需要有2个子标记

其中 标记的内容是创建的servlet的名字.

标记的内容指定用哪个Servlet类来创建servlet。

标记及子标记

一个标记会对应地出现一个标记,标记需要有两个子标记:

.

其中标记的是创建的servlet的名字,

< url-pattern >标记用来指定用户用怎样的URL格式来请求servlet,

比如,标记的内容是:/lookHello,
那么用户必须在浏览器的地址栏中键入:
http://127.0.0.1:8080/ch5/lookHello
来请求名字是hello的servlet

servlet的创建与运行

servlet是由Tomcat服务器负责创建,Web设计值只需要为Tomcat的服务器预备好Servlet类的字节码文件、编写好相应的配置文件web.xml即可。

用户就可以根据web.xml部署文件来请求服务器创建并运行一个servlet

现在,用户就可以请求例子1给出的Servlet类所创建的名字是hello的servlet了,根据5.2中的web.xml文件,用户需在浏览器键入:
http://localhost:8080/servlet_test_war_exploded/lookHello
请求服务器运行名字是hello的servlet,效果如图5.4(a)所示。

在这里插入图片描述

这边需要注意
需要将注意url路径与文件目录一致
也要和 ......中间的地址一致

在这里插入图片描述
在这里插入图片描述

向servlet传递参数的值

在这里插入图片描述

在请求一个servlet时,可以在请求的url-pattern中额外的加入参数及其值,格式是:
servlet名?参数1=值1&参数2=值…参数n=值
那么被请求的servlet就可以使用request对象获取参数的值,例如:
request.getParameter(参数n)
比如可以在浏览器的浏览器键入:
http://localhost:8080/servlet_test_war_exploded/lookHello?moon=loveliness
请求例子1中的servlet,并向其传递参数moon的值:“loveliness”,运行效果如图5.4(b)所示。

servlet的工作原理

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

servlet对象的生命周期

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

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

init方法只被调用一次,即在servlet第一次被请求加载时调用该方法。

当后续的用户请求servlet服务时,Web服务将启动一个新的线程,在该线程中,servlet调用service方法响应用户的请求,

也就是说,每个用户的每次请求都导致service方法被调用执行,其执行过程分别运行在不同的线程中。

init方法

该方法是HttpServlet类中的方法,可以在子类中重写这个方法。

init方法的声明格式:
public void init(ServletConfig config) throws ServletException

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

service方法

该方法是HttpServlet类中的方法,我们可以在子类中直接继承该方法或重写这个方法。service方法的声明格式:
public void service(HttpServletRequest request HttpServletResponse response) throw ServletException,IOException

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

destroy 方法

该方法是HttpServlet类中的方法,子类可直接继承这个方法,一般不需要重写。destroy方法的声明格式:
public destroy()
当服务器终止服务时,比如关闭服务器等,destroy()方法会被执行,消灭servlet

通过JSP页面访问servlet

用户除了可以在浏览器的地址栏中直接键入servlet的请求格式来请求运行一个servlet外,也可以通过JSP页面来请求一个servlet。

也就是说,可以让JSP页面负责数据的显示,而让一个servlet去做和处理数据有关的事情。

需要特别注意的是,如果web.xml文件中标记的子标记指定的请求servlet的格式是“/lookHello”,那么JSP页面请求servlet时,必须要写成 “lookHello”,不可以写成“/lookHello”,否则将变成请求root服务目录下的某个servlet。

剩下的见github中PPT

代码和PPT见github,感谢star


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部