SpringMVC-各種響應頁面跳轉方式與返回模型對象

Web開發表現層主要請求和響應

響應包括兩方面
1,頁面跳轉
2,數據共享
頁面跳轉兩種方式
1,請求轉發
2,重定向

web.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">

	<!-- 設置請求參數字符編碼過濾 -->
	<filter>
		<filter-name>CharacterEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>	
	
	<filter-mapping>
		<filter-name>CharacterEncodingFilter</filter-name>
		<url-pattern>\/*</url-pattern>
	</filter-mapping>


	<!-- 配置SpringMVC的前端控制器 (總控)
		之前所有請求,都訪問Servlet
		現在:所有請求都要經過SpringMVC
	
	-->
	
	<servlet>
		<servlet-name>MVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		
		<!-- 初始化參數讀取springmvc.xml配置文件 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc.xml</param-value>
		</init-param>
		
		<!-- 容器初始化啓動時機,tomacat服務器啓動就啓動 -->
		<load-on-startup>1</load-on-startup>
		
	</servlet>
	
	<servlet-mapping>
		<servlet-name>MVC</servlet-name>
		<!-- 
			使用 通配符*+後綴
			如 : *.do(推薦)*.action *.mvc
		 -->
		
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

</web-app>

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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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.xsd">
	
	
	<!-- 配置Spring註解配置包掃描  -->
	<context:component-scan base-package="com.ywq.springmvc"/>
	
	<!-- 配置SpringMVC的註解驅動 -->
	<mvc:annotation-driven/>
	
	<!-- 處理靜態資源,將靜態資源處理交給Tomcat -->
	<mvc:default-servlet-handler/>
	
	<!-- 配置視圖解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"/>
		<property name="suffix" value=".jsp"/>
	</bean>
	
</beans>

1.返回void類型和共享數據 : 需要共享數據,頁面跳轉

//返回void類型和共享數據 : 需要共享數據,頁面跳轉
	//必須注入請求響應對象(共享數據,頁面跳轉)
	@RequestMapping("/method1")
	public void method1(HttpServletRequest req,HttpServletResponse resp) throws ServletException, IOException {
		//共享數據
		req.setAttribute("username", "小龍女");
		//跳轉到jsp頁面要顯示數據,就必須使用請求轉發
		req.getRequestDispatcher("/WEB-INF/response/response.jsp").forward(req, resp);
	}
2.返回ModelAndView類型和共享數據
/*
 * 	返回ModelAndView類型和共享數據
 *  ModelAndView 模型和視圖
 *  Spring提供此對象可以集中管理共享數據操作和設置跳轉視圖操作
 *  ModelAndView 只能使用請求轉發
 */
@RequestMapping("/method2")
public ModelAndView method2() {
	ModelAndView mv = new ModelAndView();
	//共享數據,等價於 request對象共享數據的級別
	//mv.addObject(attributeName, attributeValue)
	mv.addObject("username", "楊過");
	//頁面跳轉,等價於request對象的請求轉發
	//mv.setViewName(viewName);
	mv.setViewName("/WEB-INF/response/response.jsp");
	return mv;
}
3.通過Model方式-設置共享數據
/*
 * Model方式 :  直接將需要共享的數據封裝到Model對象中即可
 * 	方法返回String字符傳直接,返回需要跳轉的地址即可
 * 	 默認使用請求轉發
 */
@RequestMapping("/method3")
public String method3(Model m) {
	//m.addAttribute(attributeName, attributeValue)
	m.addAttribute("username", "劍神123");
	//沒有配置視圖解析器之前的寫法
	//return "/WEB-INF/response/response.jsp";
	//配置視圖解析器之後的寫法
	return "model"; //返回邏輯視圖名稱
}
4.自定義請求轉發和重定向跳轉的頁面

// 自定義請求轉發頁面跳轉的地址 : forward: 跳轉的地址
@RequestMapping("/method4")
public String method4(Model m) {
	// m.addAttribute(attributeName, attributeValue)
	m.addAttribute("username", "東方姑娘");
	return "forward:/WEB-INF/views/index.jsp";
}
// 自定義重定向頁面跳轉的地址 redirect: 跳轉的地址
@RequestMapping("/method5")
public String method5() {
	return "redirect:http://www.jd.com";
}
5.返回對象類型和共享數據

方法不返回ModelAndView也不返回String類型對應的邏輯視圖名稱直接返回一個Pojo對象
如果直接返回Pojo對象,項目又配置了視圖解析器規則

如果方法中沒有返回ModelAndView對象,此時SpringMVC不知道視圖在哪裏.
此時需要配置視圖解析器org.springframework.web.servlet.view.InternalResourceViewResolver.
物理視圖路徑爲:前綴+請求路徑(上下文路徑+資源名稱)+後綴
必須保證視圖解析器路徑下面必須有 請求路徑對應的頁面
在這裏插入圖片描述
@ModelAttribute作用如下:
1、設置請求參數綁定到Model對象中並傳到視圖頁面的key名.
2、將方法返回值或請求參數綁定到Model對象中並傳到視圖頁面

@ModelAttribute("userKey")//跳轉頁面使用el表達式獲取的對應的屬性名稱
	@RequestMapping("/method6")
	public User method6() {
		User user = new User();
		user.setUsername("東方姑娘");
		user.setPassword("dfgn");
		user.setEmail("[email protected]");
		user.setPhone("234234234324");
		return user;
	}
6.轉換JSON數據

在web開發中,前臺頁面經常會發送ajax請求從後臺請求數據,ajax請求給前臺的數據一般都是json 數據。
SpringMVC支持自動將對象轉換JSON格式的數據響應給客戶端(瀏覽器)
SpringMVC默認使用的是 jackson 作爲對象轉json的工具
Fast-json Alibaba
Gson google
Json-lib Apache

@ResponseBody 會將當前方法直接返回字符串 ,不再進行頁面跳轉

@Controller
public class JsonController {
	@RequestMapping("/getUserJson")
	@ResponseBody //把響應的內容設爲普通字符串
	public User getUserJson() {
		User user = new User();
		user.setUsername("東方姑娘");
		user.setPassword("dfgn");
		user.setEmail("[email protected]");
		user.setPhone("234234234324");
		return user;
	}
	
	@RequestMapping("/getUserJsonList")
	@ResponseBody
	public List<User> getUserJsonList() {
		User user = new User();
		user.setUsername("東方姑娘");
		user.setPassword("dfgn");
		user.setEmail("[email protected]");
		user.setPhone("234234234324");
		
		List<User> list = new ArrayList<>();
		list.add(user);
		list.add(user);
		list.add(user);
		list.add(user);
		return list;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章