Servlet生命周期 转发与重定向 web应用路径问题

Servlet的生命周期

Servlet的生命周期体现在以下几个方法:

l 构造器:第一次请求servlet的时候执行,证明第一次请求servlet的时候,servlet对象被创建,在整个生命周期中只执行一次,用于创建servlet对象;

l Init: 第一次请求servlet的时候执行,用于初始化servlet,在整个生命周期中只执行一次;

l Service:每次请求servlet都会执行,用户获取客户端请求,执行多次;

l Destroy:关闭服务器的时候执行,只执行一次,用于销毁servlet;

ServletConfig和ServletContext接口

ServletConfig:

代表servlet的配置,存在于servlet中的init方法中

1.可以获取注册时servlet的名称

2.可以获取初始化参数

3.还可以获取servletContext对象

ServletContext:

意思为servlet上下文,代表当前的web应用

1.可以获取当前web应用的初始化参数

2.获取项目中资源的真实路径

转发和重定向

l 转发:客户端向目标资源发送请求的时候,目标资源又把请求交个另一个资源进行处理的过程;如果另一个资源是图片或者是html直接给浏览器响应当前文件

l 转发流程图:

在这里插入图片描述
在这里插入图片描述

l 重定向流程图:

在这里插入图片描述

l 转发和重定向的区别:
  1. 转发往服务器发送一次请求;重定向往服务器发送两次请求

  2. 转发地址栏不发生变化;重定向地址栏发生变化

  3. 转发在服务器内部完成,浏览器感知不到;重定向是给浏览器发送302状态码,告诉浏览器访问新的的值

  4. 转发可以访问WEB-INF下的资源;重定向不能访问WEB-INF下的资源

请求响应乱码问题

l 编码:把字符转为二进制的过程称为编码

l 解码:把二进制转换为字符称为解码

l 乱码:当编码和解码格式不一致的时候就会出现乱码

编码格式需和解码格式保持一致

请求中含有中文:请求是由客户端发送给服务器

由浏览器编码:

浏览的编码格式使用由.html中meta中的charset属性值来指定,通常指定为utf-8

由服务解码:服务默认的解码格式为iso-8859-1(具体情况见下)

问题的解决
Post请求:

post请求中含有中文的话,由服务器解码, 解码是在servlet中进行的 ,servlet的默认解码格式为iso-8859-1,那么需要设置servlet的解码格式为utf-8,对请求体中的内容进行解码,即通过:request.setCharacterEncoding(“utf-8”); 注意:要设置在request.getParameter之前;

Get请求:

get请求的请求信息存储在地址栏,由tomcat服务器优先获取,所以被tomcat优先解码**,tomcat7默认解码格式为iso8859-1, tomcat8默认解码格式为utf-8,那么需要设置tomcat7的解码格式为utf-8,即在tomcat7的server.xml文件中加入URIEncoding=“utf-8”,解决乱码问题;

响应中含有中文:

响应是由服务器发送给客户端

由服务器编码:默认编码格式iso-8859-1

由客户端解码:默认解码格式为GBK

问题的解决:

告诉浏览器使用utf-8对响应体中的内容进行解码,并且响应体也会使用该字符集编码

response.setContentType(“text/html;charset=utf-8”);

web应用中的路径问题

“/”代表绝对路径

在浏览器中“/”绝对路径代表:http://localhost:8080/

哪些地址由浏览器解析a标签,script标签中的src;link标签中的href、重定向中的地址都是由浏览器解析

在服务器中“/”绝对路径代表:http://localhost:8080/项目名称/

哪些地址由服务器解析转发中的地址,web.xml中utl-pattern中的地址,getServletContext().getRealPath("")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值