Servlet会话管理
2018-10-12 本文已影响0人
Vsion8980
模拟会话
首先通过一个例子模拟一下会话,此时有一个问答网页,分为两页作答,然后提交给服务器。
在目前所学的知识中,你能采取的方法只有:
- 将第一页的数据上传到服务器,然后再将第二页的数据上传给服务器。
- 将第一页要发送到服务器的数据转发至第二页,然后和第二页数据一并上传至服务器。
1.方法要两次与服务器沟通,且服务器是无法判断第一次的数据与第二次的联系。所以只能使用方法2.
方法2.的执行:
1.第一页的数据使用submit提交至第二页
1.第二页请求获取变量,使用类型为hidden的input标签跟第二页数据存储在一块
1.一并提交给服务器
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet(name = "Servlet",urlPatterns = "/questionServlet")
public class questionServlet extends HttpServlet {
protected void res(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String page = request.getParameter("page"); //使用page变量区分页数
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<form action='questionServlet' method='post'>");
//第一页
if(page==null){
out.println("一:<input type='text' name='p1q1'>");
out.println("<input type='submit' name='page' value='下一页'>");
}
//第二页
else if (page.equals("下一页")){
String p1q1 = request.getParameter("p1q1");
out.println("二:<input type='text' name='p2q1'>");
out.println("<input type='hidden' value='"+p1q1+"'name='p1q1'>");//使用hidden类型input标签保存数据
out.println("<input type='submit' name='page' value='提交'>");//一并提交
}
else if (page.equals("提交")){
out.println(request.getParameter("p1q1")+"<br>"+request.getParameter("p2q1"));
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
res(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
结果截图:
第一页界面
模拟上传服务器
思考:
即便是使用hidden,只要是前端语言,总会在浏览器中留下痕迹,例如,在源代码中查看到数据:
所以此方法存在安全隐患,但可以用于一些对隐私要求不高的场景中