项目架构:

注意要在web.xml配置前端控制器springDispatcherServlet

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<!-- 指定控制器的扫描包 -->
	<context:component-scan
		base-package="com.etc.controller"></context:component-scan>
		
		<!-- 静态资源处理 -->
		<mvc:default-servlet-handler/>
		<mvc:annotation-driven></mvc:annotation-driven>

	<!-- 视图解析器配置 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- viewClass -->
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView"></property>
		<property name="prefix" value="/WEB-INF/jsp/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>

</beans>

创建一个ForwaredRedirectController类,具体情况看代码里的注解。

ForwaredRedirectController.java

@Controller

public class ForwaredRedirectController {
	
	@GetMapping("fwd1")
	public String fwd1() {
		//<property name="prefix" value="/WEB-INF/jsp/"></property>
		//<property name="suffix" value=".jsp"></property>
		return "fwd1";
	}
	
	@GetMapping(value = "fwd2")
	public String fwd2() {
		   //加入了forward关键字,配置视图解析器的前缀和后缀失效了,此时跳转到wed2的一个映射地址去
		return "forward:fwd2";//跳转到 wed2的映射url,其实就是跳转到自己方法上,出现StackOverflowError
	}
	
	@GetMapping("fwd3")
	public String fwd3() {
		return "forward:fwd3.jsp";//跳转到 webContent目录下的fwd3.jsp
	}
	@GetMapping("fwd4")
	public String fwd4() {
		//加入了forward关键字,配置视图解析器的前缀和后缀失效了,此时跳转到fwd1的一个映射地址去
		return "forward:fwd1.jsp";//跳转到 fwd1的映射url
	}
	
	//redirect---
	@GetMapping("fwd5")
	public String fwd5() {
		///WEB-INF/目录下的文件不能直接重定向方法
		return "redirect:/WEB-INF/jsp/hello.jsp";//重定向 /WEB-INF/JSP/目录下的hello.jsp
	}
	
	@GetMapping("fwd6")
	public String fwd6() {
		return "redirect:hello.jsp";	//重定向  WebContent/fwd3.jsp
	}
	
	@GetMapping("fwd7")
	public String fwd7() {
		return "redirect:/fwd1.jsp";	//重定向  redirect:fwd1 控制器的url: fwd1
	}

}

如果访问路径里多了一个/api/先到类在到方法,相应的访问路径也会发生变化,主要是相对路径在变。

@Controller
@RequestMapping("api")
public class ForwaredRedirectController2 {
	
	@GetMapping("fwd1")
	public String fwd1() {
		//<property name="prefix" value="/WEB-INF/jsp/"></property>
		//<property name="suffix" value=".jsp"></property>
		return "fwd1";//跳转到/WEB_INF/jsp/fwd1.jsp
	}
	
	@GetMapping(value = "fwd2")
	public String fwd2() {
		//会跳转到相对路径/api/fwd2.jsp
		return "forward:fwd2.jsp";
	}
	
	@GetMapping("fwd3")
	public String fwd3() {
		return "forward:/fwd3.jsp";//重定向到 webContent目录下的fwd3.jsp
	}
	
}

这里再提供两种向页面传送数据的方法:

@Controller
@RequestMapping("m")
public class ModelTestController {
	//---向页面传送数据的方法,方法一:传统HttpServletResponse
	@GetMapping("mtc1")
	public String mtc1(HttpServletRequest request) {
		request.setAttribute("name", "tom");
		return "mtc1";
	}
	
	//---方法二:利用Spring中的 Model-ModelMap-Map
	@GetMapping("mtc2")
	public String mtc2(Model model) {
		model.addAttribute("name", "jacon");
		model.addAttribute("name1", "mick");
		return "mtc1";
	}
		@GetMapping("mtc3")
		public String mtc3(Model model,ModelMap modelMap,Map map) {
			
			System.out.println(model==modelMap);
			System.out.println(model==map);
			
			model.addAttribute("name", "jacon");
			modelMap.addAttribute("name1", "stivenjackon");
			map.put("name2", "jj");
			
			return "mtc1";
		}
	
}

到这里就已经完成了spring+springmvc的组合和数据间的传送,静待后续更近..

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐