Servlet 简介
Java Servlet运行在Servlet容器中,Servlet容器负责Servlet和客户端的通信以及调用Servlet方法,servlet和客户端的通信采用“请求/响应”的模式。Servlet功能:
- 创建并返回基于客户请求的动态
html页面 - 创建可嵌入到现有
html页面中的部分html页面 - 与其他服务器资源进行通信
- 创建并返回基于客户请求的动态
Servlet 容器响应客户请求的过程
Servlet引擎检查是否已经装载并创建了该Servlet的实例对象- 装载并创建该
Servlet的一个实例对象:调用该Servlet的构造器 - 调用
Servlet实例对象的init()方法 - 创建一个用于封装请求的
ServletRequest对象和一个代表响应消息的ServletResponse对象,然后调用Servlet的Service()方法并将请求和响应对象作为参数传递进去 - WEB应用程序被停止或者重新启动之前,
Servlet引擎将卸载Servlet,并在卸载前调用Servlet的destroy()方法
Servlet 的配置和映射
<servlet>
<!--Servelt 注册的名字-->
<servelt-name>helloServlet</servelt-name>
<!--Servlet 全类名 -->
<servlet-class>io.github.gongfukangEE.helloServlet</servlet-class>
<!-- 指定 Servlet 被创建的时机 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 需要和某一个 servlet 节点的 servlet-name 子节点的文本节点一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体的访问路径:/ 代表当前WEB的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
Servlet 生命周期的方法
- 构造器:只有第一次请求
Servlet时,创建Servlet的实例,调用构造器,说明Servlet是单实例的! init方法:只被调用一次,在创建好实例后立即被调用,用于初始化当前Servletservice方法:被多次调用,每次请求都会调用Service方法,实际用于请求响应destroy方法:只被调用一次,当前Servlet所在的WEB应用被卸载前调用,用于释放当前Servelt所占用的资源
ServletConfig : 封装了Servlet的配置信息,并且可以获取ServletContext对象
<!-- 配置 Servlet 的初始化参数 -->
<init-param>
<!-- 参数名 -->
<param-name>user</param-name>
<!-- 参数值 -->
<param-value>root</param-value>
</init-param>
- 获取初始化参数
getInitParameter(String name):获取指定参数名的初始化参数getInitParameterNames():获取参数名组成的Enumeration对象
ServletContext 接口:
可以由ServletConfig获取
ServletContext servletContext = servletConfig.getServletContext();
Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServeltConfig.getServletContext方法可以返回ServletContext对象的引用。<!-- 配置当前应用的初始化参数 --> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param>获取初始化参数:
getInitParametergetInitParameterNames
获取当前WEB应用的某一个文件的绝对路径
Servlet 与 HTTP
Servlet的service()方法用于应答请求:因为每次请求都会调用servic()方法public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("请求来了!"); }ServletRequset:封装了请求信息,可以从中获取到任何请求信息ServletResponse:封装了响应信息,如果想给用户什么响应,均可以使用该接口的方法实现
ServletRequest- 获取请求参数
String getParameter(String name):根据请求参数的名字,返回参数值(单选)String[] getParameterValues(String name):根据请求参数的名字,返回请求参数的字符串数组(多选)Enumeration getParameterNames():返回参数名对应的Enumeration对象Map getParameterMap():返回请求参数的键值对- 获取请求的
URI
HttpServletRequest httpServletRequest=(HttpServletRequest) servletRequest; String requestURI=httpServletRequest.getRequestURI(); System.out.println(requestURI);- 获取请求的
Servelt映射路径
String servletPath =httpServletRequest.getServletPath(); System.out.println(servletPath);ServletResponsegetWriter():返回PriterWriter对象,调用该对象的print()方法,把peiter()中的参数直接打印在浏览器上servletResponse.setContentType("application/msword")设置响应的内容类型,具体类型可在Tomcat/conf/web.xml文件中查找
GenericServlet是一个
Servlet,是Servlet接口和ServletConfig接口的实现类,但是一个抽象类,其中的Service方法为抽象方法,它可以使开发更加简洁public abstract class GenericServlet implements Servlet,ServletConfig{}
HttpServlet
- 继承自
GenericServlet,针对于HTTP协议所定制 - 在
Service()方法中直接把ServletRequest和ServletResponse转为HttpServletRequest和HttpServletResponse,并调用了重载的Service(HttpServletRequest,HttpServletResponse),在Service()方法中获取了请求方式:request.getMethod(),根据请求方式创建了doGet()和doPost()方法等
本文介绍了Servlet的基本概念,包括其在Servlet容器中的运行机制、请求/响应模式、主要功能及生命周期方法。同时,还讲解了如何通过配置文件进行Servlet的配置和映射。
1054

被折叠的 条评论
为什么被折叠?



