您的位置:首页 > 编程语言 > Java开发

struts1.x和struts2.x随笔

2015-06-10 00:39 531 查看
以前写在博客园的文章。

网上有很多关于struts1.x和struts2.x的文章,但是都不太清楚,本人身为初学者,把自己的心得分享给和我一样的初学者,如有不对的地方请多多指出,谢谢。如果需要转载请注重个人学习成果,请注明出处,谢谢!

另外参考网上高手写的struts心得原创,地址:http://www.blogjava.net/nokiaguy/archive/2008/04/15/193229.html 建议看看。

首先我测试的工具是myeclipse9.0 M2。

笔记开始:
这里本来有两种目录结构的图,但是显示不了了就没了。

首先给出struts1.x 的搭建过程,之后是struts2的搭建过程,在搭建过程中会对struts1.x和struts2.x的重点进行说明并说说他们的区别。在搭建环境之前说明一下,我是用myeclipse9.0 M2开发的,myeclipse会自动生成struts的jar包等文件及配置文件,如果是使用eclipse或者是其它工具开发的话,需要到网站下载struts框架需要的jar包,并添加到相应的目录,例如:在eclipse中开发struts1.x时,需要把struts1.x的支持jar包复制到/WEB_INF/lib目录下,把需要的tld文件复制到/WEB_INF目录下。struts的框架请自己百度下载,在这里就不给的地址了。对于各个配置文件属性的详细说明,请读者自己在百度搜索,百度很多的,都写得很好。

struts1.x------------------------------------------------------------------------------------------------------------------------------------

现在开始搭建struts,搭建环境Struts1.x的基本步骤。

1. 安装Struts1.x。由于Struts的入口点是ActionServlet,所以得在web.xml中需要配置这个Servlet。

2. 编写ActionForm类(一般从org.apache.struts.action.ActionForm类继承),这一步不是必须的,如果要接收客户端提交的数据,需要执行这一步。

3. 编写Action类(一般从org.apache.struts.action.Action类继承)。

4. 在struts-config.xml文件中配置Action和ActionForm。

5. 如果要采集用户录入的数据,一般需要编写若干JSP页面,并通过这些JSP页面中的form将数据提交给Action。

根据上面的步骤,就可以搭建出struts1.x的的环境

(一)编写web.xml文件(如果没有就新建),配置要使用struts1.x必须配置web.xml文件,这样web才能支持struts,配置代码如下:

(二)编写ActionForm类,在ActionForm类可以说是一个简单的POJO类,在它的内容里只需要定义对象的属性和定义每个参数的get和set方法(这里的参数就是表单中的的参数,名字可以根据自己习惯,最好是见名知意),所以struts1.x的ActionForm代码如下

struts1.x 的Form文件:LoginForm.java的类文件代码如下:

package struts1.form;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;
public void reset(ActionMapping mapping, HttpServletRequest request) {

// TODO Auto-generated method stub

}
public String getUsername() {

return username;

}
public void setUsername(String username) {

this.username = username;

}
public String getPassword() {

return password;

}
public void setPassword(String password) {

this.password = password;

}

}

(三)编写Action类,struts1.x 的Action类是最关键的类,它是必须的。Action类必须继续Action类并实现Action类中的execute方法,这个方法中的的内容就是我们的重点,我们把数据的控制都写在这里,这个Action类接收表单的数据,进行判断处理,然后根据结果返回一个页面转向(我这里的只是简单的测试,并没有涉及数据库操作,所以比较简单),所以struts1.x的Action代码如下

struts1.x 的Action文件:LoginAction.java的类文件代码如下:

package struts1.action;
import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;
import struts1.form.LoginForm;
public class LoginAction extends Action {

public ActionForward execute(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) {

LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub

String username=loginForm.getUsername();

String password=loginForm.getPassword();

if(username.equals("aaa")&&password.equals("000")){

return mapping.findForward("Success");

}else return mapping.findForward("Fail");

}

}

(四)在struts-config.xml文件中配置Action和ActionForm。这个配置就是让服务器知道怎么工作,比如:当用户在登录页面点击登录之后,它就根据action的配置工作,当然还有其他的一下配置,在这个测试中不需要就不写了。

struts1.x 的struts-config.xml配置页面代码如下:

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

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>

<data-sources />

<form-beans >

<form-bean name="loginForm" type="struts1.form.LoginForm" />
</form-beans>
<global-exceptions />

<global-forwards />

<action-mappings >

<action

attribute="loginForm"

name="loginForm"

path="/login"

scope="request"

type="struts1.action.LoginAction">

<forward name="Success" path="/success.jsp"></forward>

<forward name="Fail" path="/fail.jsp"></forward>

</action>
</action-mappings>
<message-resources parameter="struts1.ApplicationResources" />

</struts-config>

第五步的内容已经在前面写好了,各个页面的代码如上面所示,现在就可以运行测试了。到此struts1.x测试完成。

struts2.x----------------------------------------------------------------------------------------------------------------------------------------------

开始搭建struts2.x。在说struts2.x之前先说一下webwork吧,WebWork2.2版本发布之后,官方宣称WebWork框架将要和Struts合并。这让一些WebWork的用户产生了担忧,合并之后,是不是就意味着自己在WebWork这方面技术和经验的积累都已浪费?已使用或即将使用WebWork的项目是不是就意味着更多的风险?

  答案是:完全不用担心这些。WebWork和Struts的合并,是各取所长,然后诞生出一个更加高效的Web框架。而这个框架用得就是WebWork的优秀技术和Struts的强大社区。

  合并的情况如下:

  1、 产生一个新的项目Struts Action 2.0 = WebWork2.2 + 一些Struts的功能和特性。

  2、 WebWork框架将会中止新功能的增加,如果有新的版本发布都会是Bug的修改。

  3、 代码、框架的开发者、社区都将移到Struts。

  4、 合并的目标是致力于生产率的提高。

  5、 Struts不再是一个框架,它是一个社区。

  6、 Struts社区中主要有两个Web框架。一个是基于Action模型的Struts Action;另一个是基于组件模型的Struts Shale。

由上面的说明可以看到,struts2.x是webwork和struts1.x的合并产物,他们各取其优,但是要说明的是Struts2虽然在大版本号上是第二个版本,但基本上在配置和使用上已经完全颠覆了Struts1.x的方式(当然,Struts2仍然是基于MVC模式的,也是动作驱动的,可能这是唯一没变的东西)。Struts2实际上是在Webwork基础上构建起来的MVC框架。我们从Struts2的源代码中可以看到,有很多都是直接使用的xwork(Webwork的核心技术)的包。既然从技术上来说Struts2是全新的框架,那么就让我们来学习一下这个新的框架的使用方法。

搭建环境Struts2.x的基本步骤。

1. 安装Struts2.x ,在web.xml中需要配置struts。

2. 编写Action类(包含了struts1.x中的Action和ActionForm,一般从com.opensymphony.xwork2.ActionSupport继承)。

3. 在struts.xml文件中配置Action。

4. 如果要采集用户录入的数据,一般需要编写若干JSP页面,并通过这些JSP页面中的form将数据提交给Action。

根据上面的步骤,就可以搭建出struts2.x的的环境

(一)安装Struts2.x,配置web.xml文件,这一步对于Struts1.x和Struts2都是必须的,只是安装的方法不同。Struts1的入口点是一个Servlet,而Struts2的入口点是一个过滤器(Filter)。因此,Struts2要按过滤器的方式配置。下面是在web.xml中配置Struts2的代码:

struts2.x 的web.xml配置页面代码如下:

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

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name></display-name>

<welcome-file-list>

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

</welcome-file-list>

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

</web-app>

(二)编写Action类,这一步和Struts1.x也必须进行。只是Struts1.x中的动作类必须从Action类中继承,而Struts2.x的动作类需要从com.opensymphony.xwork2.ActionSupport类继承。

在Struts1.x中,必须要单独建立一个ActionForm类(或是定义一个动作Form),而在Struts2中ActionForm和Action已经二合一了。从下面的代码可以看出,前面部分就是应该写在ActionForm类中的内容。

从下面的代码可以看出,动作类的一个特征就是要覆盖execute方法,只是Struts2的execute方法没有参数了,而Struts1.x的execute方法有四个参数。而且execute方法的返回值也不同的。Struts2只返回一个String,用于表述执行结果(就是一个标志)。

所以Action类代码如下:

struts2.x 的Action类,LoginAction类文件的代码如下:

package com.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {

private String username;

private String password;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

@Override

public String execute() throws Exception {

// TODO Auto-generated method stub

if(getUsername().equals("bbb")&&getPassword().equals("111")){

return "Success";

}

else

{

return "Fail";

}

}

}

(三)在struts.xml文件中配置Action,这一步struts1.x和struts2.x都是必须的,只是在struts1.x中的配置文件一般叫struts-config.xml(当然也可以是其他的文件名),而且一般放到WEB-INF目录中。而在struts2.x中的配置文件一般为struts.xml,放在src目录下,当程序运行的时候会自动复制到/WEB-INF下。

struts2.x 的struts.xml配置页面代码如下:

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

<package name="struts2" extends="struts-default" >

<action name="Login" class="com.struts2.action.LoginAction">

<result name="Success">/success.jsp</result>

<result name="Fail">/fail.jsp</result>

</action>

</package>

</struts>

在<struts>标签中可以有多个<package>,第一个<package>可以指定一个Servlet访问路径(不包括动作名),如“/mystruts”。extends属性继承一个默认的配置文件“struts-default”,一般都继承于它,大家可以先不去管它。<action>标签中的name属性表示动作名,class表示动作类名。

到此struts2.x配置完成。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

各个页面代码如下:

index.jsp,success.jsp,fail.jsp的页面代码(struts1.x和struts2.x的一样):

index.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'index.jsp' starting page</title>

</head>

<body>

<a href="login.jsp">登录</a> <br>

</body>

</html>

success.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'success.jsp' starting page</title>

</head>

<body>

登录成功! <br>

</body>

</html>

fail.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'success.jsp' starting page</title>

</head>

<body>

登录失败! <br>

</body>

</html>

struts1.x 的login.jsp页面代码如下:

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

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<html>

<head>

<title>JSP for LoginForm form</title>

</head>

<body>

<html:form action="/login">

username : <html:text property="username"/><br/>

password : <html:password property="password"/><br/>

<html:submit/><html:cancel/>

</html:form>

</body>

</html>

struts2.x 的login.jsp页面代码如下:

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

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

<html>

<head>

<title>JSP for LoginForm form</title>

</head>

<body>

<s:form action="Login">

<s:textfield name="username" label="username" />

<s:password name="password" label="password" />

<s:submit/>

</s:form>

</body>

</html>

----------------------------------------------------------------------------------------------------------------------------------------

struts2.x的其他一些特性:

在login.jsp中使用了Struts2带的tag。在Struts2中已经将Struts1.x的好几个标签库都统一了,在Struts2中只有一个标签库/struts-tags。这里面包含了所有的Struts2标签。但使用Struts2的标签大家要注意一下。在<s:form>中最好都使用Struts2标签,尽量不要用HTML或普通文本,大家可以将struts2.x中的login..jsp的代码改为如下的形式,看看会出现什么效果:

........

<body>

<s:form action="Login">

username : <s:textfield name="username" />

password : <s:password name="password" />

<s:submit/>

</s:form>

</body>

提示一下,在<s:form>中Struts2使用<table>定位。如果使用上面的写法,在浏览器中将会看到username和文本框不在同一行内。

<result>标签的name实际上就是execute方法返回的字符串,如果返回的是“positive”,就跳转到positive.jsp页面,如果是“negative”,就跳转到negative.jsp页面。在<struts>中可以有多个<package>,在<package>中可以有多个<action>。我们可以用如下的URL来访问这个动作:

注:Struts1.x的动作一般都以.do结尾,而Struts2是以.action结尾。

到此struts2.x配置完成。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

各个页面代码如下:

index.jsp,success.jsp,fail.jsp的页面代码(struts1.x和struts2.x的一样):

index.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'index.jsp' starting page</title>

</head>

<body>

<a href="login.jsp">登录</a> <br>

</body>

</html>

success.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'success.jsp' starting page</title>

</head>

<body>

登录成功! <br>

</body>

</html>

fail.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>My JSP 'success.jsp' starting page</title>

</head>

<body>

登录失败! <br>

</body>

</html>

struts1.x 的login.jsp页面代码如下:

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

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

<html>

<head>

<title>JSP for LoginForm form</title>

</head>

<body>

<html:form action="/login">

username : <html:text property="username"/><br/>

password : <html:password property="password"/><br/>

<html:submit/><html:cancel/>

</html:form>

</body>

</html>

struts2.x 的login.jsp页面代码如下:

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

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

<html>

<head>

<title>JSP for LoginForm form</title>

</head>

<body>

<s:form action="Login">

<s:textfield name="username" label="username" />

<s:password name="password" label="password" />

<s:submit/>

</s:form>

</body>

</html>

----------------------------------------------------------------------------------------------------------------------------------------

struts2.x的其他一些特性:

在login.jsp中使用了Struts2带的tag。在Struts2中已经将Struts1.x的好几个标签库都统一了,在Struts2中只有一个标签库/struts-tags。这里面包含了所有的Struts2标签。但使用Struts2的标签大家要注意一下。在<s:form>中最好都使用Struts2标签,尽量不要用HTML或普通文本,大家可以将struts2.x中的login..jsp的代码改为如下的形式,看看会出现什么效果:

........

<body>

<s:form action="Login">

username : <s:textfield name="username" />

password : <s:password name="password" />

<s:submit/>

</s:form>

</body>

提示一下,在<s:form>中Struts2使用<table>定位。如果使用上面的写法,在浏览器中将会看到username和文本框不在同一行内。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: