Spring-MVC框架的實現過程
阿新 • • 發佈:2018-03-21
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框架的實現過程