MVC模式,转发,重定向,前后端分离模式

本文介绍了MVC模式在Java Web开发中的应用,包括控制器如何进行转发和重定向。详细阐述了两者的区别,如转发在服务器内部执行,地址栏不变,而重定向涉及浏览器重新发送请求,地址栏显示最终URL。同时,讨论了前端与后台的交互,特别是在列表页面使用Ajax获取JSON数据,并通过Servlet实现三级分类的添加功能。

MVC,转发和重定向(小记)

MVC

model 模型 完成业务/功能的类 manager
view 视图 展示数据,接收数据 jsp,html,css,js
controller 控制器 决定调用某个model,负责跳转 servlet

开发模式
	model1 jsp+javaBean  
	model2 jsp+servlet+javaBean  
		V	c	m
	javaBean:完成业务或功能的java类
	(中间件/EJB)

转发和重定向

	request. setAttribute(K,V); 
	request. getRequestDispatcher(url). forward(request, response); 
	response. sendRedirect(request. getContextPath()+url);
4个区别
  1. 转发是服务器内部执行
    重定向服务器发送url到浏览器,浏览器修改地址栏的url重新发送请求到服务器
  2. 转发地址栏不变
    重定向地址始终是最终的url
  3. 转发可以使用request保存数据setAttribute重定向不能使用request保存数据
  4. 转发url不需要项目目录开头
    重定向需要使用项目目录开头
转发
index.jsp

<a href="${pageContext.request.contextPath}/r1.jsp?fid=5&sid=10">转发:r1-->r2-->result.jsp</a>

r1.jsp
	  request.setAttribute("kkk", "来自r1的信息");
	  request.getRequestDispatcher("/r2.jsp?tid=r200").forward(request, response);
r2.jsp
	
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

	request.setAttribute("hhh", "来自r2的信息");
	request.getRequestDispatcher("/result.jsp?oid=400").forward(request, response);	
result.jsp

		<body>
	    	<h1>result</h1>
	    	1.index : ${
   
   param.fid}<br/>
	    	2.index : ${
   
   param.sid}<br/>
	    	3.r1 | d1 : ${
   
   param.tid}<br/>
	    	4.r2 | d2: ${
   
   param.oid}<br/>
	    	<hr/>
	    	5.r1 | d1 的kkk : ${
   
   kkk}<br/>
	    	6.r2 | d2 的hhh : ${
   
   hhh}
	  	</body>

003.PNG
001.PNG

重定向
index.jsp


	<a href="${pageContext.request.contextPath}/d1.jsp?fid=51&sid=11">重定向: d1-->d2-->result.jsp</a>
d1.jsp


	<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

	request.setAttribute("kkk", "来自d1的信息");
	response.sendRedirect(path + "/d2.jsp?tid=r201");
	
	%>
d2.jsp

	<%
	String path = request.getContextPath();
	String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";


	request.setAttribute("hhh", "来自d2的信息");
	response.sendRedirect(path+"/result.jsp?oid=401");
	
	%>
result.jsp

		<body>
	    	<h1>result</h1>
	    	1.index : ${
   
   param.fid}<br/>
	    	2.index : ${
   
   param.sid}<br/>
	    	3.r1 | d1 : ${
   
   param.tid}<br/>
	    	4.r2 | d2: ${
   
   param.oid}<br/>
	    	<hr/>
	    	5.r1 | d1 的kkk : ${
   
   kkk}<br/>
	    	6.r2 | d2 的hhh : ${
   
   hhh}
	  	</body>

004.PNG
002.PNG

注意
a标签,form表单提交,添加,修改,删除都是重定向
用转发的话,例:添加完用户后地址栏不变,刷新会重复添加

前端+后台(url接口)

005.PNG

jsp页面 跳转到列表页面


	<li> <a href="<%=path%>/admin/kind/kindthirdB_list.jsp">三级分类ajax前端后台</a></li>

列表页面ajax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值