通過eclipse配置Spring MVC項目


  上一篇剛建立了一個簡單的Spring項目,其實Spring MVC是一個和Struts2一樣的基於MVC設計模式的web框架,並且繼承了MVC的優點,是基於請求驅動的輕量級的web框架,spring mvc可以認為是spring其中的一個web擴展,小巧靈活,但是功能強大,可以直接傳入ServletAPI使用起來開發會比較簡單順手,並且通過配置注解的方式,很輕松的對web資源進行管理,提高了開發的速度和應用程序的可維護性

  使用spring mvc可以設計出干凈的web層和薄薄的web層;目前非常流行的就是SSM的這種整合,就是Spring + Spring MVC + MyBatis的結合,這樣更適合復雜的企業級web應用,下面開發一個簡單的Spring MVC應用

  需要的jar包和Spring一樣,直接將上篇Spring配置需要的jar包拷貝過去即可,並且以后整合的時候也不需要額外添加jar包了,更簡單

  首先是配置web.xml原理就是在web容器初始化時加載配置,讓DispatcherServlet過濾器過濾瀏覽器發出的請求,從而啟動Spring MVC進行處理,web.xml全部代碼如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="true" version="3.1">
 3     <servlet>
 4         <servlet-name>spring</servlet-name>
 5         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 6         <load-on-startup>1</load-on-startup>
 7     </servlet>
 8     <servlet-mapping>
 9         <servlet-name>spring</servlet-name>
10         <url-pattern>/</url-pattern>
11     </servlet-mapping>
12     
13     
14     
15     <!-- spring 過濾器 防止post亂碼 -->
16     <filter>
17         <filter-name>CharacterEncodingFilter</filter-name>
18         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
19         <init-param>
20             <param-name>encoding</param-name>
21             <param-value>utf-8</param-value>
22         </init-param>
23     </filter>
24     <filter-mapping>
25         <filter-name>CharacterEncodingFilter</filter-name>
26         <url-pattern>/*</url-pattern>
27     </filter-mapping>
28 </web-app>

  后面使用了一個spring內置的過濾器,為了防止post請求出現亂碼的情況,這樣可以不用request和response設置編碼了,但務必保證源代碼文件之間編碼的統一性,最好還是建議通過自定義過濾器設置編碼

  然后在web.xml同目錄下,也就是WEB-INF下建立spring-servlet.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-3.0.xsd   
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">


    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
    
    <context:component-scan base-package="net.zengzhiying.controller" />
    
    <!-- 模板存放位置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 請求URL處理 -->
    <bean name="/hello" class="net.zengzhiying.controller.HelloWorldController"/>
    
</beans>

  首先,上面兩個<bean>是必須配置的,<context:>是控制器包存放的位置,模板存放在/WEB-INF下,只能由控制器去渲染,瀏覽器是無法訪問的,最下面一個<bean>就是請求的資源路由,例如這里就是:http://localhost:8080/項目名稱/hello

  然后我們建立一個控制器,一個控制器只處理一個請求,必須實現Controller接口,位置必須是org.springframework.web.servlet.mvc.Controller,代碼如下:

 1 package net.zengzhiying.controller;
 2 
 3 
 4 
 5 import javax.servlet.http.HttpServletRequest;
 6 import javax.servlet.http.HttpServletResponse;
 7 import org.springframework.web.servlet.ModelAndView;
 8 import org.springframework.web.servlet.mvc.Controller;
 9 
10 
11 
12 public class HelloWorldController implements Controller {
13     @Override
14     public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {
15        ModelAndView mv = new ModelAndView();
16        //添加數據
17        mv.addObject("message", "Hello World!");
18        //設置視圖名,視圖解析器會根據該名字解析到具體的視圖頁面
19        mv.setViewName("hello");
20        return mv;
21     }
22 }

  我們的控制器命名必須是XxxController,首字母大寫;實現Controller接口則必須重寫handleRequest方法來實現請求,返回視圖;視圖在/WEB-INF/jsp下,文件名為:hello.jsp,視圖代碼如下:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Hello World</title>
 8 </head>
 9 <body>
10 ${message}
11 </body>
12 </html>

  這樣就可以正常完成請求了,現在啟動服務器訪問頁面如下:

  

  我們現在有個疑問,一個控制器只能寫一個方法確實太局限了,我們如果想處理多個請求怎么辦,其實我們更常用的就是在一個控制器里面寫多個方法,這樣將功能模塊分開,更加容易維護,除了配置spring-servlet.xml文件外,我們還可以使用,Spring3.1之后的新特性這個特性是和Servlet3.0兼容的,那就是使用注解的方式來進行定義,更加簡單了,首先我們在spring-servlet.xml添加配置引入注解:

1 <!-- spring 3.1之后由RequestMappingHandlerAdapter和RequestMappingHandlerMapping代替 -->
2     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
3     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>

  現在我們就可以使用注解了,上面的Context標簽其實就是指定我們注解所生效的包的,現在我們建立一個新的控制器,這時候就不用實現Controller接口了,這個時候控制器位置是:org.springframework.stereotype.Controller,代碼如下:

 1 package net.zengzhiying.controller;
 2 
 3 import javax.servlet.http.HttpServletRequest;
 4 import javax.servlet.http.HttpServletResponse;
 5 
 6 import org.springframework.stereotype.Controller;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.servlet.ModelAndView;
 9 
10 
11 @Controller("PostTest")
12 public class PostTest {
13     
14     @RequestMapping("/post.htm")
15     public ModelAndView post() {
16         return new ModelAndView("post");
17     }
18     
19     
20     @RequestMapping("/post.html")
21     public ModelAndView post2() {
22         return new ModelAndView("hello");
23     }
24     
25     @RequestMapping("post3")
26     public String post3() {
27         return "hello";
28     }
29     
30     
31     @RequestMapping("/post")
32     public ModelAndView post1(HttpServletRequest request, HttpServletResponse response) {
33         String input = request.getParameter("name");
34         ModelAndView mv = new ModelAndView();
35         mv.addObject("input", input);
36         mv.setViewName("post");
37         return mv;
38     }
39     
40 }

  看這個控制器我們會發現Spring MVC注解作用其實非常強大,我們首先通過@Controller對控制器進行注解,然后通過@RequestMapping進行注解,要訪問的路由也可以自由定義,配合數組和通配符可以實現更多樣化更強大的處理功能;返回視圖可以是ModelAndView類型的,也可以簡單的返回String類型的,直接以字符串返回文件名就可以了,並且在參數里可以直接使用HttpServletRequest、HttpServletResponse等ServletAPI可以用Servlet的方式直接編寫,難度也降低了不少

  以上就是基本的spring mvc配置的過程,總體來說spring mvc是一個非常簡潔優雅的框架,使用Spring MVC開發web應用同樣是個不錯的選擇!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM