今天在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中我一般用的是重定向,但是有时候不能用重定向,而且重定向这个效率比较低,今天才发现这个问题,然后就一并解决了