SpringMVC——起步

SpringMVC簡介

SpringMVC是基於MVC的web層應用框架。偏向前端而不是基於業務邏輯層。是Spring框架的拓展。簡而言之,Spring能用的他都能用,Spring有些用起來複雜的功能Spring使其變得更加方便。html

SpringMVC使用

1.導包

基於Spring的jar,springMVC只需多導入一個spring-webmvc-4.0.0.RELEASE.jar。總共須要導入的jar包有
commons-logging-1.1.3.jar
spring-aop-4.0.0.RELEASE.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
spring-web-4.0.0.RELEASE.jar前端

2.寫配置

<servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <!--指定SpringMvc配置文件位置-->
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
            <!--   /:會攔截全部請求,可是不會攔截jsp頁面,/*會把Jsp頁面一塊兒攔截了-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

3.SpringMvc配置文件

<!-- 配置映射解析器,自動匹配前綴和後綴 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--定義一個DefaultServletHttpRequestHandler-->
    <!--該Handler對進入DispatcherServlet的URL進行篩查-->
    <!--靜態資源交給Tomcat的默認Servlet處理-->
    <!--若是不是靜態資源才由dispatcherServlet處理-->
    <!--注意只配置該語句不配置下面那條語句會致使只能訪問靜態資源,請求沒法找到Adapter,處理訪問請求的AnnoationMethodHandlerAdapter不可以使用-->
    <mvc:default-servlet-handler/>
    <!--加載SpringMvc默認配置,要和上面的語句一塊兒使用由於它會自動註冊RequestMappingHandlerMapping與RequestMappingHandlerAdapter-->
    <mvc:annotation-driven></mvc:annotation-driven>

4.經典HelloWorld

@Controller
public class TestMvc{
     //@RequestMapping告訴SpringMVC下面的方法處理什麼請求,/表明當前項目,method指定提交方法
    @RequestMapping("/hello",method=RequestMethod.POST)
    public String testMvc(){
        System.out.println("正在處理請求");
        return "success";//映射解析器,自動添加先後綴,因此此處應該是訪問/WEB-INF/Pages/success.jsp
    }

註解的使用

1.@RequestMapping的URL地址能夠進行模糊匹配web

?:能替代任意一個字符
*:能替代任意多個字符,和一層路徑
**:能替代多層路徑
@RequestMapping(value="/Test?")
public String Test(){
        System._out_.println("模糊匹配?成功");
return "success";
    }
    @RequestMapping(value="wuhu/*/Test")
public String Test01(){
        System._out_.println("模糊匹配*成功");
return "success";
    }

2.RequestMapping能夠強制要求只有攜帶指定參數才處理spring

@RequestMapping(value="Test03",param={"name","gender"})

3.RequestMapping能夠強制要求只有指定請求頭才處理express

@RequestMapping(value="Test04",headers={"Accept-Language=zh;q=0.8"})

4.@PathVariable能夠獲取URL綁定的佔位符瀏覽器

@RequestMapping(value="getName/{name}")
public Sting getName(@PathVariable("name") String name)
{
}

5.@RequestParam能夠獲取請求參數。
@RequestParam=request.getParameter("xxx")cookie

@RequestMapping(value="/test5")
public String Test05(
@RequestParam(value = "name", defaultValue = "小王",required = false) String name)
//defaultValue設置默認值
//required設置是否必須須要攜帶

6.@RequestHeader:能夠獲取任意請求頭
@RequestHeader=request.getHeader("xxx")session

@RequestMapping(value="/test6")
public String Test06(
@RequestParam(value = "name", defaultValue = "小王",required = false) String name,@RequestHeader(value="User-Agent",required=true) String user-agent)
//獲取用戶的瀏覽器信息

7.@CookieValue獲取Cookie的值
@CookieValue=Cookie[] cookies=request.getCookies()mvc

@RequestMapping(value="/test7")
public String Test07(
@RequestParam(value = "name", defaultValue = "小王",required = false) String name,@RequestHeader(value="User-Agent",required=true) String user-agent,@CookieValue(value="JSESSIONID",required=false)String cookid)
//注意JESSIONID是咱們取出不一樣會話的關鍵,session其實都存在一個Map中,每個會話都會有一個特殊的JESSIONID意味着着每個session都有一個key也就是JESSIONID。經過JESSIONID咱們訪問Session裏的值。

8.SpringMvc中可使用原生Servlet的API如app

@RequestMapping("/orginalApi")
public String name(
HttpSession session,HttpServletRequest request,HttpServletResponse response)
{

}

9.POJO類也就是實體類,無需任何操做,SpringMVC會一一匹配,自動封裝。

@RequestMapping("/TestPojo")
public String AddStudent(Student student)
{
  System.out.println(student);
  return "success"
}

處理亂碼問題

無論是請求、響應中的get或者post亂碼均可以經過如下方法解決。
1.Tomcat安裝好就給server.xml的8080端口配製出加上"URIEncoding="UTF-8";解決全部的GET亂碼問題;
2.在web.xml下寫一個Filter:攔截全部請求,進行編碼處理

<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>    
            <param-value>true</param-value>
        </init-param>    
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.不肯意寫Filter就在每一次request.getParameter添加request.setCharaterEncoding("utf-8"),在往瀏覽器寫東西以前加上response.setContentType("text/html;charset=utf-8")。

SpringMvc執行順序

客戶端請求提交到DispatcherServlet->遍歷HandlerMapping->根據HandlerMapping找到對應的Handler->遍歷Adapter適配器找到能處理請求對應的適配器->將請求提交到Hanlder中的Adapter->處理完成返回ModelAndView->經過ViewResolver找到ModelAndView指定視圖->調用render方法渲染頁面。

相關文章
相關標籤/搜索