手记

JavaWeb之Servlet


1. Servlet

其实servlet就是一个Java程序,运行在服务器上,用于接收和响应客户端的请求

2. 创建Servlet

创建一个servlet继承,继承HttpServlet,重写doget、dopost方法

3.配置Servlet

<?xml version="1.0" encoding="UTF-8"?>

 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

 version="4.0">

 <servlet>

 <!--注册一个名为HelloServlet的Servelt,路径为xxx-->

 <servlet-name>HelloServlet</servlet-name>

 <servlet-class>com.kernel.test.HelloServlet</servlet-class>

 </servlet>

 <servlet-mapping>

 <!--将url-pattern里面设置的路径映射到已注册的Servlet上-->

 <servlet-name>HelloServlet</servlet-name>

 <url-pattern>/hello.do</url-pattern>

 </servlet-mapping>

 </web-app>

4. Servlet执行流程

从地址栏上获取路径,然后找到Web.xml这个配置文件,将路径和pattern向匹配,如果不能匹配,返回404,如果能匹配上,找到和这个pattern对应是servlet-name,然后通过这个servlet-name,找到servlet里面的servlet-name,是否内容相同,如果不相同,返回404,如果相同,找到这个servlet-name对应的class文件的路径,然后执行该class的servce方法

5. Servlet生命周期

当第一次发出http请求时,会调用init方法,创建servlet。然后每次访问都会调用service方法,直到从tomcat服务器将项目移出或者调用shutdown.bat才会调用destroy,销毁servlet

6. Servlet初始化时机

默认情况下,只有初次请求servlet时,才会调用init方法,创建实例。我们通常在web.xml文件的servlet标签中增加一个子标签,on-load-startup中增加一个正整数,数值通常大于1,数值越少,说明它实例越早被创建。

<servlet>

 <servlet-name>HelloServlet</servlet-name>

 <servlet-class>com.kernel.test.HelloServlet</servlet-class>

 <load-on-startup>4</load-on-startup>

 </servlet>

7. ServletConfig

可以通过该对象的实例获取Servlet的配置信息

当我们引入别人的Servlet生成的jar包时,假如这个Servlet需要一个参数,我们我们使用这个Servlet的时候,在注册这个Servlet,必须要在Servlet中定义init-nit-param。

8. Servlet匹配方式

全路径匹配:/list

前半段匹配:/list/

扩展名匹配:.扩展名

9. ServerContext

Servlet上下文,每个Web工程都有且仅有一个ServletContext对象,可以获取全局配置参数,还可以使用ServletContext读取配置文件

10. HttpServletRequest

request.getHeader():获取请求头

request.getParameter():获取提交过来的数据

11. 请求参数中文乱码解决方案

POST

POST提交参数产生中文乱码的原因是客户端和服务端通信的编码不一致,我们只需设置双方为统一的编码就可以了

request.setCharacterEncoding("UTF-8");

GET

对于以GET提交的中文参数,即使设置以指定编码方式接收数据也没用。默认还是会使用ISO8859-1这个编码接收数据,所以我们的解决策略是先以ISO8859-1编码接收数据,接收到的数据为字节数组,然后通过字节数组构建字符串,代码如下:

String name = request.getParameter("name");

String name =new String(name.getBytes("ISO8859-1"), "UTF-8") ;

12. HttpServletResponse

response.getOutputStream():向浏览器发送数据

response.setStatus():设置响应状态码

响应数据中,如果有中文,会出现乱码问题,代码如下:

response.setHeader("Content-type", "text/html;charset=UTF-8")

13.请求转发和重定向

请求转发

request.getRequestDispatcher("index.html").forward(request, response);

重定向(两种写法)

response.setStatus(302);

response.setHeader("Location", "index.html");

response.sendRedirect("index.html");

请求转发和重定向的区别:

重定向地址栏发生变化,请求转发定地址栏没有变化

重定向需要向服务器发送两次请求,请求转发向服务器发送一次请求

重定向在客户端完成,请求转发在服务器完成

重定向速度慢,请求转发速度快

重定向可以跳转到任意路径,请求转发只能在跳转到本项目

©著作权归作者所有:来自51CTO博客作者灰白世界的原创作品,如需转载,请注明出处,否则将追究法律责任


1人推荐
随时随地看视频
慕课网APP