您的位置:首页 > 产品设计 > UI/UE

javaWeb_14-request实现请求转发和mvc设计模式

2013-02-16 10:34 585 查看
14-request实现请求转发和mvc设计模式

14-request实现请求转发和mvc设计模式各自显示各自的request

forward方法用于将请求转发到RequestDispatcher对象封装的资源。

请求转发,以及使用request域对象把数据带给转发资源

请求转发的特点:
1,客户端只发送一次请求,而服务器段有多个资源调用
2,客户端浏览器地址栏没有变化

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
				//mvc (model javabean      v  view   jsp     c cotroller  servlet)
				String data = "rsl";
				request.setAttribute("data",data);
				//request也可实现转发
				request.getRequestDispatcher("message.jsp").forward(request, response);
			
			}

jsp

${data }
			<%String message = (String)application.getAttribute("data"); 
			out.write(message);
		%>


如果在调用forward方法之前,在Servlet程序中写入的部分内容已经被真正地传送到了客户端,forward方法将抛出IllegalStateException异常。

异常:java.lang.IllegalStateException: Cannot forward after response has been committed

注意:以下原因会出现该异常

String data = "rsl";
		PrintWriter writer = response.getWriter();
		writer.write(data);
		writer.close();
		request.getRequestDispatcher("/index.jsp").forward(request, response);


String data = "rsl";
		if(true){
			request.getRequestDispatcher("/index.jsp").forward(request, response);
			//return ;解决只要加个return就可以
		}
		request.getRequestDispatcher("/index.jsp").forward(request, response);


如果在调用forward方法之前向Servlet引擎的缓冲区中写入了内容,只要写入到缓冲区中的内容还没有被真正输出到客户端,forward方法就可以被正常执行,原来写入到输出缓冲区中的内容将被清空,但是,已写入到HttpServletResponse对象中的响应头字段信息保持有效。

forward的细节:forward时,会清空reponse中的数据;
String data = "rsl";
		PrintWriter writer = response.getWriter();
		writer.write(data);
		request.getRequestDispatcher("/index.jsp").forward(request, response);

结果:页index面上,没有我们设置的data信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐