首页 > 代码库 > Struts2 学习(一)

Struts2 学习(一)

一、搭建Struts2开发环境:

1),下载struts2所需jar包:

http://struts.apache.org/download.cgi#struts2014  下载struts-2.x.x-all.zip,下载完后解压文件,开发struts2应用需要依赖的jar文件在解压目录的lib文件夹下。不同的应用需要的JAR包是不同的。下面给出了开发Struts 2程序最少需要的JAR

struts2-core-2.1.8.1.jar  :Struts 2框架的核心类库


xwork-core-2.1.6.jar  :XWork类库,Struts 2在其上构建


ognl-2.7.3.jar  :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的

属性


freemarker-2.3.15.jar :Struts 2UI标签的模板使用FreeMarker

编写


commons-logging-1.1.x.jar :ASF出品的日志包,Struts 2框架使用这个日志包来支持Log4JJDK 

1.4+的日志记录。


commons-fileupload-1.2.1.jar 文件上传组件,2.1.6版本后需要加入此文件

commons-io-1.3.2.jar,上传文件依赖的jar


2),创建web工程,加入struts2所需jar包;

3),在工程web.xml中配置struts2的filter,(struts2是基于filter的)

代码:

<?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>StrutsPrepareAndExecuteFilter</filter-name>
     <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
   </filter>
   
   <filter-mapping>
     <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>

</web-app>

这样,我们的每个请求都会走struts2的过滤器;


4)创建jsp页面,在里面加入一个action路径:

<a href="http://www.mamicode.com/${pageContext.request.contextPath}/primer/helloWorldAction.action">helloWorld</a><br>
<!--点击这个超链接会走struts2-->


5)struts2中提供了一个Action接口,struts2收到请求之后,默认都会执行Action接口的execute()方法,所以我们需要实现Action接口,让struts2执行我们自己的execute()方法;在struts2中,由于struts2的Action接口有几个默认实现类,所以我们需要继承默认实现类ActionSupport即可;

代码:

import com.opensymphony.xwork2.ActionSupport;

/**
 * 在struts2中所有的action都要实现Action接口
 */

@SuppressWarnings("serial")
public class HelloworldAction  extends  ActionSupport {
//public class HelloworldAction  implements Action {
	public String execute() throws Exception {
		System.out.println("HelloworldAction");
		return "success";
	}
}

6)创建struts.xml文件,在里面配置HelloworldAction和请求连接相关联;

struts2.xml房子工程src目录下;

代码:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
	"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
   <!--请求的路径 /primer/helloWorldAction.action-->
   <!-- 
       package:struts2框架使用包来管理action,这里的包相当于java中包
         * name:包的名称,唯一的,主要作用用于继承
         * namespace:命名空间,相当于房间号,唯一的
         * extends:struts2中所有的包都要继承默认的包struts-default
            * 这个默认的包存在struts-default.xml文件中
                     <package name="struts-default" abstract="true">
            * 继承的原因,要执行拦截器,完成struts2相关的功能
       
       action标签:配置struts2框架要访问的action
            * name:struts2框架要访问的action,在同一个包中唯一
            * class:要访问的action的完整类路径
            
       result:处理action的execute方法的返回结果
          * name:结果的唯一标志,该值必须和action中execute方法的返回值对应
          * result标签的文本值;要转发和重定向的路径
	       public String execute() throws Exception {
			 System.out.println("HelloworldAction");
			 return "success";
		   }     
   -->  
  <package name="primer" namespace="/primer" extends="struts-default">
     
     <!--配置当action找不到的情况下,执行默认的action -->
     <default-action-ref name="helloWorldAction"/>
     
     <action name="helloWorldAction" class="cn.yujian.primer.HelloworldAction">
         <result name="success">/primer/success.jsp</result>
     </action>
     
     <!-- 
          * 如果没有为action指定class,则默认的class是com.opensymphony.xwork2.ActionSupport
          * 如果没有指定方法,则默认的方式 exectue
          * result标签中没有指定name属性,则默认的name属性是success  
      -->
     <action name="actionNoClass">
       <result>/primer/success.jsp</result>
     </action>
  </package>
</struts>

目前为止,就可以将struts2跑起来了,当点击jsp中的连接时,就会看到HelloworldAction中的execute()方法执行;

Struts2 学习(一)