8 request作用域与set/getAttribute();

request作用域

request的作用域为:一次request周期,从请求到响应结束。

set/getAttribute()

如果我们需要在一个request周期内,不同的servlet之间传递一些额外信息(除原本的request对象中的信息),我们就需要使用request对象的set和getAttribute()方法来实现。

例如:在 文章7的基础上,我们想添加这样一个功能:如果登陆失败了,返回到登录页面(PageServlet)并附加“账号或密码错误”句子,要如何做呢?

第一步:我们在处理登陆的servlet中(LoginServlet),在判断为登陆失败的逻辑代码块中,加上req.setAttribute("msg","账号或密码错误");,如下:

	//请求转发
				req.setAttribute("msg", "账号或密码错误");
				req.getRequestDispatcher("page").forward(req, resp);
				return;
			}

 

第二步:在PageServlet中,我们加上这样两句句代码:

  • String msg = (String) req.getAttribute("msg")==null?"":(String) req.getAttribute("msg");
    resp.getWriter().write("<html>");

  • resp.getWriter().write("<font color='red' >"+msg+"</font><br>");

完整的PageServlet代码如:

package com.xiaohei.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.*;
public class PageServlet extends HttpServlet{
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//设置响应编码格式
		resp.setContentType("text/html;charset=utf-8");
		//获取请求信息
		//处理请求
		//响应处理结果
		String msg = (String) req.getAttribute("msg")==null?"":(String) req.getAttribute("msg");
		resp.getWriter().write("<html>");
		resp.getWriter().write("<head>");
		resp.getWriter().write("</head>");
		resp.getWriter().write("<body>");
		resp.getWriter().write("<form action='login' method='get'>");
		resp.getWriter().write("<font color='red' >"+msg+"</font><br>");
		resp.getWriter().write("用户名:<input type='text' name='uname' value=''><br>");
		resp.getWriter().write("密码:<input type='text' name='pwd' value=''><br>");
		resp.getWriter().write("<input type='submit' value='登录'><br>");
		resp.getWriter().write("</form>");
		resp.getWriter().write("</body>");
		resp.getWriter().write("</html>");
	}
}

  

posted @ 2020-02-22 17:09  Scorpicat  阅读(567)  评论(0编辑  收藏  举报