Servlet会话管理

2018-10-12  本文已影响0人  Vsion8980

模拟会话

首先通过一个例子模拟一下会话,此时有一个问答网页,分为两页作答,然后提交给服务器。

在目前所学的知识中,你能采取的方法只有:

  1. 将第一页的数据上传到服务器,然后再将第二页的数据上传给服务器。
  2. 将第一页要发送到服务器的数据转发至第二页,然后和第二页数据一并上传至服务器。

1.方法要两次与服务器沟通,且服务器是无法判断第一次的数据与第二次的联系。所以只能使用方法2.

方法2.的执行:

1.第一页的数据使用submit提交至第二页
1.第二页请求获取变量,使用类型为hiddeninput标签跟第二页数据存储在一块
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,只要是前端语言,总会在浏览器中留下痕迹,例如,在源代码中查看到数据:

第二页HTML源代码

所以此方法存在安全隐患,但可以用于一些对隐私要求不高的场景中

上一篇下一篇

猜你喜欢

热点阅读