之前一直用的struts1,最近换了工作接触了struts2和spring mvc,这里先介绍一下我自己搭建的struts2,网上找过一些资料,但是很多都是windows平台下面用myeclipse插件的方法,公司电脑是ubuntu,我只有最基本的eclipse,其实用不用插件都一样。就是把相关的jar包导入,配置文件写写就ok了。
废话不说了,开始将过程。
一.eclipse工具的准备
ubuntu下安装eclipse很简单,用aptitude命令就行,安装好之后,自己安装一些必要的支持web开发的插件,在help-install new software
二.新建一个web项目
比如就叫testStruts2,新建好的目录结构如下:
/testStruts2
/testStruts2/src
/testStruts2/src/sury/test/ssh2/action/LoginAction.java
/testStruts2/src/struts.xml (需要手动新建)
/testStruts2/WebContent
/testStruts2/WebContent/WEB-INF
/testStruts2/WebContent/login.jsp (需要手动新建)
/testStruts2/WebContent/welcome.jsp (需要手动新建)
/testStruts2/WebContent/WEB-INF/classes
/testStruts2/WebContent/WEB-INF/lib
/testStruts2/WebContent/WEB-INF/web.xml (需要手动新建)
基本的web项目目录结构就是这样,没有的自己手动添加一下,如果用myeclipse这些应该都是可以自动生成的。src目录下是源码,struts.xml要放在这下面,我测试过将struts.xml改名成struts-default.xml也可以,为什么我在研究,这里只要有这个文件就行。WebContent目录下面是用于部署到tomcat里的,src下面的东西都会被编译到WebContent/WEB-INF/classes这下面,/WebContent/login.jsp这个用来做登录页面,WebContent/welcome.jsp这个做登录成功的跳转页面,登录失败页面我省略了。
/WEB-INF/lib下面需要struts相关的jar包,要自己导入
freemarker-2.3.16.jar
ognl-3.0.jar
javassist-3.7.ga.jar
struts2-core-2.2.1.1.jar
xstream-1.3.1.jar
xwork-core-2.2.1.1.jar
以上包都需要
commons-pool-1.3.jar
commons-io-1.3.2.jar
commons-fileupload-1.2.1.jar
commons-dbcp-1.2.2.jar
commons-codec-1.3.jar
我的目录下都有,不知道是不是必须的,建议直接网上下载全部struts2 jar包直接扔进去
三.配置文件
1.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">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="sury.test.ssh2.action.LoginAction" method="execute">
<result name="success">/welcome.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>
</struts>
3.login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Login</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
<s:form action="/login" method="post">
<s:label value="系统登陆"></s:label>
<s:textfield name="username" label="账号" />
<s:password name="password" label="密码" />
<s:submit value="登录" />
</s:form>
</body>
</html>
4.welcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'welcome.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
欢迎${username }!
</body>
</html>
5.action
package sury.test.ssh2.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {//该类继承了ActionSupport类。这样就可以直接使用SUCCESS, LOGIN等变量和重写execute等方法
private static final long serialVersionUID = 1L;
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 {
if("admin".equals(username) && "pwd".equals(password))//如果登录的用户名=haha并且密码=hehe,就返回SUCCESS;否则,返回LOGIN
return SUCCESS; //这里SUCCESS和LOGIN都是大写,是常量对应的字符串是小写的
return LOGIN;
}
}
四.部署测试
页面输入localhost:port/testStruts2/
五.小结
struts配置主要是action的配置,附上一个连接,讲解action比较好的
http://blog.csdn.net/ldl420783321/article/details/7546607
还有一个讲解struts2配置文件比较详细的
http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html
1.struts配置动态方法action
动态方法调用是在action的名字中使用感叹号(!)来标识要调用的方法名,其语法格
式为 actionName!methodName.action
2.默认action
如果请求一个不存在的action,结果将是HTTP404错误。在Struts2中,可以指定一个默认的action,如果一个请求没有其他的action匹配,那么默认的action将被执行。
默认的action使用default-action-ref元素来声明,如下所示:
<default-action-ref name="error"></default-action-ref>
注意:每个包中都可以有它自己默认的action,但是每一个名称空间应该只有一个默认action。如果具有相同名称空间的多个包中都声明了默认action,那么哪一个action才是默认的将无法保证。
注意:默认action只对action的访问有效。如果你访问一个非action的资源,例如/user.jsp,而该页面不存在,这时仍会看到HTTP404错误。如果想为整个Web应用程序指定默认页面,需要在web.xml文件中对HTTP404错误指定相应的错误处理页面。
3.通配符映射
随着Web应用程序的增加,所需的Action也会更多,从而导致大量的action映射,使用通配符可以减少action配置的数量,使一些具有类似行为的Action或者Action方法可以使用通用的样式来配置。
通配符即星号(*),用于匹配0个或多个字符,在配置action时,可以在action元素的name属性中使用星号(*)来匹配任意的字符。
以下是在action映射中使用通配符:
<action name="news*"
class="org.struts2.lesson05.News{1}Action">
<result name="success">/WEB-INF/News/{1}.jsp</result>
</action>
我们在action元素的name属性中使用了通配符(*),允许这个映射匹配所有以/news开始的URL,例如/newsAdd,/newsEdit,/newsDelete,但是,如果请求的是/newsEdit/add,那么这个映射就不会被匹配。
在上面,有一个特殊的记号{1},这是作为占位符使用的,它将被通配符所匹配的值替换,例如访问/newsEdit,通配符(*)匹配的部分是Edit,那么,这个值将替换{1},最终调用的类是org.struts2.lesson05.NewsEditAction,Action
执行成功后导向的结果页面是/WEB-INF/News/Edit.jsp。
在action映射和action结果中,通配符匹配的值可以用记号{N}来访问,N是从1到9的数字,指出替换的是哪一个通配符匹配的值。整个请求URL可以用记号{0}来访问。例如如下的action映射:
<action name="*_*" class="org.struts2.lesson05.{1}Action"
method="{2}">
<result>/WEB-INF/News/{0}.jsp</result>
</action>
当访问/News_delete时,name属性中的第一个”*”匹配News,第二个”*”匹配delete,class属性中使用的记号是{1},所以被News所替换,method属性中使用的记号是{2},于是被delete所替换。结果映射中使用的记号是{0},于是被整个URL替换,即News_delete所替换。整个替换后的结果是:当请求/News_delete时,框架调用NewsAction实例的delete方法对请求进行处理。执行成功后,请求被导向到/WEB-INF/News/News_delete.jsp页面。
通配符方法设置的另一种常见方式是使用后缀通配符,即将”*”放在action名字的后面,在”*”和名字前缀之间使用一个特殊字符作为分隔,常用的特殊字符是下划线(_),当然也可以使用其他字符。例如:
<action name="News_*"
class="org.struts2.lesson05.NewsAction" method="{1}">
<result>/WEB-INF/News/{0}.jsp</result>
</action>
当请求/News_delete时,调用的是NewsAction实例的delete方法,当请求/News_edit的时候,调用的是NewsAction实例的edit方法
struts2框架的简单搭建
猜你喜欢
转载自surongyao-hotmail-com.iteye.com/blog/1738720
今日推荐
周排行