1. 程式人生 > 實用技巧 >springMVC學習(三)controller

springMVC學習(三)controller

  • Controller方法的返回值有5種:

    • void

    • String

    • ModelAndView

    • redirect重定向

    • forward轉發

使用註解開發

使用@Controller註解,就表明這是一個SpringMVC的控制器,使用了註解以後就不用顯示地繼承或實現任何類了

  • 在spring配置檔案中掃描使用了註解的包

  • 使用@Controller,@RequestMapping開發

@Controller
public class HelloAction{
/*
* @RequestMapping 表示只要是/hello.action的請求,就交由該方法處理。.action可以去掉
* @param Model 它和ModelAndView類似,Model就是把資料封裝到request物件中,我們就可以獲取出來
* @return 返回跳轉的頁面【真實路徑,就不用配置檢視解析器了】
* @throws Exception
*/
@RequestMapping(value = "/hello.action")
public String hello(Model model) throws Exception {
System.out.println("hello:13213");
model.addAttribute("message","你好");
return "/jsp/hello.jsp";
}
}

基於註解和基於XML來開發SpringMVC,都是通過對映器、介面卡和檢視解析器的。 只是對映器、介面卡略有不同。但是都是可以省略的

<!-- 基於註解的對映器(可選) -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

<!-- 基於註解的介面卡(可選) -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

<!-- 檢視解析器(可選) -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>

上面兩個配置也可以使用 註解驅動<mvc:annotation-driven> 替代註解處理器和介面卡的配置

  • RequestMapping功能

    • 控制請求路徑,使一個控制器可以寫多個業務方法

      @RequestMapping(value="/hello.action")
    public String hello(Model model) throws Exception{
    return "/index.jsp";
    }
    @RequestMapping(value = "/bye.action")
    public String bye(Model model) throws Exception {
    return "/index.jsp";
    }
    • 分模組開發,@RequestMapping註解寫到類上面去,就代表了分模組

    @Controller
    @RequestMapping("/hjy")
    public class HelloAction{
    @RequestMapping(value = "/hello.action")
    public String hello(Model model) throws Exception {
    return "/jsp/hello.jsp";
    }
    }

    訪問地址 http://localhost:8080/hjy/hello.action

    • 限制請求方法,使用method屬性(也可以使用@GetMapping、@PostMapping直接限制請求方法)

      @RequestMapping(value = "/hello.action",method = RequestMethod.POST)
    public String hello(Model model) throws Exception {
    return "/jsp/hello.jsp";
    }

    該業務方法只能通過post請求訪問

引數接收

  • 接收普通引數,直接在方法上寫上與web端帶過來名稱相同的引數就行了

  @RequestMapping(value = "/hello.action")
public String hello(Model model,String username,int id) throws Exception {
System.out.println(id+"="+username);
return "/jsp/hello.jsp";
}
  • 接收JavaBean

    • 建立Javabean,javaBean屬性與表單帶過來的名稱相同

    • 在業務方法上傳入引數Javabean

  • 接收陣列,對應前端傳入單選框或多選框,直接在業務方法上傳入陣列,要求和前端的引數名稱一樣

  • 接收List<JavaBean>,使用一個JavaBean把集合封裝起來,給出對應的set和get方法。那麼我們在接收引數的時候,其實接收的是JavaBean,這個JavaBean是一個List【與接收普通的JavaBean類似的】

  • 接收多個不同的JavaBean,抽象出一個Bean包含這些JavaBean

字串轉日期

前端傳入一個日期(1996-05-24),springmvc預設無法將日期字串轉化為Date,需要用到@InitBinder註解設定日期字串的格式,就可以將前端傳入的日期字串轉化為Date

//在Controller中使用此註解設定日期字串格式
@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));

}

結果重定向和轉發

實現重定向或轉發,只需要請求對應的請求路徑就行了: redirect:請求路徑

  @RequestMapping(value = "/bye.action")
public String bye(Model model) throws Exception {
return "/jsp/bye.jsp";
}

@RequestMapping(value = "/date.action")
public String dateTest(Model model, Date date) throws Exception {
SimpleDateFormat sfd=new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sfd.format(date));
return "redirect:/bye.action";
}