有關Spring MVC知識點的總結

Spring MVC


五大組件

DispatcherService (前端控制器)

接受請求,請求配置在HandlerMapping中.基於HandlerMapping的配置,調用相應的模型來處理.

HandlerMapping

包含了請求路徑與模型的對應關係.告訴DispatcherService請求路徑與模型之間的關係.

Controller (處理器)

負責處理業務邏輯.model

ModelAndView

封裝了處理結果,需要將Controller封裝爲ModelAndView.

model表示處理結果,view表示視圖.處理結果除了數據之外,還可能有視圖名.

ViewResolver (視圖解析器)

視圖解析器. freemarker velocity ... 可以解析非jsp視圖.

DispatcherServlet依據ViewResolver的解析,告訴DispatcherService調用哪個試圖對象來生成相應的頁面.

五大組件之間的關係


1.DispatcherServlet根據HanderMapping的配置,調用相應的Controller來處理.

2.Controller將處理結果封裝成ModelAndView對象,然後返回給DispatcherServlet.

3.DispatcherServlet依據ViewResolver的解析,調用相應的視圖對象(比如某個jsp)來生成相應的頁面.

使用註解開發基於springmvc的web應用

步驟:

step1:導包

step2:添加spring的配置文件

step3:配置前端控制器DispatcherServlet.

step4:寫Controller(處理器) 業務邏輯的處理

@Controller

多個方法

String ModelAndView

@RequestMapping

step5:jsp

step6:添加配置:

< context:component-scan base-package=""/ > <!-- 主鍵掃描 -->

< mvc:annotation-driver /> <!-- 視圖解析器 -->


讀取請求參數值:

1.通過請求對象讀取

將request對象作爲方法的入參即可.


@RequestMapping("/toLogin.do")   //告訴前端控制器請求路徑與處理器方法的對應關係,不需要配置HandlerMapping
public String login(HttpServletRequest request) {
    String username = request.getParameter("username");
    System.out.println("username: " + username);
    String psd = request.getParameter("password");
    System.out.println("password: " + psd);
    return "login";
}

2.使用@RequestParam註解得到參數的方法值.

將註解加到方法的形參前面,明確的告訴傳過來的值和參數之間的對應關係


@RequestMapping("/login.do")
public String login(String username, @RequestParam("password") String psd) {
    System.out.println("username: " + username + " password: " + psd);
    return "index";
}

3.使用javabean封裝請求參數值.

java類的屬性和請求參數名一致


@RequestMapping("/login.do")
public String login(User user) {
    System.out.println("username: " + user.username + " password: " + user.password);
    return "index";
}

向頁面傳值的方式

1.使用request域,將值傳給頁面.

將數據綁定到request,然後轉發到某個jsp.


//向頁面傳值的第一種方式  使用request
@RequestMapping("/login1.do")
public String login1(User user, HttpServletRequest request) {
    System.out.println("login1");
    String username = user.getUsername();
    String password = user.getPassword();
    //將數據綁定到request
    request.setAttribute("username", username);
    request.setAttribute("password", password);
    //spring默認使用轉發,會自動轉發到以return值爲jsp名的頁面.
    return "index";
}

<h1>登錄成功!</h1>
<h1>${username}</h1>
<h1>${password}</h1>  <!-- EL表達式 -->

2.使用ModelAndView來給頁面傳值.

將數據先封裝到ModelAndView對象裏面,然後將該對象作爲方法的返回值.


//向頁面傳值的第二種方式  使用ModelAndView
@RequestMapping("/login2.do")
public ModelAndView login2(User user) {
    System.out.println(user.getUsername() + " " + user.getPassword());
    Map<String,Object> map = new HashMap<>();
    map.put("username", user.getUsername()); //相當於request.setAttribute("username", username);
    map.put("password", user.getPassword());
    //構造ModelAndView對象
    ModelAndView mav = new ModelAndView("index", map);
    return mav;
}

3.使用ModelMap綁定

將該對象作爲方法的參數,然後將數據綁定到該對象


//向頁面傳值的第三種方式  使用ModelMap
@RequestMapping("/login3")
public String login3(User user, ModelMap mm) {
    System.out.println("login3()");
    System.out.println(user.getUsername() + " " + user.getPassword());
    mm.addAttribute("username", user.getUsername()); //相當於request.setAttribute..
    return "index";
}

4.使用Session對象綁定

Session聲明週期長於Request.


    //向頁面傳值的第四種方式  使用Session
    @RequestMapping("/login4")
    public String login4(User user, HttpSession session) {
        System.out.println(user.getUsername() + " " + user.getPassword());
        session.setAttribute("username", user.getUsername());
        return "index";
    }

重定向

若方法返回值是String

在重定向地址前添加"redirect:"


@RequestMapping("/login.do")
public String login() {
    return "redirect:index.toIndex.do";
}

@RequestMapping("/toIndex.do")
public String toIndex() {
    return "index";
}

若方法的返回值是ModelAndView


@RequestMapping("/login.do")
public ModelAndView login() {
    RedirectView rv = new RedirectView("toIndex.do");
    return new ModelAndView(rw);
}

@RequestMapping("/toIndex.do")
public String toIndex() {
    return "index";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章