SpringMVC核心類和注解


springMVC最重要的就是前端控制器DispatchServlet了。他是整個springMVC應用的核心。需要將它配置在web.xml中。

1.DispatchServlet的配置

<!--配置前端控制器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--初始化加載配置文件 spring ioc 初始化-->
//如果沒有配置init-param,應用程序默認會到WEB-INF目錄下找servletName-servlet.xml的配置文件
//servletName指的是前端控制器的名稱即<servlet-name>springmvc</servlet-name>中指定的springmvc
        <init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<!--標記容器是否在啟動的時候就加載這個servlet。
當值為0或者大於0時,表示容器在應用啟動時就加載這個servlet;
當是一個負數時或者沒有指定時,則指示容器在該servlet被選擇時才加載。
正數的值越小,啟動該servlet的優先級越高。-->
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

2.@Controller注解
使用該注解時不需要實現Controller接口。只需要將該注解標注在類上面就表示他是一個控制器了,
然后通過spring的掃描機制找到該類就行,<context:component-scan base-package="包名">
與實現接口相比較,使用注解可以同時處理多個請求,而使用接口一次只能處理一個請求。

3.@RequestMapping注解
RequestMapping用於映射一個請求或者一個方法。可以標注在類上,也可以標注在方法上。例如:
@Controller
@RequestMapping("/jason")
public class FirstController {
@RequestMapping("/test")
public String handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Model model)
throws Exception {
model.addAttribute("msg", " hello springMVC ");

return "redirect:http://www.baidu.com";
}
}
請求路徑則變為http://localhost:8080/springmvc/jason/test

3.1 @RequestMapping注解的屬性
@RequestMapping注解的屬性有7個,都是可選屬性,默認為value,@RequestMapping(value="/jason"),
但是當只有一個屬性的時候,與@RequestMapping("/jason")是一樣的。
@RequestMapping的屬性如下表所示
屬性名 類型 描述
name String 可選屬性,用於為映射地址指定別名
value String[] 可選屬性,同時也是默認屬性。用於映射一個請求和一種方法,可以標注在類和或一個方法上
method RequestMethod[] 可選屬性,用於指定該方法用於處理那種類型的請求方式,其請求方式包括get、post、head、options、put、patch、delete和trace,例如method=RequestMethod.GET表示只支持get請求,如果需要支持多個請求方式則需要通過{}寫成數組的形式,並且多個請求之間用英文逗號分隔
params String[] 可選屬性,用於指定Reques中必須包含某些參數的值,才可以通過其標注的方法處理
headers String[] 可選屬性,用於指定Reques中必須包含某些指定的header的值,才可以通過其標注的方法處理
consumes String[] 可選屬性,用於指定處理請求的提交內容類型(Content-type),例如application/json、text/html等
produces String[] 可選屬性,用於指定返回的內容類型,返回的內容類型必須是request請求頭(Accept)中所包含的類型


4.組合注解
@GetMapping:匹配get方式的請求
@PostMapping:匹配post方式的請求
@PutMapping:匹配put方式的請求
@DeleteMapping:匹配Delete方式的請求
@PatchMapping:匹配Patch方式的請求

get和post的區別:
最直接的區別,GET請求的參數是放在URL里的,POST請求參數是放在請求body里的;
GET請求的URL傳參有長度限制,而POST請求沒有長度限制;
GET請求的參數只能是ASCII碼,所以中文需要URL編碼,而POST請求傳參沒有這個限制
詳情參見:https://www.cnblogs.com/logsharing/p/8448446.html

5.請求
處理方法的參數類型和返回類型
請求處理方法的參數類型比較多,這里主要說返回類型

請求處理的返回類型主要有:
ModelAndView,Model,Map,View,String,void,HttpEntity<?>
或者ResponseEntity<?>,Callable<?>,DeferredResult<?>

最常見的就是ModelAndView,String,void了
其中ModelAndView類型中可以添加Model數據,並指定視圖;
String類型的返回值可以跳轉視圖但是不能攜帶數據,要與Model參數一起搭配使用才行;
而void類型主要在異步請求時使用,它只返回數據,不會跳轉視圖。

String類型除此之外還可以(redirect)重定向和(forward)請求轉發。
重定向寫法為 return "redirect:queryUser";請求轉發寫法為 return "forward:editUser";

6.視圖解析器
<!--定義視圖解析器-->
<bean id="ViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
可以設置前綴和后綴,將路徑簡化。
7.@RequestBody注解
用於將請求體中的數據綁定到方法的形參中。該注解用在方法的形參上面。
也就是將json格式數據映射綁定到形參上。
8.@ResponseBody注解
用於直接返回return對象。該注解用在方法上。也就是直接返回json格式數據。

9.@PathVariable注解
用於獲取url路徑中的參數。用在方法的形參上面,也就是形參名和url路徑上的參數名對應起來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM