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博客作者灰白世界的原创作品,如需转载,请注明出处,否则将追究法律责任
共同学习,写下你的评论
评论加载中...
作者其他优质文章