Struts2,我们在最开始学习SSH的时候就接触了,但是真正懂的又有多少呢?最近在学习OA,又把这部分的知识好好总结了一下。今天这篇文章,我们就先来说说SSH之Struts2。
我们还是以搭建SSH环境为主,今天这篇博客也从搭建SSH中的Struts2入手,顺便说说在没有整合的时候Struts2是如何工作的。好了,现在开始进入正题。
我们在学习这些框架的时候,大都按照这样一个思路去配置:jar包和配置文件。所以配置Struts2我们也按照这样一个思路去配置。首先需要的jar包
下面大致来介绍一下这几个jar包的作用。
1、commons-fileupload-1.2.1.jar:Strtus文件的上传下载;
2、commons-io-1.3.2.jar:文件下载所要用的
3、freemarker-2.3.15.jar:表现层框架,定义了Struts2的可视组件主题;
4、ognl-2.7.3.jar:OGNL表达式语言,Struts2支持该EL
5、struts2-core-2.1.8.1.jar:Strtus2的核心库
6、xwork-core-2.1.6.jar:webwork的核心库
所需要的配置文件:
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">
<display-name></display-name>
// 配置Struts2的核心的过滤器
<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>
该配置文件的作用:
我们可以首先看下上面的代码,首先要注意的是<filter-mapping>中的<filter-name>必须跟<filter>中的<filter-name>保持一致。这些东西是在你发出请求的时候就执行的,比如你配置的那个“/*”,意思就是无论你发出什么请求,都要走Struts2的拦截器,通过拦截器来查找你所要请求的东西,并作出响应。所以Strtus2的配置文件web.xml可以把它想象成一个容器,它可以配置默认页面,就是项目部署之后输入项目名显示的页面还可以配置Strtus的过滤器(或者Servlet,用Struts必须配),后面其他的过滤器也是配置在这里面,比如Spring的OpenSessionInView,做权限控制访问的过滤器等等。
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>
//配置为开发模式
//如果不配置为开发模式,我必须要重新发布重新运行才能看到效果 ,当我把它改成开发模式之后,它会立即生效
<constant name="struts.devMode" value="true" />
//把扩展名配置为action
//这个name去哪里找?
//在struts2的jar包里,struts2-core-2.1.8.1.jar这个jar包里面的第一个包 org.apache.struts2有个default.properties文件,这个文件就有我们默认的文件的值,默认常量都在这里。
//Ctrl+f,搜索action,, 会搜到这样一条语句struts.action.extension=action,, 所以我们name里面的值就为struts.action.extension
<constant name="struts.action.extension" value="action" />
//把主题配置为simple 设置这个主题的目的是为了不要多生成东西。
//继续上面那个文件,搜xhtml,搜到struts.ui.theme=xhtml,则配置的name里面写struts.ui.theme
<constant name="struts.ui.theme" value="simple" />
<package name="default" namespace="/" extends="struts-default">
//配置测试用的Action,未与Spring整合,class属性写类的全名
// 当Struts2与Spring整合后,class属性可以写bean的名称
<action name="test" class="testAction">
<result name="success">/test.jsp</result>
</action>
</package>
<!-- Add packages here -->
</struts>
该配置文件的作用:
struts.xml是整个Strtus2框架的核心,在该配置文件内定义了Struts2的系列Action,定义Action时指定该Action的实现类,并定义该Action处理结果与视图资源之间的映射关系。比如我们上面的struts.xml,在<package>标签中定义了<action>,就是当execute方法返回success字符串时,返回test.jsp页面。所以在struts.xml中配置了返回的页面(这一点也是其和springMVC的区别)。
更通俗一点说,web.xml是整个项目整个应用的命脉;struts.xml是struts2的命脉。可以没有struts.xml但是不能没有web.xml。
*******************************此处应有分割线********************************************************
好了,下面我们来简单进行一个Struts2的小例子。
1、新建一个action类TestAction
package cn.itcast.oa.test;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("------------>执行TestAction.execite()成功!");
return "success";
}
}
2、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>
//配置Struts2的核心的过滤器
<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>
3、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>
//配置为开发模式
//如果不配置为开发模式,我必须要重新发布重新运行才能看到效果 ,当我把它改成开发模式之后,它会立即生效
<constant name="struts.devMode" value="true" />
//把扩展名配置为action
//这个name去哪里找?
//在struts2的jar包里,struts2-core-2.1.8.1.jar这个jar包里面的第一个包 org.apache.struts2有个default.properties文件,这个文件就有我们默认的文件的值,默认常量都在这里。
//Ctrl+f,搜索action,, 会搜到这样一条语句struts.action.extension=action,, 所以我们name里面的值就为struts.action.extension
<constant name="struts.action.extension" value="action" />
<!-- 把主题配置为simple 设置这个主题的目的是为了不要多生成东西。-->
<!-- 继续上面那个文件,搜xhtml,搜到struts.ui.theme=xhtml,则配置的name里面写struts.ui.theme -->
<constant name="struts.ui.theme" value="simple" />
<package name="default" namespace="/" extends="struts-default">
//配置测试用的action,还未与spring整合,class属性写类的全名
<action name="test" class="cn.itcast.oa.test.TestAction">
<result name="success">/test.jsp</result>
</action>
</package>
</struts>
Struts2框架中的Action必须实现execute方法吗?下面说一下Action里面的execute方法。大家注意一下,我们上面的TestAction类是继承ActionSupport的,那么确切的说就是重写了execute方法,ActionSupport里的默认实现就是返回“success”,因此你可以不实现execute方法,只要你的struts.xml里有success对应的result即可。
与此同时,如果你的Action类没有继承ActionSupport,而你又没有在struts.xml中对应<action>标签中用method属性执行你自己的方法的话,默认就要找execute方法,这时是必须实现execute方法的。否则Struts2会因为找不到对应的方法而报错。当然也有不继承ActionSupport的,但是大部分情况下都是继承ActionSupport的,比如输入验证、文件上传等功能就必须继承,还有不管你写没写execute方法,还是可以用<action>标签的method属性指定其他方法的。
好了,关于Struts2的博客我们就先总结到这里,下篇文章我们来介绍Hibernate。在接下来的文章中我们会陆续介绍SSH以及SSH的整合。