原来servlet还可以这样进行传值

摘要:在 Java 中Servlet传递数据的方式有很多,最常见的有以下五种方式,分别是:

文章目录

    • 1、使用静态变量的方式
    • 2、使用HttpServletResponse的sendRedirect()方法
    • 3、使用HttpServletRequest的getRequestDispatch()方法
    • 4、使用HttpServletRequest的getSession()方法
    • 5、使用HttpServletRequest的setAttribute()方法
    • 拓展:比较sendRedirect()和forward(request,response)
        • 1、sendRedirect()重定向,forward()转发;
        • 2、实际发生的位置不一样
        • 3、使用用法不一样
        • 4、能够去URL范围不一样

1、使用静态变量的方式

  通过建立一个数据类来进行传递。

示例代码:

public class MyData{
    public static String data; 
}

2、使用HttpServletResponse的sendRedirect()方法

  sendRedirect()方法是让浏览器重定向到另一个链接。其内部原理是设置状态码为303,并设置相应的Location响应头。

基本语法:

response.sendRedirect("/Web应用名/资源名?uname="+username+"&pwd="+password);
response.sendRedirect(“servlet的地址?参数名=参数值&参数名=参数值…”);

参照值是String , 参数名应当使用字母组合
在接受数据的Servlet中:String 参数=request.getParameter(“参数名”);

基本原理图:
原来servlet还可以这样进行传值_第1张图片
注意:
  使用重定向不能使用PrintWrite,ServletOutputStream这样的流。因为重定向已经将消息返回给浏览器,其数据流也就没必要使用了。

3、使用HttpServletRequest的getRequestDispatch()方法

  getRequestDispatch()方法是使Web服务器从当前Servlet转发到当前应用下的另一个Servlet。

基本语法:
request.getRequestDispatcher(资源地址).forward(request,response);

注意事项:资源地址:不需要项目名。因为它只能在WEB服务器内部转发。

基本原理图:
原来servlet还可以这样进行传值_第2张图片

注意:
1、getRequestDispatcher()请求转发可以一直转发下去,只要最终会处理并给服务器相应内容就行了。而且请求转发不会改变浏览器的URL,sendRedirect()会改变URL。
2、使用forward不能转发到该WEB应用外的URL;
3、因为forward发生在文本服务器内,所以Servlet1、Servlet2等等,只要一直转发,使用的都是相同的request和response。

4、使用HttpServletRequest的getSession()方法

  getSession()方法会获取一个会话,这个内容会在另一篇博客会话技术中详细说明。

基本语法:
1、存入session:request.getSession.setAttribute(“loginUser”,username);
2、取出session:request.getSession.getAttribute(“loginUser”);

注意:该方法可以传递对象

示例代码:

//存入:
User user= new User();
user.setName(“zhangsan”);
user.setPassWord(123);
request.getSession.setAttribute("userObj",userObj); 

//取出:
User user=(User)request.getSession.getAttribute(“userObj”);

5、使用HttpServletRequest的setAttribute()方法

  setAttribute()方法可以设置一个键值对,该键值对在该request的有效期内都可以使用。相应的还有removeAttribute()注销键值对的方法。该方法经常和getRequestDispatch()一起使用。

基本语法:
setAttribute(name, value);

注意:request的Attribute在一次请求中有效。一次请求:没有将响应消息返回给浏览器就视为一次请求。

拓展:比较sendRedirect()和forward(request,response)

1、sendRedirect()重定向,forward()转发;

2、实际发生的位置不一样

sendRedirect 发生在浏览器
forward 发生在web服务器

3、使用用法不一样

request.getRequestDispatcher(“/资源URI”).forward(request,response)
response.sendRedirect(“/web应用/资源URI”);

4、能够去URL范围不一样

sendRedirect可以去任意URL
forward 只能去当前的WEB应用的资源

你可能感兴趣的:(Java)