关于jsp中重定向的问题

今天在servlet中向request存入一个值,然后在jsp页面用request.getAttribute()去取,但是发现不管怎样都是得到的空值,但是用session就可以到,我就发现可能重定向了,最后我发现在servlet中用了response.setHeader()这个方法(以前不知道这个方法也是重定向的),然后我把这个方法换成request.getRequstDispatcher().forword()后再试发现就可以了,

然后总结了一下:

Servlet转发机制

forword转发:request.getRequestDispatcher("teacher.jsp").forword(request, response);//在本页面加载另一个页面,只是转发请求(起到中间站的作用)

include转发:request.getRequestDispatcher("teacher.jsp").include(request, response);//在本页面加载另一个页面,可以把当前servlet的数据打包给页面

以上两个方法都不会丢失request封装的对象。

重定向转发:response.sendRedirect("login.jsp"),response.Header(),response.setSatus();

可以注意到重定向都是response

加一点:

当我们用request.getRequstDispatcher().forword()这个方式时加载的界面可能会出现乱码,然后网上说吧这段代码:

response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");

 放到PrintWriter out = response.getWriter();后面,然并卵,在找了半天原因后我把这段代码加到了doGet方法中(表单中我用的doPost方法提交),然后再试就发现乱码没有了;平常在servlet中我一般用的是重定向,但是有时候不能用重定向,而且重定向这个效率比较低,今天才发现这个问题,然后就一并解决了

猜你喜欢

转载自1342912960.iteye.com/blog/2282514
今日推荐