struts2框架的简单搭建

之前一直用的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方法

猜你喜欢

转载自surongyao-hotmail-com.iteye.com/blog/1738720
今日推荐