一、请求响应及常用状态码
1.请求:在浏览器地址栏输入地址,点击回车请求服务器
2.响应:服务器根据浏览器发送的请求,返回数据到浏览器在网页上进行显示
3.常用状态码:
200 响应成功
302重定向
404请求资源找不到
500服务器代码出异常
二、如何查看网页中的响应头
百度:打开网页按F12,开启Chrome开发者工具,刷新网页后找到Network界面中的headers菜单,下拉点击User-AGgent
搜狗:右键单击审查元素,找到Network,刷新页面点击header菜单
谷歌: 按下 F12 ,打开开发者工具,切换到Network 选项卡 ,刷新页面,点击具体的request,就可以查看http相关的信息了
四、页面中定时跳转与刷新
1.定时跳转需要用到Refresh响应头
例:
response.setHeader(“Refresh”,“5;URL=/chapter/login.html”);
这里面的“5”代表定时跳转的时间;“URL”表示跳转页面地址
2. 定时刷新:当前页面地址不发生改变且可以自己定时刷新,页面数据也会发生改变
例:
response.setHeader(“Refresh”,“5”);
response.getWriter().print(new Data());
五、解决中文乱码问题
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2 // 处理字符流流的中文乱码问题
3 //2.处理服务器端的编码,让这个编码支持中文
4 //response.setCharacterEncoding("utf-8");
5 //3.处理浏览器端的编码
6 //response.setHeader("Content-Type", "text/html;charset=utf-8");
7 response.setContentType("text/html;charset=GB18030");
8 String data="中国";
9 //4.获取字符流
10 PrintWriter pw = response.getWriter();
11 pw.print(data);
12
13 ServletOutputStream out = response .getOutputStream() ;
14 //2.处理乱码:服务器端的编码和浏览器端的编码一致
15 //3.让浏览器短的编码也是utf-8
16 //response.setHeader("Content-Type", "text/html;charset=utf-8");
17 response.setContentType("text/html;charset=utf-8");
18 //4.让服务器端的中文编码格式是utf-8
19 out.write(data.getBytes("utf-8"));
20 }
六、获取请求头的方法
1.根据请求头获取值:
String value = getHeader(消息头名称);
2.获取所有请求头:
Enumeration er = getHeaderNames();
七、请求中文乱码解决方式
1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
2
3 //1.获取用户名
4 response.setContentType("text/html;charset=utf-8");
5 String value = request.getParameter("username");
6 String newvalue = new String(value.getBytes("ISO8859-1"),"utf-8");
7 response.getWriter().print("处理后的值:"+newvalue);
8 }
9
10 private void paramMethod(HttpServletRequest request) {
11 // 1.根据name属性值,获取用户输入值:
12 String username = request.getParameter ("username");
13 String password = request.getParameter ("password");
14 //2.获取用户选择的值
15 String[] hobbys = request.getParameterValues("hobby");
16 //response.getWriter() .println ("username:"+username+"<br/>");
17 //response.getWriter() .println ("password:"+password+"<br/>");
18 //response.getWriter() .println ("hobbys:"+Arrays.toString(hobbys));
19 Map<String,String[]>map=request.getParameterMap();
20 //遍历map
21 Set<String> set=map.keySet();
22 for(String key:set) {
23 String[] value = map.get(key);
24 System.out.println("name属性旳值:"+key+" "+Arrays.toString(value));
25 }
26 }
27
28 /**
29 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
30 */
31 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
32
33 //doGet(request, response);
34 //1.获取用户输入的值
35 //处理请求中文代码的乱码问题
36 request.setCharacterEncoding("utf-8");
37 String value =request.getParameter("username");
38 System.out.println(value);
39 //处理响应中文
40 response.setContentType("text/html;charset=utf-8");
41 PrintWriter out=response.getWriter();
42 out.print(value);
43
44 }
八、请求重定向与请求转发的区别
1. 请求转发:
特点:发送了一次请求,响应一次,和request域对象配合使用,可以实现值得传递。
转发路径:转发动作是在服务器内部实现的,所以转发路径不要携带项目名称。
2. 请求重定向:
特点:发送了两次请求,响应了两次,不能喝request域对象配合使用。
重定向路径:重定向动作在浏览器端执行的,所以路径需要携带项目名称。
九、请求包含
请求包含的动作
PrintWriter out = response.getWriter() ;
out .print (" including before----"+"<br/>") ;