SpringMVC配置及使用

SpringMVC基本配置

  SpringMVC是基本請求響應模式的框架。html

  在項目中集成SpringMVC框架首先須要導入相關的jar包,所需包具體以下:java

  commons-dbcp.jar
  commons-fileupload-1.2.2.jar
  commons-io-2.0.1.jar
  commons-logging-1.1.1.jar
  jackson-annotations-2.2.3.jar
  jackson-core-2.2.3.jar
  jackson-databind-2.2.3.jar
  spring-aop-4.1.6.RELEASE.jar
  spring-beans-4.1.6.RELEASE.jar
  spring-context-4.1.6.RELEASE.jar
  spring-context-support-4.2.3.RELEASE.jar
  spring-core-4.1.6.RELEASE.jar
  spring-expression-4.1.6.RELEASE.jar
  spring-jdbc-4.2.3.RELEASE.jar
  spring-tx-4.1.6.RELEASE.jar
  spring-web-4.1.6.RELEASE.jar
  spring-webmvc-4.1.6.RELEASE.jarweb

  在導入相關jar包以後須要配置web.xml文件與SpringMVC相關聯,完整web.xml文件以下:ajax

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>springMVC</display-name>
  <servlet>
      <servlet-name>demo</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:mvc.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
      <servlet-name>demo</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

  在web.xml中關於springMVC的兩個標籤是<servlet></servlet>和<servlet-mapping></servlet-mapping>spring

  這兩個標籤的第一個子標籤<servlet-name>要互相對應保持一致express

  <servlet>標籤的子標籤<servlet-class>指定路由的處理類json

  <servlet-mapping>標籤的子標籤<url-pattern>指定被攔截的路由模式,上面的配置表示系統中全部以.do結尾的請求都交給org.springframework.web.servlet.DispatcherServlet來進行處理mvc

  <servlet>標籤的子標籤<init-param>表示參數的配置,<init-param>的子標籤<param-name>設置爲contextConfigLocation,<param-value>標籤表示contextConfigLocation的值,其值classpath:mvc.xml表示路徑是在src目錄下的mvc.xml,mvc.xml表示具體的關於springMVC應用的配置,若是不進行<init-param>的配置則springMVC的具體的配置文件要指定爲[name]-servlet.xml,[name]表示<servlet-name>的值app

  <load-on-value>表示項目啓動則配置生效框架

  在web.xml配置完成以後須要對springMVC.xml文件來進行配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    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">
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/html; charset=UTF-8</value>
                            <value>application/json;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
            </list>
        </property>
    </bean>    
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
         <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
         <property name="prefix" value="/WEB-INF/pages/"/>
     </bean>
    <context:component-scan base-package="com.wx.controller"/>
</beans>

   beans裏面的第一個bean表示開啓註解掃描

  beans裏面的第二個bean表示註解映射器

  beans裏面的第三個bean表示註解適配器,主要實現了返回一個json數據的功能。第二和第三的要有綁定關係,要麼全寫,要麼全不寫

  beans裏面的第四個bean表示視圖解析器,裏面的<property name=prefix value="/WEB-INF/pages"/>表示對返回的視圖添加前綴,與之對應的就是添加後綴,使用方式爲<property name="sufix" value=".jsp">,例如controller類中一個方法return "demo",則最終的結果爲/WEB-INF/pages/demo.jsp

  最後一行表示配置文件對com.wx.controller下的全部java文件起做用(掃描裏面的註解)

  至此完成了一個最簡單的springMVC的配置。

代碼實現

  在springMVC的配置文件中咱們指明瞭監控com.wx.controller包內的全部文件的註解,咱們在該包內新建一個DemoController.java文件,最終其內容以下:

package com.wx.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class DemoController {
    @RequestMapping("/demo/html.do")
    public String toHtml(){
        return "html.html";
    }
    @RequestMapping("/demo/jsp.do")
    public String toJSP(){
        return "jsp.jsp";
    }
}

  在WEB-INF下的pages文件中新建html.html和jsp.jsp文件

  運行項目在地址輸入/demo/html.do能夠跳轉到html.html頁面,輸入/demo/jsp.do能夠跳轉到jsp.jsp頁面

SpringMVC處理json數據格式的數據

  咱們在客戶端已發出以下的請求:

    $(function(){
        var data = {
            name:"zt",
            age:23
        }
        $.ajax({
            url:"http://zt:8088/springmvc-demo/demo/send.do",
            type:"post",
            data:JSON.stringify(data),
            contentType:"application/json; charset=utf-8"
        }).done(function(data){
            console.log(data);
        }).fail(function(){
            console.error("server error");
        })

   在服務端的controller類中添加對應的處理方法:

    @RequestMapping("/demo/send.do")
    @ResponseBody
    public List<Person> send(@RequestBody User user){
        System.out.println("client send age:"+user.getAge()); 
        System.out.println("client send name:"+user.getName()); 
        List<Person> list = new ArrayList<Person>();
        Person p1 = new Person("張三",23);
        Person p2 = new Person("李四",22);
        list.add(p1);
        list.add(p2);
        return list;
    }

  @ResponseBody表示返回的是數據再也不是頁面再也不須要視圖解析器的處理

  User是一個實體類用來接收從客戶端發送過來的數據,前面要用@RequestBody來進行修飾

  此時客戶端也能夠正確的接收到服務端返回的JSON數據:[{"name":"張三","age":23},{"name":"李四","age":22}]

相關文章
相關標籤/搜索