request和response
request:封装了http请求信息,通过这个对象去获取请求信息,他是ServletRequest的子接口
response:封装了相应信息
//获取姓名的值
//姓名:< input type=“text” name=“username” id=“username”>< br/>
//input属性name的值
String name=request.getParameter(“username”); 获取多个值getParameterValues
System.out.println(name);
//response.getWiter()方法,把结果相应到浏览器
PrintWriter out=response.getWriter();
out.write("
转码
request.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
//请求转发:把请求转发给另一个servlet处理
String path="/testServlet";
request.getRequestDispatcher(path).forward(request, response);
//请求重定向
response.sendRedirect(“testServlet”);
1.请求转发和请求重定向
本质区别:请求转发只是发了一次请求,重定向发了两次请求
(1)请求转发:地址栏还是初次请求的地址栏
请求重定向:地址栏不是初次请求的地址栏,地址栏是最后一次相应的地址栏
(2)请求转发:在最终的servlet中,request对象和中转的request对象是同一个对象
请求重定向:最终的servlet中,request对象和中转的request对象不是同一个对象
(3)请求转发:‘/’代表当前web应用的根目录
请求重定向:‘/’代表当前web站点的根目录
(4)请求转发:只能转到当前web资源
请求重定向:可以重定向到外部资源
2.表单重复提交
(1)点击了浏览器的后退按钮,再点击提交
(2)在相应页面未完成响应时,重复点击提交按钮
(3)在表单请求servlet,而servlet又通过转发的方式相应到一个servlet处理,当我刷新时,地址栏还是原来请求的那个地址栏,这样就出现了重复提交。重定向不会出现重复提交
设置令牌
< body>
<%
String uuid=UUID.randomUUID().toString().replace("-","");
request.getSession().setAttribute(“token”, uuid);
%>
< form action=“work” method=“post”>
< input type=“hidden” value="<%=uuid%>" name=“token”>
用户名:< input type=“text” name=“user” id=“username”>< br/>
密码:< input type=“text” name=“pwd” id=“pwd”>< br/>
< input type=“submit” value=“提交”>
< /form>
< /body>
浏览器需要对其发出的每个请求消息都进行标识
这个标识号就称之为会话ID(SessionID)
获取session
HttpSession session=request.getSession();