Struts2是一个javaee框架,主要作用是处理前后台之间的数据交互。struts2是取代jsp+servlet+javabean模式中的servlet的,但是它比servlet功能更强,有更多的功能封装。
Struts2是在WebWork2基础发展而来的。和struts1一样,Struts2也属于MVC框架。值得注意的是:尽管Struts2和struts1在名字上的差别不是很大,但Struts2和struts1在代码编写风格上几乎是不一样的。那么既然有了struts1,为何还要推出struts2。主要是因为struts2有以下优点:
1 > 在软件设计上Struts2没有像struts1那样跟ServletAPI和strutsAPI有着紧密的耦合,Struts2的应用可以不依赖于ServletAPI和strutsAPI。 Struts2的这种设计属于无侵入式设计,而Struts1却属于侵入式设计。
2> Struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
3> Strut2提供了类型转换器,我们可以把特殊的请求参数转换成需要的类型。在Struts1中,如果我们要实现同样的功能,就必须向Struts1的底层实现BeanUtil注册类型转换器才行。
4> Struts2提供支持多种表现层技术,如:JSP、freeMarker、Velocity等。
5> Struts2的输入校验可以对指定方法进行校验,解决了Struts1的不足。
6> 提供了全局范围、包范围和Action范围的国际化资源文件管理实现。
Struts2环境的搭建:
1.先去下载struts2(这里用的是2.5版本)的jar包http://struts.apache.org/download.cgi#struts252
2.在IDE工具中(MYEclipse/IDEA等)创建一个web项目,将下列jar(这是搭建一个struts2.5版本环境所需的最少jar包,其他版本可能稍有不同)放到WEB-INF/lib文件夹下
3.在src下创建struts.xml文件,其中代码如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
</struts>
4.在struts1.x中,struts框架是通过Servlet启动的。在struts2中,struts框架是通过Filter启动的。所以在web.xml中配置一个filter,代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>testStruts2</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.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>
5.此时,将项目部署到tomcat服务器(其他服务器也可),启动tomcat,如果控制台没有报错,则说明环境搭好了。
6.接下来做一个struts2的简单应用,在src下创建一个类,代码如下
package cn.purple.struts.action;
public class TestAction {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String testStruts2() {
this.message = "我的第一个struts2应用";
return "success";
}
}
其中私有属性message主要是用来传递数据的,它可以拿到前端的同名变量的数据,也可以在响应请求时将后台的数据带到前台,但是必须要实现getset方法。方法testStruts2()是请求访问时处理业务的,返回值必须是String。
7.在struts.xml文件中的<struts>标签下新增如下配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<package name="testStu" namespace="/test" extends="struts-default">
<action name="testAction" class="cn.purple.struts.action.TestAction" method="testStruts2">
<result name="success">/WEB-INF/page/test.jsp</result>
</action>
</package>
</struts>
<package>的name可以随意命名(最好有意义),这个名字主要是在别的地方引用的时候使用的。namespace也是随意命名
(最好有意义),但是必须以/开头,也可以多加/(如/test/abc/def),namespace主要是为了给action分批,比如一般给一个项目的不同模块配置不同的<package>,命名不同的namespace,同时namespace是组成url的一部分。
一个<package>下可以有多个<action>。<action>的name也是随意命名(最好有意义),action的name也是组成url的一部分,上述配置的意思是,当地址栏中访问的url为127.0.0.1:8080/testStruts2/test/testAction(127.0.0.1:8080表示访问本机的8080端口,/testStruts2为项目创建时设置的web应用名称,/test为namespace的值,/testAction为action的name的值)时,请求就会被定位到cn.purple.struts.action.TestAction.java类的testStruts2方法。
一个<action>下可以有多个<result>。<result>的name是用来匹配所属<action>的方法返回值的,<result>的值是指定请求被响应后要显示的页面
的url。上述代码中的<result>的意思是,当testStruts2()方法的返回值为“success”时则显示/WEB-INF/page/test.jsp页面。
8.在/WEB-INF下创建page文件夹,在此文件夹下创建test.jsp,在test.jsp页面的<body>标签中用${message}就可以接收到testStruts2()方法返回的
值“我的第一个struts2应用”。
9.将项目部署后,启动服务器,在地址栏中输入127.0.0.1:8080/testStruts2/test/testAction,查看效果。