Spring-基於標註的MVC

1.基於標註的Spring MVC 注意:與之前不變的步驟就不詳細寫

1.1 建立一個項目 導入jar包(ioc aop mvc)  導入配置文件   在WEB-INF下建立一個hello.jsp
1.2 在web.xml 中配置 DispatcherServlet
1.3 在spring 配置文件中開啓組件掃描 和 標註形式的mvc
    <context:component-scan  base-package="" />
    <mvc:annotation-driven />  自動配置了HandlerMapping 

<!-- 開啓組件掃描 -->
<context:component-scan base-package="com.xdl"></context:component-scan>
<!-- 開啓標註形式的MVC -->
<mvc:annotation-driven />

1.4 寫一個普通類  不用實現Controller 接口 
      控制器方法返回值 可以是String  可以是ModelAndView
      方法名 可以任意   方法的參數任意 
      使用@Controller 標註  把普通類 升級爲控制器   會在容器中創建控制器對象 
     使用@RequestMapping("/路徑")  寫在控制器方法上 可以建立請求和控制器方法調用聯繫  

@Controller
public class XdlHelloController {
	@RequestMapping("/hello.do")
	public String toHello(){
		//hello代表視圖的名字
		return "hello";	
	}
}

1.5 配置ViewResolver

2.Spring MVC 控制器中如何獲取頁面參數數據

2.1 原來的方式依然可用 
      request.getParameter("name");    需要啥直接定義啥!!

@RequestMapping("/login.do")
	public String login(HttpServletRequest request) {
		String acc_no = request.getParameter("acc_no");
		String acc_password = request.getParameter("acc_password");
		if ("abc".equals(acc_no)&&"123".equals(acc_password)) {
			return "main";
		}else{
			return "login";
		}
	}


  2.2 在控制器方法上直接定義 頁面上要定義的參數  要求頁面參數名 和 方法名一致即可
      當頁面參數 和 控制器參數不一致時  使用 @RequestParam("頁面參數名") 加在
      控制器參數名上

//定義的名字和參數名字相同時    
@RequestMapping("/login2.do")
	public String login2(String acc_no,String acc_password){
		System.out.println("acc_no:"+acc_no+"acc_password:"+acc_password);
		if ("abc".equals(acc_no)&&"123".equals(acc_password)) {
			return "main";
		} else {
			return "login";
		}
	}
//定義的名字和參數名字不同時需要使用@RequestParam("頁面中參數名字")
	@RequestMapping("/login3.do")
	public String login3(@RequestParam("acc_no")String accNo,@RequestParam("acc_password")String passWord){
		System.out.println("acc_no:"+accNo+"acc_password:"+passWord);
		if ("abc".equals(accNo)&&"123".equals(passWord)) {
			return "main";
		} else {
			return "login";
		}
	}


  2.3 直接定義對象類型的參數  要求頁面參數名 和 對象類型總的set方法對應

@RequestMapping("/login4.do")
	public String login4(XdlBankAccount xdlBankAccount) {
		System.out.println(xdlBankAccount);
		return "main";
	}

3.Spring MVC 控制器如何把數據傳遞給頁面 

   3.1 使用之前的思路  叫域對象進行數據的傳輸
      需要request  或者 session 就直接定義 或者通過request獲取session 注意頁面不關session不滅

@RequestMapping("/login5.do")
	public String login5(String acc_no,HttpServletRequest request,HttpSession session) {
		System.out.println(acc_no);
		request.setAttribute("acc_no", acc_no);
		//request.getSession().setAttribute("acc_no", acc_no);
		session.setAttribute("acc_no", acc_no);
		return "main";
	}

   3.2 使用ModelAndView 傳遞      有  addAttribute

@RequestMapping("/login6.do")
	public ModelAndView login6(String acc_no,ModelAndView mav) {
		//設置視圖信息
		mav.setViewName("main");
		//設置數據信息
		//mav.getModel().put("acc_no", acc_no);
		mav.getModelMap().addAttribute("acc_no",acc_no);
		return mav;
	}


         使用Model 傳遞數據  裏面沒有put方法   有addAttribute

@RequestMapping("/login7.do")
	public String login7(String acc_no,Model mav) {
		//設置數據信息
		mav.addAttribute("acc_no",acc_no);
		return "main";
	}


         使用ModelMap 進行數據傳遞 裏面有put方法  有addAttribute 

	@RequestMapping("/login8.do")
	public String login8(String acc_no,ModelMap mav) {
		//mav.addAttribute("acc_no",acc_no);
		mav.put("acc_no",acc_no);
		return "main";
	}

   3.5 複雜的對象類型的控制器參數 會自動創建對象 放入request作用域 
      對象的名字默認是類名首字母小寫  可以通過 ModelAttribute 來改變對象的名字 

@RequestMapping("/login9.do")
	public String login9(@ModelAttribute("account")XdlBankAccount account) {
		return "main";
	}
<!-- 頁面獲取傳遞來的信息-->
<h1>歡迎  ${acc_no}</h1>
<h1>歡迎 session中的  ${sessionScope.acc_no }</h1>
<h1>歡迎 request中的${account.acc_no }</h1>

4.Spring控制器中如何實現重定向?

     4.1 當控制器方法返回String時

           return "main";     默認的轉發直接訪問main.jsp。沒有前綴直接交給viewResolver處理!

           return "redirect:toMain.do";  代表重定向到toMain.do然後toMain.do返回一個值交給viewResolver處理!

           return "forward:toMain.do";  代表轉發到toMain.do然後toMain.do返回一個值交給viewResolver處理!

        @RequestMapping("/login9.do")
	public String login9(@ModelAttribute("account")XdlBankAccount account) {
		return "forward:toMain.do";
	}
	/**專門寫一個請求訪問main.jsp*/
	@RequestMapping("/toMain.do")
	public String toMain(){
		return "main";
	}

    4.2 當控制器方法返回ModelAndView時使用RedirectView來完成重定向

                RedirectView rView = new RedirectView("toMain.do");
                mav.setView(rView);

@RequestMapping("/login10.do")
	public ModelAndView login10(@ModelAttribute("account")XdlBankAccount account,ModelAndView mav) {
		RedirectView rView = new RedirectView("toMain.do");
		mav.setView(rView);
		return mav;
	}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章