spring mvc経典入門

13458 ワード

現在主流のWeb MVCフレームはStrutsという主力のほかに、Spring MVCが続いています.そのため、プログラマとしての主流フレームワークとして、フレームワークの選択が多くなりました.変化に対応するニーズと業務に対して、実行できる方案が自然に多くなりました.ただし、Spring MVCを活用して多くのWeb開発に対応するには、その配置や原理を把握しなければならない.
一、Spring MVC環境構築:(Spring 2.56+Hibername 3..0)
1.jarパッケージ導入
Spring 2.56:spring.jar、spring-webmvc.jar、commons-loging.jar、cglib-nodep-2.1_3.jar
Hbernate 3.6.8:hibernate 3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、antlr-2.7.6.jar、comons-collection s-3.1.1、dom 4 j-1.6.jar、javassist-3.12.0.GA.jar、jta-1.11.jar、slap-ja、slap-ja.ja、slap-ja.jp-ja.jp.jp.ja.jp-ja.ja.ja.jp-ja.jp-ja.jp-ja.jp-ja
2.web.xml設定(部分)

<!-- Spring MVC   -->
02
<!-- ====================================== -->
03
<servlet>
04
    <servlet-name>spring</servlet-name>
05
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
06
    <!--      servlet.xml          ,   WEB-INF   ,   [<servlet-name>]-servlet.xml, spring-servlet.xml
07
    <init-param>
08
        <param-name>contextConfigLocation</param-name>
09
        <param-value>/WEB-INF/spring-servlet.xml</param-value>    
10
    </init-param>
11
    -->
12
    <load-on-startup>1</load-on-startup>
13
</servlet>
14
 
15
<servlet-mapping>
16
    <servlet-name>spring</servlet-name>
17
    <url-pattern>*.do</url-pattern>
18
</servlet-mapping>
19
   
20
 
21
 
22
<!-- Spring   -->
23
<!-- ====================================== -->
24
<listener>
25
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
26
</listener>
27
   
28
 
29
<!--   Spring Bean         。     WEB-INF    -->
30
<context-param>
31
    <param-name>contextConfigLocation</param-name>
32
    <param-value>classpath:config/applicationContext.xml</param-value>
33
</context-param>
3.spring-servlet.xml配置
spring-servletという名前は、上のweb.xmlのタグに付けられた値がspring(spring)であり、さらに「-servlet」を付けて作成されたspring-servlet.xmlファイル名は、sprigVCファイルに変更されます.

<?xml version="1.0" encoding="UTF-8"?>
02
<beans xmlns="http://www.springframework.org/schema/beans"    
03
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
04
        xmlns:context="http://www.springframework.org/schema/context"    
05
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
06
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
07
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
08
       http://www.springframework.org/schema/context <a href="http://www.springframework.org/schema/context/spring-context-3.0.xsd">http://www.springframework.org/schema/context/spring-context-3.0.xsd</a>">
09
 
10
    <!--   spring mvc    -->
11
    <context:annotation-config />
12
 
13
    <!--            jar  -->
14
    <context:component-scan base-package="controller"></context:component-scan>
15
 
16
    <!--        POJO    -->
17
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
18
 
19
    <!--           。prefix:  , suffix:   -->
20
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/jsp/" p:suffix=".jsp" />
21
</beans>
4.appication Contect.xml配置

<?xml version="1.0" encoding="UTF-8"?>
02
<beans xmlns="http://www.springframework.org/schema/beans"
03
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
04
        xmlns:aop="http://www.springframework.org/schema/aop"
05
        xmlns:tx="http://www.springframework.org/schema/tx"
06
        xsi:schemaLocation="
07
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
08
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
09
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
10
 
11
    <!--   hibernate.cfg.xml        -->

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
13
        <property name="configLocation">
14
            <value>classpath:config/hibernate.cfg.xml</value>
15
        </property>
16
    </bean>
17
     
18
    <!--     Hibernate   -->
19
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
20
        <property name="sessionFactory">
21
            <ref local="sessionFactory"/>
22
        </property>
23
    </bean>
24
     
25
    <!--   (   )-->
26
    <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
27
 
28
   <!--   Service -->
29
   <bean id="loginService" class="service.LoginService"></bean>
30
 
31
    <!--   Dao -->
32
    <bean id="hibernateDao" class="dao.HibernateDao">
33
        <property name="sessionFactory" ref="sessionFactory"></property>
34
    </bean>
35
</beans>
 
二、詳しくは
Spring MVCはStrutsと原理的に似ています.(いずれもMVCアーキテクチャに基づいています.)ページ要求を制御するServletがあります.処理が終わったら、ページにジャンプします.下記のコードを見てください.

package controller;
02
 
03
import javax.servlet.http.HttpServletRequest;
04
 
05
import org.springframework.stereotype.Controller;
06
import org.springframework.web.bind.annotation.RequestMapping;
07
import org.springframework.web.bind.annotation.RequestParam;
08
 
09
import entity.User;
10
 
11
@Controller  //  Struts Action
12
public class TestController {
13
 
14
    @RequestMapping("test/login.do")  //   url    ,  Struts action-mapping
15
    public String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) {
16
        // @RequestParam    url            (    required=false)
17
        // @RequestParam    :@RequestParam("username")
18
 
19
        if (!"admin".equals(username) || !"admin".equals(password)) {
20
            return "loginError"; //       (     ),        spring-servlet             
21
        }
22
        return "loginSuccess";
23
    }
24
 
25
    @RequestMapping("/test/login2.do")
26
    public ModelAndView testLogin2(String username, String password, int age){
27
        // request response          ,           
28
        //             name   ,          
29
         
30
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
31
            return new ModelAndView("loginError"); //      ModelAndView      (  ),               
32
        }
33
        return new ModelAndView(new RedirectView("../index.jsp"));  //            
34
        //            
35
        // return new ModelAndView("redirect:../index.jsp");
36
    }
37
 
38
    @RequestMapping("/test/login3.do")
39
    public ModelAndView testLogin3(User user) {
40
        //            ,   Struts ActionForm,User       ,     
41
        String username = user.getUsername();
42
        String password = user.getPassword();
43
        int age = user.getAge();
44
         
45
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
46
            return new ModelAndView("loginError");
47
        }
48
        return new ModelAndView("loginSuccess");
49
    }
50
 
51
    @Resource(name = "loginService")  //   applicationContext.xml bean id loginService ,   
52
    private LoginService loginService;  //   spring       get set  ,          ,         
53
 
54
    @RequestMapping("/test/login4.do")
55
    public String testLogin4(User user) {
56
        if (loginService.login(user) == false) {
57
            return "loginError";
58
        }
59
        return "loginSuccess";
60
    }
61
}
以上の4つの方法の例は、Controllerには異なる要求urlが含まれています.一つのurlアクセスを利用して、urlパラメータによって異なる方法にアクセスすることもできます.コードは以下の通りです.

package controller;
02
 
03
import org.springframework.stereotype.Controller;
04
import org.springframework.web.bind.annotation.RequestMapping;
05
import org.springframework.web.bind.annotation.RequestMethod;
06
 
07
@Controller
08
@RequestMapping("/test2/login.do")  //       *.do      Controller
09
public class TestController2 {
10
     
11
    @RequestMapping
12
    public String testLogin(String username, String password, int age) {
13
        //         ,    /test2/login.do ,        
14
         
15
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
16
            return "loginError";
17
        }
18
        return "loginSuccess";
19
    }
20
 
21
    @RequestMapping(params = "method=1", method=RequestMethod.POST)
22
    public String testLogin2(String username, String password) {

        //   params   method            

        //              ,   get  

         

        if (!"admin".equals(username) || !"admin".equals(password)) {

            return "loginError";

        }

        return "loginSuccess";

    }

     

    @RequestMapping(params = "method=2")

  public String testLogin3(String username, String password, int age) {

        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {

            return "loginError";

        }

        return "loginSuccess";

    }

}
Request MappingはClassにおいて、父親のRequest要求urlと見なすことができ、Request Mappingは方法的には子Request要求urlと見なすことができ、親子の要求urlは最終的にページ要求urlと一致するため、Request Mappingもこのように書くことができる.

package controller;

 

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

 

@Controller

@RequestMapping("/test3/*")  //  request  url

public class TestController3 {

 

    @RequestMapping("login.do")  //  request  url,      /test3/login.do

    public String testLogin(String username, String password, int age) {

        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
            return "loginError";

        }

        return "loginSuccess";

    }

}
 
終わりの言葉
これらのSpring MVCを把握することによって、すでに非常に良い基礎ができました.ほとんどの開発に対応できます.これらを熟練に把握することにより、Jsp、Velocity、Tiles、iText、POIなどの多様なビュー技術がより深く使えるようになります.Spring MVCフレームは使い方が分かりませんので、JSP技術だけを使うように強制することはありません.
回転:http://blog.csdn.net/wangpeng047/article/details/6983027