JavaWeb之Servlet

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
请求转发和重定向的区别:
重定向地址栏发生变化,请求转发定地址栏没有变化
重定向需要向服务器发送两次请求,请求转发向服务器发送一次请求
重定向在客户端完成,请求转发在服务器完成
重定向速度慢,请求转发速度快
重定向可以跳转到任意路径,请求转发只能在跳转到本项目

以上是关于JavaWeb之Servlet的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb之Servlet

JavaWeb核心之Servlet

JavaWeb核心之Servlet

javaWeb核心之servlet

javaWeb之servlet获取表单数据

JavaWeb核心之Servlet