web开发中,servlet和jsp之间传值的方法?

参考答案

情况1

如果使用servlet请求转发到jsp,建议使用request域传值:

servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   ...
   req.setAttribute("name", "王五");
   req.getRequestDispatcher("/target.jsp").forward(req,resp);
}

jsp:

<html>
  <body>
  ${requestScope.name}
  </body>
</html>

情况2

如果servlet间使用重定向,可以利用session传值:

servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   ...   
   session.setAttribute("name", "王五");
   resp.sendRedirect("/app/target");
}

target servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   // 获取并移除,session域中的变量要保证其时效尽可能短
   String name = (String)session.getAttribute("name"); 
   session.removeAttribute("name");
   ...
}

以上办法的局限性是重定向到站外地址时就不能用session了,不过还可以用重定向请求参数传值:

servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   ...
   // 请求参数需要使用URL编码
   String encoded = URLEncoder.encode("王五", "utf-8");
   resp.sendRedirect("/app/target?name="+encoded);
}

target servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   // 请求参数还原(也可以在web服务器中设置)
   String name = request.getParameter("name");
   String decoded = URLDecoder.decode(name, "utf-8");
   ...
}

情况3

最后一种办法就是让参数值以cookie的方式存入客户端,适用于对安全要求不高的数据:

save cookie servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   // cookie中文参数也需要使用URL编码
   String encoded = URLEncoder.encode("王五", "utf-8");
   Cookie cookie = new Cookie("name", encoded);
   // 增强cookie的安全性,禁用js访问cookie
   cookie.setHttpOnly(true);
   resp.addCookie(cookie);
   ...
}

use cookie servlet:

public void service(HttpServletRequest req, HttpServletResponse resp) {
   Cookie[] cs = req.getCookies();
   for(Cookie cookie: cs) {
     if(cookie.getName().equals("name") {
       String decoded = URLDecoder.decode(cookie.getValue(), "utf-8");
       ...
     }
   }   
}

results matching ""

    No results matching ""