http://www.meichua.com (收藏,设为首页)
以前打牌的时候出牌太慢,其他人就叫着出啊,出啊,所以就变成了chua...... (手机请访问 http://3g.dlog.cn/meichua)
上一篇:linux下常用软件安装 下一篇:石头

springmvc初试

2008年10月26日(Sunday) 16点30分 作者: chua 天气: 心情: 一般

前一天试用了一下spring mvc总体感觉还是很方便的,当然查文档另算.

spring mvc需要的包有:

spring.jar spring                      核心哭
spring-webmvc.jar                   spring mvc库
spring-modules-validation.jar  校验库
commons-lang-2.3.jar
servlet-api.jar
velocity-1.5-dev.jar
commons-logging-1.1.jar
log4j-1.2.12.jar
commons-collections-3.1.jar

现在来说一下具体步骤:

1:创建web.xml文件,这里需要引入spring mvc的初始化参数及dispatcher,web.xml如下:

 <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    .
    .
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   /WEB-INF/applicationContext.xml
  </param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <servlet>
  <servlet-name>sample</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>3</load-on-startup>
 </servlet>
 <servlet-mapping>
  <servlet-name>sample</servlet-name>
  <url-pattern>*.htm</url-pattern>
 </servlet-mapping>
    .
    .
</web-app>

 

2: 创建sample-servlet.xml,web.xml中的DispatcherServlet会自动载入此文件,不过命名规则就是servlet的name和此文件"-"之前的开头必须一致,如这里web.xml中DispatcherServlet的name为"sample",次文件必须以sample开头.具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
  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-2.5.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 <!-- MultipartResolver for parsing file uploads, implementation for Commons FileUpload -->
 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

 <!-- Configurer that sets up a shared VelocityEngine for Velocity views -->
 <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
  <property name="resourceLoaderPath" value="WEB-INF/views/"/>
  <property name="velocityPropertiesMap">
          <props>
              <prop key="input.encoding">UTF-8</prop>
              <prop key="output.encoding">UTF-8</prop>
              <!--in dev may use, in runtime modify the velocity templates-->
              <!--prop key="resource.loader">file</prop>
              <prop key="file.resource.loader.class">org.apache.velocity.runtime.resource.loader.FileResourceLoader</prop>
              <prop key="file.resource.loader.path">E:/projects/sample/war/WEB-INF/views/</prop>
              <prop key="file.resource.loader.cache">false</prop-->
           </props>
        </property>
 </bean>

 <!-- Simple ViewResolver for Velocity, appending ".vm" to logical view names -->
 <bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver">
  <property name="suffix" value=".vm"/>
  <property name="contentType"><value>text/html; charset=UTF-8</value></property>
  <property name="requestContextAttribute"><value>requestContext</value></property>
 </bean>
 
    <!-- Enable annotation-based validation using Bean Validation Framework --> 
    <bean id="configurationLoader" class="org.springmodules.validation.bean.conf.loader.annotation.AnnotationBeanValidationConfigurationLoader"/> 
    <bean id="validator" class="org.springmodules.validation.bean.BeanValidator" p:configurationLoader-ref="configurationLoader"/> 
      
    <!-- Load messages ,a error message file, can be used to put to pages--> 
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:basename="classpath:errors">
        <!--property name="basename">
            <value>errors</value>
        </property-->
     <property name="defaultEncoding" value="utf-8" />
    </bean>

 <!-- auto scan my define package, the controller with annotation will be load-->
 <context:component-scan base-package="com.meichua.sample.web.controller"/>
</beans>

3:applicationContext.xml,这个文件一般定义业务逻辑的bean,sample只是一个页面级的例子,所以这里为空

<?xml version="1.0" encoding="UTF-8"?>
<!--
  - Middle tier application context definition for the image database.
  -->
<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"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">

</beans>

4: 创建一个controller,class前加入controller和Mapping url的annotation,class中用Autowired的annotation自动注入form 校验的validator.以及RequestMapping两个request的GET,POST处理方法,代码大致如下:

 @Controller
@RequestMapping("/register.htm")
public class RegisterController {
    private static final Log log = LogFactory.getLog(RegisterController.class);
   
    @Autowired
    private Validator validator;

    public void setValidator(Validator validator) {
        this.validator = validator;
    }

    @RequestMapping(method = RequestMethod.GET)
    public String regsiter(@ModelAttribute("registerData") RegisterData registerData) {
        return "register";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String regsiter(@ModelAttribute("registerData") RegisterData registerData, BindingResult result) {
        try {
            validator.validate(registerData, result);
        } catch(Exception e) {
            log.error("something error!", e);
            return "register";
        }
       
        if (result.hasErrors()) {
            return "register";
        }
        .
        .
        //todo same business logic
        .
        .
        return "redirect:registerSuccess.htm";

    }
}

 5:创建form提交RegisterData对象,并用annotation说明需要具体校验的种类,方式

public class RegisterData {

    @NotBlank
    @Length(min = 6, max = 14)
    private String loginId;

    @NotBlank
    @Length(min = 6, max = 14)
    private String password;

    @Expression(value = "verifyPassword == password")
    private String verifyPassword;

    private int age;

    @NotBlank
    @Email
    private String email;

    public int getAge() {
        return age;
    }
    .
    .
    public void setVerifyPassword(String verifyPassword) {
        this.verifyPassword = verifyPassword;
    }

    // Validation Methods
    @ValidationMethod(forProperty = "age", args = "18,100")
    private boolean validateAge() {
        return age >= 18 && age <= 100;
    }

    @ValidationMethod(forProperty = "loginId")
    private boolean validateLoginId() {
        try {
            Pattern pattern = new Perl5Compiler().compile("([a-z_A-Z]|[0-9])*", Perl5Compiler.READ_ONLY_MASK | Perl5Compiler.SINGLELINE_MASK);
            PatternMatcher matcher = new Perl5Matcher();
            return matcher.matches(this.loginId, pattern);
        } catch (MalformedPatternException e) {
            return false;
        }
    }
}

 6:编写register.vm,registerSuccess.vm这里就不贴了

##spring.vm的宏springShowErrors似乎有点问题

#macro( showErrors $separator $classOrStyle )
    #foreach($error in $status.errorMessages)
        #if($classOrStyle == "")
            <b>${error}</b>
        #else
            <span ${classOrStyle}>${error}</span>
        #end
        ${separator}
    #end
#end
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
<!--
.td_left { color: #0099ff;}
.em (color: #CC0000)
-->
</style>
</head>
<body>
    <table width="800" align="center">
    <tr>
        <td>
            <fieldset style="padding-top: 2em;">
                <legend>快速注册</legend>
                <form id="regform" method="post" action="/sample/register.htm">
                <input type="hidden" name="iu" value="" id="iu" />
                    <table align="center">
                        <tr>
                            <td class="td_left">注册用户:</font></td>
                            <td>#springFormInput("registerData.loginId" "")</td>
                        </tr>
                        <tr>
                        <td></td><td><font color="#cc0000">#showErrors("<br/>" "")</font></td>
                        </tr>
                        <tr>
                            <td class="td_left">登录密码:</td>
                            <td>#springFormPasswordInput("registerData.password" "")</td>
                        </tr>
                        <tr>
                        <td></td><td><font color="#cc0000">#showErrors("<br/>" "")</font></td>
                        </tr>
                        <tr>
                            <td class="td_left">验证密码:</td>
                            <td>#springFormPasswordInput("registerData.verifyPassword" "")</td>
                        </tr>
                        <tr>
                        <td></td><td><font color="#cc0000">#showErrors("<br/>" "")</font></td>
                        </tr>
                        <tr>
                            <td class="td_left">您的邮箱:</td>
                            <td>#springFormInput("registerData.email" "")</td>
                        </tr>
                        <tr>
                        <td></td><td><font color="#cc0000">#showErrors("<br/>" "")</font></td>
                        </tr>
                        <tr>
                            <td class="td_left">您的年龄:</td>
                            <td>#springFormInput("registerData.age" "")</td>
                        </tr>
                        <tr>
                        <td></td><td><font color="#cc0000">#showErrors("<br/>" "")</font></td>
                        </tr>
                    </table>
                    <table align="center">
                        <br>
                        <tr>
                            <td><input type="submit" value="注册用户"/></td>
                        </tr>
                    </table>
                </form>
            </fieldset>
        </td>
    </tr>
    </table>
</body>
</html>

7: 编写errors.properties,这个文件可以放到classpath下,也可以放到WEB-INF下,具体看在sample-servlet.xml的如何定义,如下:

RegisterData.loginId[not.blank]=请输入您的登录名!
RegisterData.loginId[length]=请输入的登录名长度必须是6-14个字符!
RegisterData.loginId[loginIdExist]=登录名已经存在,请使用其他登录名!
RegisterData.loginId[validateLoginId()]=登录名有含有非法字符,只能由半角英文字符,下滑线,阿拉伯数字组成!
RegisterData.password[not.blank]=请输入您的登录密码!
RegisterData.password[length]=登录密码长度不能大于12个字符!
RegisterData.verifyPassword[expression]=验证密码和密码不匹配!
RegisterData.email[not.blank]=邮箱地址不能为空!
RegisterData.email[email]=邮箱地址格式不正确!
RegisterData.age[not.blank]=您的年龄不能为空!
RegisterData.age[validateAge()]=您的年龄不正确! 

 

8:打成war包,放到jboss或tomcat的具体目录下,就可以看到页面了

 

标签: spring mvc 
姓名: 
邮箱:  {可选}
网址:  {可选} 此评论只有我和写日记的人查阅
校验码: ... <我看不清楚>
网记为您提供手机和互联网同步的个人主页,带给你不一样的体验