Servlet对象的比较
Request和response在每一次访问时都被创建。由容器创建的
Serlvet只会被创建一次,由用户来开发,由容器来创建,单一的实例。
ServletConfig会为每一个Servlet创建一个Config对象,且由Servlet维护。就是声明成了成员变量。
ServletContext对象,是这一个项目就只有一个此对象。
Request功能
1.接收用户的参数
1).getParameter(String)方法
根据名字获取一个参数,返回类型为String
2).getParameterValues (String)方法
根据名字获取一组相关的数据,返回类型为String[]
3).getParameterNames ()方法
获取所有参数的名字,返回类型为Enumeration
4).getParameterMap ()方法
获取所有数据,,返回类型为Map
2.接收用户的所有请求头信息
3.转发、包含
4.做为域对象也可以存放数据
request:封装了http请求信息,说白了就是通过这个对象去获取请求信息,它是ServletRequest的子接口
Response功能
1.设置响应内容
给用户输出html数据
2.设置响应头
请求的时的请求头由tomcat服务器来读取,但响应时的响应头由浏览器来读取,用于影响浏览器的行为。如是否要缓存这次响应的数据、状态码
3.重定向
就是将请求发送回浏览器。然后由浏览器再重新向服务器自动的发送一个请求。
为什么会出现乱码?
因为我们获取请求和响应结果都需要经过Tomcat服务器,而Tomcat服务器的编码为iso-8859-1。
解决响应乱码
第一种方式:可以处理post和get请求
response.setContentType("text/html;charset=utf-8");
第二种方式:只是针对post请求
String username=request.getParameter("username");//乱码,它现在的格式是iso-8859-1
byte [] byte1=username.getBytes("iso-8859-1");//把获取的name值(iso-8859-1)转成字节码
String username1=new String(byte1,"utf-8");
out.write("姓名为:"+username1);
解决请求乱码
第一种方式:把请求数据转成字节码然后转成utf-8字符串
request.setCharacterEncoding("utf-8");
第二种方式:可以修改Tomcat的server.xml文件,在connector节点添加useBodyEncodingForURI=“true”,而Tomcat8.0及以上已经默认处理,8.0以下版本,需要手动添加该配置,只针对get请求
转发:是将请求在服务器内部交给另一个组件再去执行,同时共享request中的数据
1.请求转发和重定向
本质区别:请求转发只是发了一次请求,重定向发送了两次请求。
1).请求转发:地址栏还是初次请求的地址栏
请求重定向:地址栏不是初次请求的地址栏,地址栏是最后一次响应的地址栏
2).请求转发:在最终servlet中,request对象和中转的request对象是同一个对象
请求重定向:在最终servlet中,request对象和中转的request对象不是同一个对象
3)请求转发:/代表当前web应用的根目录http://localhost:8080/Servlet02 --这就是当前web应用根目录
请求重定向:/代表当前web站点的根目录http://localhost:8080 --这是当前web站点
4)请求转发:只能转到当前web资源
请求重定向:可以重定向到外部资源
重定向:就是将请求发送回浏览器。然后由浏览器再重新向服务器自动的发送一个请求。
执行重定向的状态码:302