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