天天看點

@data注解的作用_SpringMVC 注解式開發

SpringMVC注解式開發

1.搭建環境

1.1 後端控制器無需實作接口,添加相應注解

1.2 springmvc配置檔案無需注冊controller

1.3 springmvc配置檔案中添加元件掃描器、注解驅動

<mvc:annotation-driven /> 會自動注冊DefaultAnnotationHandlerMapping與 AnnotationMethodHandlerAdapter 兩個bean,并提供了:資料綁定支援, @NumberFormatannotation支援,@DateTimeFormat支援,@Valid支援,讀寫XML的支 持(JAXB),讀寫JSON的支援(Jackson)等等。

<!-- 注冊元件掃描器 -->
    <context:component-scan base-package="com.bjsxt.handlers"></context:component-scan>
    <!-- 注冊注解驅動 -->
    <mvc:annotation-driven/> 
    <!-- 注冊視圖解析器 -->
    <bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/jsp/" />
		<property name="suffix" value=".jsp" />
    </bean>
    <!-- 靜态資源無法通路第二種解決方案 -->
    <!-- <mvc:default-servlet-handler/> -->
    <!-- 靜态資源無法通路第三種解決方案 -->
    <mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
</beans>
           

2.涉及常用注解

@Controller、@RequestMapping(類體上【命名空間】、方法上)、@Scope

@Controller //該注解表将目前類交給spring容器管理

@Scope("prototype")

@RequestMapping("/springmvc") //該注解起到限定範圍的作用

3.視圖解析器(字首、字尾)

<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
           

4.處理器方法常用的參數(五類)

4.1 HttpServletRequest

4.2 HttpServletResponse

4.3 HttpSession

4.4 用于承載資料的Model、Map、ModelMap【代碼示例】

//後端控制器
@Controller //該注解表将目前類交給spring容器管理
@Scope("prototype")
@RequestMapping("/springmvc")  //該注解起到限定範圍的作用
public class MyController{
	//接收json字元串并封裝成對象
	@RequestMapping("/hello")
	public String  hello1(String username,int age,Model model,Map<String, Object> map,ModelMap modelMap){
		System.out.println(username + " ----------"+age);
		model.addAttribute("username", username);
		map.put("age", age);
		modelMap.addAttribute("gender", "female");
		return "welcome";
	}
           

4.5 請求中所攜帶的請求參數

5.接收請求參數

1. 參數接收之逐個接收

(1) 在後端控制器中如何接收前台參數

建立ModelAndView。對象.addObject進行擷取方法中的參數。

@RequestMapping("/hello")          //@RequestParam解決當參數名和屬性名不一緻
	public ModelAndView hello(@RequestParam("username") String name,int age){
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("username", name);
		modelAndView.addObject("age", age);
		modelAndView.setViewName("welcome");
		return modelAndView;
	}
           

(2)SpringMVC中會自動進行類型轉換。

2. 參數接收之對象整體接收

(1) 以對象形式整體接收參數:封裝資料對象,提供get和set将對象為參數進行接收

(2) 以對象形式整體接收參數:接收的參數的名稱必須和對象内的參數名稱一緻。

(@RequestParam解決當參數名和屬性名不一緻)
           

3. 參數接收之數組或集合接收參數

(1) 用數組或集合接收參數:後端控制器内的方法參數為數組形式或集合形式,然後通過循環周遊擷取資料。

//數組接收參數
 /*
 @RequestMapping("/hello")
 public void hello(String[] interest){
 for (String string : interest) {
 System.out.println(string);
 }
 }
 */
 //集合接收參數
 @RequestMapping("/hello")
 public void hello1(@RequestParam List<String> interest){
 for (String string : interest) {
 System.out.println(string);
 }
           

(2) 數組和集合接收參數的差別:集合參數内加上@RequestParam進行效正。

4. 參數接收之域屬性參數接收及restful風格傳參

(1) 域屬性參數的接收需要

//域屬性,也稱為對象屬性
  private Parter parter;
           

首先擷取域屬性,然後獲得域屬性中的值

(2) restful風格傳參:參數作為路徑變量的一部分,通過路徑傳遞過來。

5. 參數接收之接收json

(1) 後端控制器中接收前台傳過來的Json字元串:

回調函數擷取Json字元串 .

導入jackson包

@data注解的作用_SpringMVC 注解式開發
//後端控制器
@Controller //該注解表将目前類交給spring容器管理
@Scope("prototype")
@RequestMapping("/springmvc")  //該注解起到限定範圍的作用
public class MyController{
	//接收json字元串并封裝成對象
	@RequestMapping("/hello") 
	public void hello1(@RequestBody Star star) {
		 System.out.println(star);
	 }
}
           
jsp中代碼
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function(){
	$("#myButton").click(function(){
		var data1={username:"zhangsan",age:23};
		$.ajax({
			url:"${pageContext.request.contextPath}/springmvc/hello",
			type: "POST",
			contentType:"application/json",
			data:JSON.stringify(data1),/*将目前的資料轉換成json字元串  */
		})
	})
})
</script>
<title>Insert title here</title>
</head>
<body>
	<button id="myButton">點選</button>
</body>
           

(2)将頁面中的Json對象轉換成Json字元串:Eval

6. 擷取請求頭中資訊@RequestHeader

(1) 請求頭中有哪些常用資訊:Host、cookie、session

(注解@RequestHeader)

@RequestHeader該注解放到方法參數裡

7. 處理器方法傳回值類型String

處理器方法擷取Form表單的資料時使用String作為傳回值類型。

8. 處理器方法無傳回值void

(1) 如果處理器方法無傳回值,進行資源跳轉及傳遞資料

//接收json字元串并封裝成對象
@RequestMapping(value="/hello",produces="text/html;charset=utf-8")
public void hello1(HttpServletResponse response) throws IOException{
String json="{"name":"weilong","flavor":"hot"}";
response.getWriter().print(json);
 }
           

(2) 何時處理器方法無傳回值較合适?

頁面不需要進行資源跳轉的時。