Spring MVC配置,springmvc配置

來源:互聯網
上載者:User

Spring MVC配置,springmvc配置

  今天剛學習了Spring MVC,這裡把Spring MVC配置流程記錄下來,方便以後查閱,本人菜鳥一枚,學藝不精,如果內容有錯誤或表述不當,歡迎各位大神指正

一、搭建環境
   1、匯入jar包:Spring常用jar包以及spring-web-3.2.7.RELEASE、spring-webmvc-3.2.7.RELEASE
   2、修改web.xml檔案,引入映射
     Spring MVC 是基於DispatcherServlet的MVC架構,每個請求最先訪問DispatcherServlet,所以先配置DispatcherServlet

<servlet>      <servlet-name>hello</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>      <!-- 可以自訂servlet。xml設定檔的位置和路徑,預設為在WEB-INF目錄下,名稱為hello-servlet.xml -->      <load-on-startup>1</load-on-startup>      <!-- 優先順序           當值為0或者大於0時,表示容器在應用啟動時就載入並初始化這個servlet        當值小於0或者沒有指定時,則表示容器在該servlet被選擇時才會去載入        正數的值越小,該servlet的優先順序越高,應用啟動時就越先載入        當值相同時,容器就會自己選擇順序來載入      -->  </servlet>  <servlet-mapping>      <servlet-name>hello</servlet-name>      <url-pattern>/</url-pattern>      <!-- 注意:不能掃描/*,會導致.jsp等檔案無法匯入        可以使用*.do或/,官方推薦使用/,但使用/,會使圖片無法顯示 -->  </servlet-mapping>

   3、在WEB-INF 目錄下建立一個與<servlet-name>同名的hello-servlet.xml檔案,

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="        http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd        http://www.springframework.org/schema/mvc        http://www.springframework.org/schema/mvc/spring-mvc.xsd">        <mvc:annotation-driven/>    <!-- 啟用annotation註解,        也可以不使用annotation,但必須註明 Controller 所在的路徑,及request請求尾碼名,一般不使用        <bean name="/hello" class="com.sram.controller.HelloController"></bean>     -->     <!-- 使用註解的類所在的包 -->    <context:component-scan base-package="com.xx.controller"/>        <!-- 完成請求和註解的映射 -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    <!-- 對轉向頁面的路徑解析, prefix:首碼;suffix:尾碼  -->    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>       <!-- /WEB-INF/jsp/xx.jsp -->    <property name="prefix" value="/WEB-INF/jsp/"/>    <property name="suffix" value=".jsp"/></bean></beans>
hello-servlet.xml檔案

    由於/會攔截靜態資源,在servlet.xml檔案中添加配置:<mvc:resources location="/resources/" mapping="/resources/**"/>

可以解決這個問題(推薦使用),可以包括圖片、css檔案、js檔案或引入其他資源,將這些資源檔存放在WebRoot目錄下的resources檔案夾下

    DispatcherServlet會利用特殊bean處理request請求和產生相應的視圖返回

    視圖傳回型別是由視圖解析器控制的,jsp中常用的視圖解析器是InternalResourceViewResolver,如上,通過首碼和尾碼拼接成jsp路徑:/WEB-INF/jsp/hello.jsp

  4、Controller

    使用@Controller標記的都是Controller類

package com.sram.controller;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.mvc.AbstractController;public class HelloController extends AbstractController{    @Override    protected ModelAndView handleRequestInternal(HttpServletRequest request,            HttpServletResponse response) throws Exception {        System.out.println("hello Spring-mvc!!!");        return new ModelAndView("hello");    }}
通過Bean關聯到Controller類
package com.sram.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.servlet.ModelAndView;@Controller@RequestMapping("/hello")public class HelloController {    //requesetMapping:請求映射,用來申明當前被指定的方法或類使用什麼URL可以進行訪問    @RequestMapping("/test")    protected ModelAndView test() throws Exception {        System.out.println("hello Spring-mvc!!!");        return new ModelAndView("hello");    }    //value表示當前的url地址,method表示當前請求的請求方式(get、post、delete...)    @RequestMapping(value="/xiake",method=RequestMethod.GET)    protected ModelAndView xiake() throws Exception {        System.out.println("無參的");        return new ModelAndView("hello");    }    @RequestMapping(value="/xiake",method=RequestMethod.POST)    protected ModelAndView xiake(HttpServletRequest request) throws Exception {        System.out.println("有參的");        return new ModelAndView("hello");    }}
通過annotation關聯到Controller類不同方法傳值(Model2View)

 

package com.sram.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping("/test")public class TestController {    @RequestMapping//無參:預設執行該方法    public String test1(){        System.out.println("無參預設執行");        return "test";    }    @RequestMapping("/test2")    public String test2(){        return "test";    }    //value屬性可以跟一個String類型的數組,數組中所有的字串(URL)都可以被映射到當前方法    @RequestMapping(value={"/test3_1", "test3_2"})    public String test3(){        System.out.println("url數組");        return "test";    }    //下面的用法可以匹配正常URL之後跟一個/,/之後也可以在增加其他任一字元    //*表示/後的任一字元,但只能到下一級    @RequestMapping("/teset4/*")    public String teset4(){        System.out.println("xx/*--下一級路徑任意值");        return "test";    }    //任意以/test5開頭的請求都可以被匹配    //**表示test5之後的任一字元    //*表示出現0次或多次    @RequestMapping("/test5/**")    public String addUser4(){        System.out.println("/xx/**--以/xx開頭的任意請求");        return "test";    }    //?表示URL之後長度為1,可以用來控制長度         /?:/之後一位字元     /??:/之後兩位字元    @RequestMapping("/test6/?")    public String test6(){        System.out.println("?控制長度");        return "test";    }}
url2Controller
package com.sram.controller;import java.util.ArrayList;import java.util.Arrays;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import com.sram.beans.User;@Controller@RequestMapping("/test")public class TestController {    @RequestMapping("/test0")    public String test0(String str){        System.out.println(str);        return "test";    }    //此處參數的名字必須與頁面中的name屬性值相同    @RequestMapping("/test1")    public String test1(int id, String userName,String password, String nickName){        User u = new User(id, userName, password, nickName);        System.out.println(u);        return "test";    }    //參數可以直接寫頁面傳值對應的對象,spring mvc 會自動將頁面的參數傳入到指定的對象中,    //若有級聯對象,則需要以級聯對象,屬性這樣的形式來進行傳值(group.id)    @RequestMapping("/test2")    public String test2(User u){        System.out.println(u);        return "test";    }    //從頁面傳遞的數組,在spring mvc 中只能以數組的形式進行傳值,不能用集合    @RequestMapping("/test3")    public String test3(String[] intr){        System.out.println(Arrays.toString(intr));        return "test";    }    /*@RequestMapping(value="/test3")    public String test3(ArrayList<String> intr){        System.out.println(intr);        return "test";    }*/    @RequestMapping("/test4")    public String test4(@RequestParam(required=false, value="abc", defaultValue="hello") String str){        System.out.println(str);        return "test";    }        @RequestMapping("/test5/{userId}/{userName}")    public String test5(@PathVariable(value="userId") int id,@PathVariable(value="userName") String userName){        System.out.println(id + "---" + userName);        return "test";    }}
view2Model

  @RequestParam註解表示當前參數是由請求發送來的
     required表示當前參數是否為必須的,若設為true,請求中若未包含相應參數,則會報400,設為false則無參的請求也可以訪問當前方法
     defaultValue表示當前若沒有傳參,則使用的預設參數。defaultValue添加之後,請求中沒有傳遞參數並且required設為true也可以進行訪問
     value表示傳參時,若請求中的參數名與方法中的參數名不匹配時,可以使用value制定請求中的參數名稱。
     例如  test?abc=hello  方法中的參數為str,則可以使用value=abc用來將abc中的值傳遞給str

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.