【SSH】之Struts2

    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的整合。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值