从struts 1.x升级到 struts 2(一) 第一个程序
来源:互联网 发布:广州淘宝商家 编辑:程序博客网 时间:2024/06/05 06:59
struts 2也出来很长时间了,但仍有很多人仍然在使用struts 1.x,这也是写本文的原因,本文的内容主要是当年我升级到struts 2时的笔记。因此,本文一开始的示例程序会带有比较浓重的struts 1的风格,而非典型的struts2 风格。所以,如果是新人,想学struts 2的话,不建议看本文,就如同在学习JDK 6时,没有必要先去弄本JDK5的教材一样。
本例使用Eclipse + Lomboz完成,网页文件的主目录为WebContent,项目名为tutorial。
本着越简单越好的原则,本项目中包含以下几个文件:
另外,需要引用strus2中的如下类库:
- commons-logging-1.0.4.jar
- freemarker-2.3.8.jar
- ognl-2.6.11.jar
- struts2-core-2.0.9.jar
- xwork-2.0.4.jar
web.xml
<web-app id="WebApp_9" 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">
<display-name>Tutorial</display-name>
<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>
上面的代码中,<filter>及<filter-mapping>是struts2需要的配置。另外,将默认的首页设为login.jsp
在此将映射模板设为了/*,表示一切以.action结尾的请求均由struts2来处理。
login.jsp
pageEncoding="GB18030"%>
<html>
<head>
<title>Login</title>
</head>
<body>
<form name="form1" action="/tutorial/example/Login.action" method="post">
user name: <input type="text" name="UserName" /> <br />
password: <input type="password" name="Password" /> <br />
<input type="submit" value="Submit" />
</form>
</body>
</html>
界面上就两个输入框和一个提交按钮。
success.jsp
pageEncoding="GB18030"%>
<html>
<head>
<title>Login Success</title>
</head>
<body>
<p>user name: <%=request.getAttribute("UserName") %></p>
<p>password: <%=request.getAttribute("Password") %></p>
</body>
</html>
error.jsp
pageEncoding="GB18030"%>
<html>
<head>
<title>Login Failed</title>
</head>
<body>
<p>Login failed!</p>
</body>
</html>
LoginAction.java
import javax.servlet.http.HttpServletRequest;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
public class LoginAction extends ActionSupport implements ServletRequestAware
{
private HttpServletRequest request;
public void setServletRequest(HttpServletRequest request)
{
this.request = request;
}
public String execute() throws Exception
{
String user_name = this.request.getParameter("UserName");
String password = this.request.getParameter("Password");
if(user_name.equals("lld") && password.equals("lld"))
{
this.request.setAttribute("UserName", user_name);
this.request.setAttribute("Password", password);
return "success";
}else
return "failed";
}
}
该servlet类从页面接受用户名和口令,如果两个都是“lld”,则认为是正确,否则登录失败。
注意,如果使用struts2,所有的action类都要是com.opensymphony.xwork2.ActionSupport继承类,但这里还实现了org.apache.struts2.interceptor.ServletRequestAware接口,因为出于使用struts 1.x版本的习惯,我需要在这里使用request对象,只要实现一个setServletRequest方法即可,struts2会自动调用该方法,将request作为参数传入。这并不是struts推荐的方式,在以后的章节中我会继续讲如何使用struts提供的功能完成使用request对象的功能。
struts.xml
该文件位于src目录下<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<include file="example.xml" />
</struts>
该配置文件将example.xml包括进来,我在example.xml定义了MVC映射,在struts.xml中可包含多个MVC映射文件。struts.xml为固定文件名,不能更改。
example.xml
该文件位于src目录下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="example" namespace="/example" extends="struts-default">
<action name="Login" class="example.LoginAction">
<result name="success">/success.jsp</result>
<result name="failed">/error.jsp</result>
</action>
</package>
</struts>
这里需要详细解释一下,package中定义了一系列的映射,我们可以把一组相关的映射放到一个package中,其name属性可为任意值,只是标识该package的名称,另外,该package的名称与Java类的package没有任何关系。
package的namespace属性需要与提交的请求名吻合,例如在login.jsp中,我将form.action设为了/tutorial/example/Login.action,其中/tutorial为根目录,而后面的/example则需要与该package的namespace属性吻合。
package的extends属性为“struts-default”,一般情况下不需要修改该值。
在example.xml中,我只定义了一个映射,其name属性值为Login,与login.jsp中的Login.action对应。在struts2中,默认情况下以.action结尾的提交请求均由struts2处理。
action.class属性定义了servlet处理类的全路径名。
action的两个子结点表示当action.execute()方法返回值为“success”时,跳转到/success.jsp页面,而返回值为“failed”时,则跳转到error.jsp,而如果在Servlet类中返回的是预定义静态变量SUCCESS,则可以省略name属性。
- 从struts 1.x升级到 struts 2(一) 第一个程序
- 从struts 1.x升级到 struts 2(二) POJO
- 从struts 1.x升级到 struts 2(三) OGNL
- 第一个Struts 2程序 !
- 第一个struts程序
- 第一个Struts程序
- 第一个struts 程序
- 第一个Struts程序
- 我的第一个Struts(1.x)
- struts第三篇:第一个struts程序
- 第一个struts@程序 _01
- Struts 1.x 工作流程 附第一个Struts 1.x实例讲解
- struts1.x心得2--第一个struts案例分析
- 配置struts开发环境,写第一个struts程序
- Struts-第一个Struts应用
- 终于调试出第一个Struts程序!!!
- 用MyEclipse开发第一个Struts程序
- 第一个Struts程序(Helloworld)
- 4.4.5 接受请求
- 4.4.6 接收数据
- 使用存储过程的好处
- 囧,现在才只QQ有远程控制
- 开博之前
- 从struts 1.x升级到 struts 2(一) 第一个程序
- 什么是触发器
- 重返博客
- WORD中经常遇到的一个图片插入问题
- XML语法概述
- [转贴]常上高速的朋友必看一个高速交警的忠告
- Dll中开辟内存在外的释放问题
- 项目改版随想
- TCPMP中的Splitter机制