1. 程式人生 > >Spring-MVC框架的實現過程

Spring-MVC框架的實現過程

fix CP 邏輯 頁面 per 黃色 9.png memcache start

  我們在基於Spring框架進行web開發時,通常會有dao層(數據庫操作),service層(業務邏輯操作,比如判斷是否在redis,memcached等緩存中查找數據,何時調用dao層),web層(接收前端用戶的請求,調用service層,向前端響應數據與視圖)。其中,Spring框架為service層做了較好的支持,mybatis、hibernate等框架為dao層做了較好的支持,Spring-MVC、Struts2等框架為web層做了較好的支持。通常來說,基於Spring框架開發的web項目有SSM(Spring,Spring-MVC,mybatis)體系,SSH(Spring,Spring-MVC,hibernate)體系等。我在此處通過代碼演示下Spring-MVC是如何運行的。我們先看Spring-MVC框架的運行圖:

技術分享圖片

  首先,我們要在web項目中添加Spring-MVC的jar包依賴,在此基礎上開發項目。本項目案例文件包結構如下所示:

技術分享圖片

  接下來,配置web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <!--註冊過濾器,避免中文亂碼-->
    <filter>
        <filter-name>encoding</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>
    </filter>
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--註冊前端控制器-->
    <servlet>
        <servlet-name>spring-mvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring-mvc</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

</web-app>

  再配置springmvc-config.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: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">

    <!--配置頁面控制器/處理器,采用註解方式-->
    <context:component-scan base-package="com.itszt.controller"></context:component-scan>

    <!--尋址與控制器處理的註解支持-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>

    <!--配置視圖解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

  後臺Java代碼如下:

package com.itszt.domain;

/**
 * 實體類,狗的名字,顏色
 */
public class Dog {
    private String dogname;
    private String dogcolor;

    public String getDogname() {
        return dogname;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "dogname=‘" + dogname + ‘\‘‘ +
                ", dogcolor=‘" + dogcolor + ‘\‘‘ +
                ‘}‘;
    }

    public void setDogname(String dogname) {
        this.dogname = dogname;
    }

    public String getDogcolor() {
        return dogcolor;
    }

    public void setDogcolor(String dogcolor) {
        this.dogcolor = dogcolor;
    }
}
----------------------------------------------
package com.itszt.domain;

import java.util.Arrays;

/**
 * 實體類,用戶的姓名,年齡,愛好,寵物狗
 */
public class User {
    private String username;
    private Integer userage;
    private String[] userhbs;
    private Dog dog;

    public String getUsername() {
        return username;
    }

    @Override
    public String toString() {
        return "User{" +
                "username=‘" + username + ‘\‘‘ +
                ", userage=" + userage +
                ", userhbs=" + Arrays.toString(userhbs) +
                ", dog=" + dog +
                ‘}‘;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getUserage() {
        return userage;
    }

    public void setUserage(Integer userage) {
        this.userage = userage;
    }

    public String[] getUserhbs() {
        return userhbs;
    }

    public void setUserhbs(String[] userhbs) {
        this.userhbs = userhbs;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }
}
---------------------------------------------------------
package com.itszt.controller;

import com.itszt.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * 控制器
 */
@Controller
@RequestMapping("/orgCenter")
public class OrgController {
    @RequestMapping("/add")
    public String add(User user, HttpServletRequest request, HttpSession session){
        System.out.println("OrgController.add");
        System.out.println("接收參數User="+user);
        request.setAttribute("user",user);
        StringBuffer sbf=new StringBuffer();
        for(String s:user.getUserhbs()){
            sbf.append(s+",");
        }
        String userhbs=sbf.toString();
        request.setAttribute("userhbs",userhbs.substring(0,userhbs.length()-1));
        request.setAttribute("dog",user.getDog());
        return "result";
    }
}

  前端index.jsp頁面代碼如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>演示springmvc實現過程</title>
  </head>
  <body>
  <form action="/orgCenter/add.html" method="post">
    <h3>
      用戶姓名:<input type="text" name="username" value="張三"/>
    </h3>
    <h3>
      用戶年齡:<input type="number" name="userage" value="15"/>
    </h3>
    <h3>
      用戶愛好:<input type="checkbox" name="userhbs" value="climb"/>爬山
      <input type="checkbox" name="userhbs" value="swim"/>遊泳
      <input type="checkbox" name="userhbs" value="basketball"/>籃球
      <input type="checkbox" name="userhbs" value="football"/>足球
    </h3>
    <h3>
      寵物狗:
      名字:<input type="text" name="dog.dogname" value="旺旺"/>
      毛色:<input type="text" name="dog.dogcolor" value="黃色"/>
    </h3>
    <h3>
      <input type="submit" value="提交">
    </h3>
  </form>
  </body>
</html>

  服務器端的OrgController響應頁面如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>返回結果</title>
</head>
<body>
    我是result.jsp頁面<br>
    返回結果是:<br>
    您發來的用戶姓名:${user.username}<br>
    用戶年齡:${user.userage}<br>
    用戶愛好:${userhbs}<br>
    寵物狗:<br>
    名字:${dog.dogname}<br>
    毛色:${dog.dogcolor}<br>
</body>
</html>

  希望對您有所幫助!

Spring-MVC框架的實現過程