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;
}