重定向
1.概述
浏览器请求服务器,服务器通过HTTP协议约定响应头去告诉浏览器,并实现请求
状态码:302
2.特点
a.两次请求,两次响应
b.地址栏会发生变化
c.可以跳转到外部站点资源,也可以跳转到内部站点的资源
3.方法
a.方式1
response.setStatus(302);设置状态码
response.setHeader("location", "网址");设置头,跳转外部网址
b.方式2response.setHeader("location", "内部文件");设置头,跳转内部资源
response.sendRedirect("跳转地址");
String method = request.getMethod();
// 获取URI
String uri = request.getRequestURI();
// 获取URL StringBuffer url = request.getRequestURL();
// 获取协议版本
String protocol = request.getProtocol();
// 获取ip
String ip = request.getRemoteAddr();
// 获取主机名
String host = request.getRemoteHost();
// 获取端口
int port = request.getRemotePort();
System.out.println(method);
System.out.println(uri);
System.out.println(url);
System.out.println(protocol);
System.out.println(ip);
System.out.println(host);
System.out.println(port);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
处理请求:解决中文乱码
处理表单提交后台的数据
a.处理get请求
get请求参数拼接在URL后面,通过getQueryString();获取请求参数
获取的是浏览器进行了一个URLEncode()编码后的值
要通过URLDecoder.decode();进行编码,否则会出现中文乱码
b.处理post请求
post请求把请求参数封装在请求体里面
通过request.getReader().readLine();获取
然后通过decode进行编码
c.验证
在index.jsp中写一个表单,提交用户名(中文)和密码
观察控制台获取的参数
String line = request.getQueryString();
// 通过decode进行编码 username=张三&password=123456
line = URLDecoder.decode(line, "utf-8");
// 获取信息
// 截取&
String[] split = line.split("&");
// 截取=获取信息
String username = split[0].split("=")[1];
String password = split[1].split("=")[1];
System.out.println(username + "---" + password);
}
// post请求
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 从请求体中获取处参数
String line = request.getReader().readLine();
// 转码 username=张三&password=123456
line = URLDecoder.decode(line, "utf-8");
// 获取信息
// 截取&
String[] split = line.split("&");
// 截取=获取信息
String username = split[0].split("=")[1];
String password = split[1].split("=")[1];
System.out.println(username + "---" + password);
}
请求域
1.request
a.是一个请求对象,用来封装请求消息
b.是一个域对象,可以在他的范围内共享数据
c.请求的范围:一次请求和一次响应之间
2.请求转发
a.request.getRequestDispatcher("/mydemo").forward(request, response);
将当前请求转向1mydemo2,不用输入工程名
b.特点
1)一次请求一次响应
2)地址栏不发生变化
3)只能访问内部站点资源
c.什么时候使用重定向?什么时候使用转发?
1)如果需要在请求的多个资源中共享数据,则使用转发
2)如一次性的数据存入请求域中