四、JavaWeb之servlet详解
1.servlet的简介
servlet运行在服务器端,由web服务器负责加载的,独立于平台各协议的Java应用程序。它使用最多的协议是HTTP协议,HTTP协议的特点是每次连接只能处理一个请求。处理过程为:建立连接,发送请求,提供服务,发送响应,关闭连接。
servlet具有跨平台、可移植等特点。
2.servlet的生命周期
servlet的生命周期主要包括四个过程:
(1)加载和实例化
加载和实例化由servlet容器来实现,加载servlet容器后,容器会通过Java的反射机制来创建相应的servlet实例。
(2)初始化
当servlet实例创建完毕后,会调用init()方法执行一些初始化操作,用来初始化该servlet对象。初始化的目的是为了先完成一些初始化操作。每个servlet实例只调用一次init方法。
(3)执行
当客户端请求到来后,servlet容器会针对该请求创建一个servletRequest对象和servletResponse对象,然后servlet容器会自动调用service()方法来响应客户端的请求。将servletRequest对象和servletResponse对象传给service方法。
(4)销毁
当servlet实例从web容器中移除时,需要调用destroy()方法,让该实例释放掉他使用的资源。
在servlet整个生命周期中,init和destroy只执行一次,service方法的执行次数取决于被客户端的请求数。而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。
//生命周期相关方法
public class HelloServlet extends HttpServlet {
private ServletConfig config;
public ServletConfig getServletConfig(){
return config;
}
public void init(ServletConfig config)throws ServletException{
this.config=config;
System.out.println("初始化!");
}
Public void service(ServletRequest req,ServletResponse res)
throws ServletException,IOException{
PrintWriter out = res.getWrite();
out.println("Hello world");
out.close();
}
public void destroy() {
super.destroy();
System.out.println("释放资源!"); }
}
3.servlet常用的类和接口
Servlet接口(init(),service(),destroy())
|
genericServlet(抽象类,里面包含抽象方法service())
|
httpservlet(重写service方法,用于接收用户请求的方式,返回用哪种方式进行处理数据)
|
myservlet关键是对doGet(),doPost方法进行重写,以实现客户端请求的响应
最后在myservlet中只需要重写doget()和dopost()方法。
servlet相关接口图:
(1)ServletConfig接口
在Servlet初始化过程中获取配置信息
一个Servlet只有一个ServletConfig对象
(2)ServletContext接口
获取Servlet上下文
JSP内置对象application即ServletContext实例
(3)GenericServlet抽象类
提供了Servlet与ServletConfig接口的默认实现方法
GenericServlet的常用方法
void init(),初始化Servlet
ServletContext getServletContext(),返回Servlet的上下文对象引用,实际上是调用ServletConfig接口的同名方法
(4)HttpServlet继承于GenericServlet
处理HTTP协议的请求和响应
HttpServlet的方法
void doGet(HttpServletRequest request,HttpServletRresponse response)以Get请求服务时调用
void doPost(HttpServletRequest request,HttpServletRresponse response)以Post请求服务时调用
(5)使用doXxx()接收用户请求
doGet():用户使用get方式提交请求时调用
doPost():用户使用post方式提交请求是调用
(6)HttpServletRequest类常用方法
String getParameter(String param)获取客户端请求数据
void setCharacterEncoding(String encoding)设置输入字符集
(7)HttpServletResponse类常用方法
void setContentType(String contType) 设置输出字符集
void sendRedirect(String url)让浏览器重定向到指定的资源
4.Tomcat中部署Servlet
5.servlet在web.xml中的配置
<!--配置servlet的信息-->
<servlet>
<servlet-name>LoginServlet</servlet-name>////servlet的名称
<servlet-class>com.lwj.servlet.LoginServlet</servlet-class>//servlet类所在的路径
</servlet>
<!--配置servlet的访问路径-->
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>//servlet的名称
<url-pattern>/LoginServlet</url-pattern>//指定servlet的访问路径
</servlet-mapping>
当服务器运行时,首先加载web.xml这个全局配置文件。根据客户端发送的请求,web容器分配相应的servlet。根据servlet指定的访问路径在web.xml文件中找到相应的servlet名,进而找到servlet类所在的目录。
推荐阅读
-
06-码蚁JavaWeb之Servlet生命周期与基本配置
-
入职小白随笔之Android四大组件——活动详解
-
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
-
javaWeb核心技术第七篇之HTTP、Tomcat、Servlet、Request和Response
-
JAVAWeb核心之Servlet
-
javaWeb核心技术第四篇之Javascript第二篇事件和正则表达式
-
四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解
-
JAVA之Servlet详解
-
荐 JavaWeb之Servlet(二)Servlet生命周期方法与GET/POST请求分发
-
荐 JavaWeb三大件之Servlet基础2.x版本