[关闭]
@liayun 2016-09-30T14:47:44.000000Z 字数 5755 阅读 1647

Struts2框架入门

Struts2框架学习


Struts2简介

Struts2是在WebWork2基础上发展而来的。Struts2和Struts1一样,也都是属于MVC框架。不过有一点大家需要注意的是:虽然Struts2和Struts1在名字上差别不大,但Struts2应用的代码编写风格与Struts1几乎可以说是不一样的。那么既然有了Struts1,为何还要推出Struts2呢?主要是因为Struts2有以下优点:

搭建Struts2开发环境

搭建Struts2环境时,我们一般需要以下几个步骤:

搭建Struts2开发环境——开发Struts2应用所依赖的jar

到官网http://struts.apache.org/下载struts-2.x.x-all.zip,我本人所下载的是struts-2.3.24-all.zip,目前最新版为2.5.2。下载完后解压文件,开发Struts2应用需要依赖的jar文件在解压目录的lib文件夹下,不同的应用需要的Jar包是不同的。下面给出了开发Struts2程序最少需要的Jar。

但要开发一个Struts2应用程序,除了这些Jar包之外,还需要如下Jar包,否则就会报错。

搭建Struts2开发环境——Struts2的配置文件

Struts2默认的配置文件为struts.xml ,StrutsPrepareAndExecuteFilter过滤器在初始化时将会在WEB-INF/classes下寻找该文件,该文件的配置模版如下:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. </struts>

当然了,我们还可以参考Struts2框架提供给我们开发人员的例子中的struts.xml配置文件,例如可在struts-2.3.24-all\struts-2.3.24\apps\struts2-blank\WEB-INF\classes目录下查找到struts.xml配置文件。

搭建Struts2开发环境——Struts2的启动配置web.xml

在Struts1.x中, Struts框架是通过Servlet启动的。在Struts2中,Struts框架是通过Filter启动的。Struts2框架在web.xml中的配置如下:

  1. <filter>
  2. <filter-name>struts2</filter-name>
  3. <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  4. <!--
  5. 自从Struts2.1.3以后,下面的FilterDiapatcher已经标注为过时
  6. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  7. -->
  8. </filter>
  9. <filter-mapping>
  10. <filter-name>struts2</filter-name>
  11. <url-pattern>/*</url-pattern>
  12. </filter-mapping>

在StrutsPrepareAndExecuteFilter的init()方法中将会读取类路径下默认的配置文件struts.xml完成初始化操作。
注意:Struts2读取到struts.xml的内容后,是将内容封装进javabean对象并存放在内存中,以后用户的每次请求处理将使用内存中的数据,而不是每次请求都读取struts.xml文件。Struts1也是一样的
同理,初学者是不知道怎么向web.xml文件中加入Struts2 MVC框架的启动配置代码的,但我们依然可以参考Struts2框架提供给我们开发人员的例子中的web.xml文件。例如可在struts-2.3.24-all\struts-2.3.24\apps\struts2-blank\WEB-INF目录下查找到web.xml文件,看看别人是怎么写的。

第一个Struts2应用

这是我们的第一个Struts2框架的应用,所以要用点心了。我们先编写Struts2默认的配置文件(struts.xml)中的内容(StrutsPrepareAndExecuteFilter过滤器在初始化时将会在WEB-INF/classes下寻找该文件),如:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4. "http://struts.apache.org/dtds/struts-2.3.dtd">
  5. <struts>
  6. <package name="itcast" namespace="/test" extends="struts-default">
  7. <action name="helloworld" class="cn.itcast.action.HelloWorldAction">
  8. <result name="success">/WEB-INF/page/hello.jsp</result>
  9. </action>
  10. </package>
  11. </struts>

下面我们就来详细解释一下这段代码:

  1. <package name="itcast" namespace="/test" extends="struts-default">
  2. <action name="helloworld" class="cn.itcast.action.HelloWorldAction">
  3. <result name="success">/WEB-INF/page/hello.jsp</result>
  4. </action>
  5. </package>

上面这段代码也即在struts.xml文件中配置包。在Struts2框架中使用包来管理Action,包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的Action。在实际应用中,我们应该把一组业务功能相关的Action放在同一个包下。
配置包时必须指定name属性,该name属性值可以任意取名,但在整个项目中必须唯一,它不对应java类,如果其他包要继承该包,必须通过该属性进行引用。
包的namespace属性用于定义该包的命名空间。命名空间作为访问该包下Action的路径的一部分,该属性可以不配置,对本例而言,如果不指定该属性,默认的命名空间为“”(空字符串)。命名空间对于Struts2来说有减少重复代码的作用。例如,Struts1的配置代码有可能是这样的:

  1. <action path="/control/center/main" forward="/WEB-INF/page/controlcenter/default.jsp">
  2. <action path="/control/center/top" forward="/WEB-INF/page/controlcenter/top.jsp">
  3. <action path="/control/center/left" forward="/WEB-INF/page/controlcenter/menu.jsp">

这样就会有很多重复的代码,而是使用Struts2的命名空间属性就可减少重复的代码,Struts2的配置代码:

  1. <package name="itcast" namespace="/control/center" extends="struts-default">
  2. <action name="main" class="...." method="execute">
  3. <result name="success">/WEB-INF/page/controlcenter/default.jsp</result>
  4. </action>
  5. <action name="top" class="...." method="execute">
  6. <result name="success">/WEB-INF/page/controlcenter/top.jsp</result>
  7. </action>
  8. </package>

通常每个包都应该继承struts-default包, struts-default包是由Struts2内置的,它定义了Struts2内部的众多拦截器和Result类型。Struts2很多核心的功能都是通过这些内置的拦截器实现的。如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。当包继承了struts-default包才能使用Struts2提供的这些功能。 struts-default包是在struts2-core-2.x.x.jar文件中的struts-default.xml中定义的。struts-default.xml也是Struts2默认配置文件。 Struts2每次都会自动加载struts-default.xml文件。
提示:在碰到编写Struts2默认的配置文件(struts.xml)中的内容时,标签无提示符这个问题时可参考我的笔记在编写Struts2框架的配置文件时,标签无提示符的解决办法
接下来,我们就要在cn.itcast.action包中创建Action——HelloWorldAction了。

  1. public class HelloWorldAction {
  2. private String message;
  3. public String getMessage() {
  4. return message;
  5. }
  6. public void setMessage(String message) {
  7. this.message = message;
  8. }
  9. public String execute() {
  10. this.message = "我的第一个struts2应用";
  11. return "success";
  12. }
  13. }

最后,在WEB-INF/page/目录下创建一个jsp页面——hello.jsp,用于显示内容。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>第一个struts2应用</title>
  8. </head>
  9. <body>
  10. ${message }<br/>
  11. </body>
  12. </html>

提示:可以使用EL表达式访问Action中的属性。
这样,当在浏览器中输入URL地址,如http://localhost:8080/Struts2/test/helloworld.actionhttp://localhost:8080/Struts2/test/helloworld时,就会看到这样的结果:
插图啊

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注