速动画教程第三十集

搭建SSH2的集成开发环境


下载地址:www.oksonic.cn    www.oksonic.com.cn
 

一.开发环境:

1.  Windows2003 sp1

2.  Eclipse3.2.2

3.  MyEclipse5.1.1

4.  Struts2.0.6

5.  Spring2.0.4

 

二.教学内容

1.       Struts2.0的应用之Login

2.       表单验证

3.       使用freemarker模板

4.       集成Spring2.0

5.       Struts2.0的单元测试

 

三.准备工作

1.       struts-2.0.6-all.zip

2.       spring 2.0.2

 

四.开发步骤

1.       Struts2.0Login应用

a)         建立一个Struts2.0应用(ssh2

b)        struts-2.0.6-all.ziplib目录以下文件拷贝到项目的lib目录中,刷新工程。

                                       i.              antlr-2.7.2.jar

                                     ii.              commons-beanutils-1.6.jar

                                    iii.              commons-chain-1.1.jar

                                   iv.              commons-logging-1.0.4.jar

                                     v.              commons-validator-1.3.0.jar

                                   vi.              freemarker-2.3.8.jar

                                  vii.              ognl-2.6.11.jar

                                viii.              oro-2.0.8.jar

                                   ix.              struts2-core-2.0.6.jar

                                     x.              xwork-2.0.1.jar

c)        编辑web.xml文件,加入以下红色字体部份

      

<?xml version="1.0" encoding="UTF-8"?>

<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">

    <filter>

        <filter-name>struts2</filter-name>

        <filter-class>

            org.apache.struts2.dispatcher.FilterDispatcher

        </filter-class>

    </filter>

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <welcome-file-list>

        <welcome-file>login.jsp</welcome-file>

    </welcome-file-list>

   

</web-app>

d)        页面的设计

                                       i.              进入登录界面login.jsp填写的用户名和密码

                                     ii.              用户名和密码验证成功后跳转到首页index.jsp

                                    iii.              用户名和密码验证失败后跳转到错误页error.jsp

                      

e)         类图

             

f)         相关代码

       页面部份

                     login.jsp

<%@ page language="java" pageEncoding="GBK"%>

<html>

    <head>

        <title>登录</title>

    </head>

    <body>

            登录

        <FORM action="login.action" method="post">

            <DIV align="center">

                <TABLE width="300px" border="1" cellpadding="0" cellspacing="0">

                    <TR>

                        <TD>

                            姓名:

                        </TD>

                        <TD>

                            <INPUT type="text" size="10" name="user.username">

                        </TD>

                    </TR>

                    <TR>

                        <TD>

                            密码:

                        </TD>

                        <TD>

                            <INPUT type="text" size="10" name="user.password">

                        </TD>

                    </TR>

                    <TR>

                        <TD colspan="2" align="center">

                            <INPUT type="submit" value="提交" name="submit">

                        </TD>

                    </TR>

                </TABLE>

            </DIV>

        </FORM>

    </body>

</html>

                

              index.jsp

<%@ page language="java" pageEncoding="GBK"%>

<%@ taglib uri = "/struts-tags"  prefix = "s" %>

<html>

    <head>

        <title>首页</title>

    </head>

    <body>

        <s:property value="user.username" /> 欢迎您到来!

    </body>

</html>

              error.jsp

<%@ page language="java" pageEncoding="GBK"%>

<html>

    <head>

        <title>错误</title>

    </head>

    <body>

        <DIV align="center">

            <h3>来到这里就是出错啦</h3>

        </DIV>

    </body>

</html>

              Java代码部份

User.java

package cn.oksonic.model.bo;

public class User {

   // 用户名称

   private String username;

   // 密码

   private String password;

   public String getPassword() {

       return password;

   }

   public void setPassword(String password) {

       this.password = password;

   }

   public String getUsername() {

       return username;

   }

   public void setUsername(String username) {

       this.username = username;

   }

}

               

LoginAction.java

package cn.oksonic.web;

import cn.oksonic.model.bo.User;

import com.opensymphony.xwork2.Action;

public class LoginAction extends ActionSupport {

   private User user = new User();

   @SuppressWarnings("static-access")

   public String execute() throws Exception {

       // 可以在这里调用Service层来进行验证,这里只验证用户名

       if (user.getUsername().equals("oksonic"))

           return this.SUCCESS;

       else

           return this.ERROR;

   }

   public User getUser() {

       return user;

   }

}

 

 

              配置文件部份

                     新建struts.xmlsrc目录)

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd" >

<struts>

    <package name="user" namespace="/" extends="struts-default">

        <!-- 配置一个action -->

        <action name="login" class="cn.oksonic.web.LoginAction">

            <!--  这里的意思是登录成功后跳转到 /index.jsp 页面 -->

            <result name="success" type="dispatcher">

                <param name="location">/index.jsp</param>

            </result>

            <!--  登录失败后跳转到 /error.jsp 页面 -->

            <result name="error" type="dispatcher">

                <param name="location">/error.jsp</param>

            </result>

        </action>

    </package>

</struts>

2.       表单验证

a)         配置验证器

                            src目录新建validators.xml文件,文件内容如下:

<validators>

    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>

    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>

    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>

    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>

    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>

    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>

    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>

    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>

    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>

    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>

    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>

</validators>

这些验证器已经定义了一些常用的验证,如:必填验证、数字验证、日期验证、邮件验证等。

要启动表单验证,需要增加一个拦截器,对 struts.xml 文件进行修改,增加 <interceptor-ref name="validationWorkflowStack" />

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd" >

<struts>

    <package name="user" namespace="/" extends="struts-default">

        <!-- 配置一个action -->

        <action name="login" class="cn.oksonic.web.LoginAction">

            <!--  这里的意思是登录成功后跳转到 /index.jsp 页面 -->

            <result name="success" type="dispatcher">

                <param name="location">/index.jsp</param>

            </result>

            <!--  登录失败后跳转到 /error.jsp 页面 -->

            <result name="error" type="dispatcher">

                <param name="location">/error.jsp</param>

            </result>

            <interceptor-ref name="validationWorkflowStack" />

        </action>

    </package>

</struts>

建立验证配置文件

      LoginAction 进行验证规则的配置,需要新建一个配置文件,文件名以 Action 的名称 + -validation.xml来命名,并保存到 LoginAction.java 文件所在的目录中

如:

                  LoginAction-validation.xml

文件内容如下:

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">

<validators>

    <field name="user.username">

        <field-validator type="requiredstring">

            <message>用户名必须填写</message>

        </field-validator>

    </field>

    <field name="user.password">

        <field-validator type="requiredstring">

            <message>用户密码必须填写</message>

        </field-validator>

    </field>

</validators>

修改 login.jsp,代码如下:

<%@ page language="java" pageEncoding="GBK"%>

<%@ taglib uri = "/struts-tags"  prefix = "s" %>

<html>

    <head>

        <title>登录</title>

    </head>

    <body>

           

        <s:form name="loginForm" action="login.action">

            <DIV align="center">

                <TABLE width="300px" border="1" cellpadding="0" cellspacing="0">

                    <TR>

                        <TD>

                            姓名:

                        </TD>

                        <TD>

                            <s:textfield  name="user.username" required="true"/>

                        </TD>

                    </TR>

                    <TR>

                        <TD>

                            密码:

                        </TD>

                        <TD>

                            <s:password name="user.password" required="user.password"/>

                        </TD>

                    </TR>

                    <TR>

                        <TD colspan="2" align="center">

                            <s:submit value="登录" />

                        </TD>

                    </TR>

                </TABLE>

            </DIV>

        </s:form>

    </body>

</html>

</html>

   这里的红字部份为struts的标签

 

修改配置文件,加入input属性,设置了此属性表单提交后如果出错后将返回到指定的页面

<!DOCTYPE struts PUBLIC

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd" >

<struts>

    <package name="user" namespace="/" extends="struts-default">

        <!-- 配置一个action -->

        <action name="login" class="cn.oksonic.web.LoginAction">

            <!--  这里的意思是登录成功后跳转到 /index.jsp 页面 -->

            <result name="success" type="dispatcher">

                <param name="location">/index.jsp</param>

            </result>

            <!--  登录失败后跳转到 /error.jsp 页面 -->

            <result name="error" type="dispatcher">

                <param name="location">/error.jsp</param>

            </result>

            <!--  如果验证失败,则返回登录页 -->

            <result name="input" type="dispatcher">

                <param name="location">/login.jsp</param>

            </result>

            <interceptor-ref name="validationWorkflowStack" />

        </action>

    </package>

</struts>

 

3.       使用freemarker模板

      使用freemarker模板语言来显示页面内容在Struts2中实现起来很简单,现在欢迎页面改为使用freemarker来显示。

      新建welcome.ftl文件,后缀名为ftl的文件即为freemarker模板文件夹,文件内容如下:

${user.username}

欢迎您的到来!这是FreeMarke页面

   有一点需要注意,welcome.ftl文件默认编码为GBK,需要将其转为UTF-8,否则中文不能正常显示。

   修改Action执行成功后的转向,转到welcome.ftl

   原:

<result name="success" type="dispatcher">

                        <param name="location">/index.jsp</param>

            </result>

   改:

<result name="success" type="freemarker">

                        <param name="location">/welcome.ftl</param>

            </result>

                

   红字部份为类型,这里需要指定为freemarker

 

4.       集成Spring2.0

1)       加入spring2包内dist目录下的spring.jar文件,加入struts2包内lib目录下的struts2-spring-plugin-2.0.6.jar

2)       修改 web.xml,为 Web 应用增加相应的 Spring ContextLoaderListener

<listener>  

     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  

    </listener>

3)       src 目录下新建 struts.properties 文件,内容如下:

                struts.objectFactory = spring

4)       新增 Service 层的对像 IUserServiceUserService

            IUserService

   

package cn.oksonic.service;

 

import cn.oksonic.model.bo.User;

 

public interface IUserService {

 

    /**

     * 验证是否为合法用户

     * @param user

     * @return

     */

    public boolean isValidUser(User user);

 

}

UserService

package cn.oksonic.service;

 

import cn.oksonic.model.bo.User;

 

public class UserService implements IUserService {

 

    public boolean isValidUser(User user) {

       if (user.getUsername().equals("oksonic") && user.getPassword().equals("oksonic"))

           return true;

       else

           return false;

    }

 

}

 

 

5)       修改 LoginAction.java代码

 

package cn.oksonic.web;

 

import com.opensymphony.xwork2.ActionSupport;

 

import cn.oksonic.model.bo.User;

import cn.oksonic.service.IUserService;

 

@SuppressWarnings("serial")

public class LoginAction extends ActionSupport {

 

    private User user = new User();

    private IUserService userService;

   

    @SuppressWarnings("static-access")

    public String execute() throws Exception {

       // 可以在这里调用Service层来进行验证,这里只验证用户名

       if (userService.isValidUser(user))

           return this.SUCCESS;

       else

           return this.ERROR;

    }

   

    public User getUser() {

       return user;

    }

 

    public void setUserService(IUserService userService) {

       this.userService = userService;

    }

 

}

6)       修改 struts.xml

 

     原:

    <action name="login" class="cn.oksonic.web.LoginAction">

    改:

    <action name="login" class="loginAction">

    这里红字部份为引用spring中的bean

7)       加入spring框架,并配置loginAction Bean

  applicationContext.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"

    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

 

    <bean id="userService" class="cn.oksonic.service.UserService" />

    <bean id="loginAction" class="cn.oksonic.web.LoginAction">

       <property name="userService">

           <ref bean="userService" />

       </property>

    </bean>

 

</beans>

红字的login就是struts.xml文件中所引用的Bean

             

5.       Struts2.0的单元测试

                     使用spring-mork进行单元测试

a)         加入spring-mork.jar文件

b)        编写BaseTest.java文件,以后所有的单元测试用例都将继承于它,它的作用是读取spring的配置文件。

                    

package cn.oksonic;

 

import org.springframework.test.AbstractSingleSpringContextTests;

 

public class BaseTest extends AbstractSingleSpringContextTests {

   

    protected String[] getConfigLocations() {

        return new String[]{"file:D:/oksonic/workspace/ssh2/WebRoot/WEB-INF/applicationContext.xml"};

    }

   

    public static final void testTmp() {

        assertTrue( true );

    }

    protected void logDebug( Object arg0 ) {

        logger.error(arg0);

    }

    protected void logError( Object arg0 ) {

        logger.error(arg0);

    }

    protected void logWarn( Object arg0 ) {

        logger.warn(arg0);

    }

 

}

c)        创建测试用例LoginActionTest.java

                    

package cn.oksonic.web;

 

import org.junit.Test;

import cn.oksonic.BaseTest;

import cn.oksonic.model.bo.User;

 

public class LoginActionTest extends BaseTest {

 

    private LoginAction action;

   

    @Override

    protected void onSetUp() throws Exception {

        super.onSetUp();

        action = (LoginAction) this.applicationContext.getBean("loginAction");

    }

   

    @Override

    protected void onTearDown() throws Exception {

        super.onTearDown();

        action = null;

    }

   

    @Test

    public void testExecute() throws Exception {

        User user = new User();

        user.setPassword("oksonic");

        user.setUsername("oksonic");

        action.setUser(user);

        assertEquals(action.execute(), action.SUCCESS);

    }

 

}

 

联系方法:

  http://www.oksonic.cn

  Email: oksonic@tom.com

  QQ: 71279650

 

 

Feedback

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-04-29 08:56 by living
www.oksonic.cn 网站不无法打开,请检查

# re: 速动画教程第三十集 搭建SSH2的集成开发环境[未登录]  回复  更多评论   

2007-04-29 11:45 by oksonic
已经检查,可以打开!

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-04-29 16:11 by 应用之美
老大你真是太好了,急人所急啊!!

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-04-30 13:37 by asdfasdf
太好了,一直在等你这篇文章阿,写得很详细,清晰,谢谢阿,继续,看过的人大家支持阿

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-04-30 14:42 by BeanSoft
谢了, 先收藏了.

不过, 说实在的, 小小一个登录就要写这么多配置文件... 个人觉得 Java 框架最好不要再向这个方向发展了.

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-06-27 12:41 by 彭偃松
不能不用真名回帖的帖子,我才发现这个博客,真是太好了!!
非常感谢斑竹!!!!

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-06-27 12:42 by 彭偃松
我已经把你所有的33集都下载了!!
呵呵

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-07-01 20:50 by root
绝对好东西!
收藏

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-07-12 11:15 by wall
写的不错,非常感谢!

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-09-20 10:22 by thris
发现一个问题,请教oksonic:按照你的步骤做下去,当加入spring框架后,表单重复提交错误的用户名和密码时,返回的错误信息会重复累加。而未加入spring之前,没有这样的想象,求教是何缘故,如果解决?

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-10-26 14:37 by nigor
回复,错误信息会重复累加,去掉spring中的 <bean id="loginAction" class="cn.oksonic.web.LoginAction">

<property name="userService">

<ref bean="userService" />

</property>

</bean>

struts.xml中保持<action name="login" class="cn.oksonic.web.LoginAction">不变

# re: 速动画教程第三十集 搭建SSH2的集成开发环境  回复  更多评论   

2007-10-26 15:03 by nigor
<bean id="loginAction" class="com.test.action.LoginAction" scope="prototyte">
<property name="userService">
<ref bean="userService" />
</property>
</bean>

# re: 速动画教程第三十集 搭建SSH2的集成开发环境[未登录]  回复  更多评论   

2008-08-15 15:15 by Ray
我觉得说啥都没用 只有2字 太感谢你了

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 35, comments - 1104, trackbacks - 0, articles - 0

Copyright © oksonic