Struts2

一、Struts2入门

介绍:Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

Struts2下载

官网地址:http://struts.apache.org/
也可在官网下载以前的版本,我安装的是2.3.24的版本,好像这个版本比较稳定
2.3.24版本,点击直接下载压缩包

下载完成之后解压到安装的目录

在这里插入图片描述

  • apps:该文件夹用于存放Struts2官网的示例程序
  • docs:用于存放官方提供的Struts2文档,包括Struts2快速入门以及API文档
  • lib:该文件夹用于存放Struts2的核心类库以及第三方插件类库
  • src:该文件存放Struts2的源代码

Struts2项目示例

1.首先创建一个动态的web工程,在WEB-INF的lib目录下导入Struts2开发所需jar包

在这里插入图片描述
jar包可在Struts2的示例程序中找到
在这里插入图片描述
在示例程序中任选其1进入。(若war文件打不开,将文件名后缀改为zip即可,或者,打开一个压缩包,在压缩软件的界面中找到示例程序所在位置)
在这里插入图片描述
点击WEB-INF
在这里插入图片描述
点击lib
在这里插入图片描述
以下就是创建Struts2项目所需jar包,全选复制到工程的 WEB-INF/lib 下即可
在这里插入图片描述
下图是Struts2各个常用jar包的说明
在这里插入图片描述

2.创建Action

1).在src目录下创建包,来存放java代码,新建一个类,这个类需要有一个方法,返回字符串;

public class HelloAction{
	public String execute() {
		return "ok";
	}
}
action一共有三种创建方式,以下两种方式如下:
  • 创建一个类,实现Action接口,重写execute()方法
import com.opensymphony.xwork2.Action;
public class HelloAction2 implements Action {
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}
  • 创建一个类继承ActionSupport
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction3 extends ActionSupport {
	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
}
execute()方法的返回值SUCCESS是Action接口中定义的常量

String SUCCESS = “success”; //默认是 SUCCESS 类型
String NONE = “none”;
String ERROR = “error”;
String INPUT = “input”;
String LOGIN = “login”;
在这里插入图片描述
当然我们可以自定义返回值的内容。

2).配置 action的访问路径

  • 创建struts2的核心配置文件,名字固定为struts.xml,位置在src目录下
  • 在struts.xml中引入dtd约束,(同样可以在struts2示例程序中找到)
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
	"http://struts.apache.org/dtds/struts-2.3.dtd" >
3.配置action
<struts>
	<package name="default" extends="struts-default" namespace="/">
		<action name="hello" class="ydt.web.myAction.HelloAction">
			<result name="ok">/success.jsp</result>
		</action>
	</package>
</struts>
package标签:

package标签有三个属性

  • name:

name属性值根功能本身没有关系的, 在一个配置文件中可以写多个package标签,name属性值不能相同的

  • extends:

属性值固定的,struts-default 写了这个属性之后,在package里面配置的类才具有action功能

  • namespace:

namespace属性值和action标签里面的name属性值构成访问路径

  • namespace="/",访问地址为/hello.action
  • namespace="/big",访问地址为/big/hello.action

可以省略,默认为 " / "

action标签:

action标签配置action的访问路径

action标签属性:

  • name

namespace属性值和action标签里面的name属性值构成访问路径
在package标签里面写多个action标签,但是action的name属性值不能相同的

  • class

action的全类名

  • method

比如在action里面默认执行的方法execute方法,但是在action里面写其他的方法
让action里面多个方法执行,使用method进行配置

result标签:

根据action的方法返回值,配置到不同的路径里面,标签里的路径即是跳转的页面

result标签属性

  • name属性

必须和action类execute()方法的返回值一样

  • type属性

配置如何到路径中(转发或者重定向)
type属性默认值 做转发操作

在struts2源代码中的struts-default.xml文件中,找到标签,所有的result-type都在里面定义了。代码如下:

<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
<!-- Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->
<result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>

dispatcher:转发
redirect:重定向
redirectAction:重定向到一个action(也可以通过redirect直接实现)
chain:转发到一个action

以上是type属性的几个常见属性值

4.配置struts2过滤器

在web.xml中配置,如下代码(在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>
  1. 编写跳转页面,文件名为result标签中的名字,随便写几句话
  2. 启动tomcat服务器
  3. 在浏览器地址栏输入:
    http://localhost:8080(tomcat端口号)/demo1(工程名)/hello.action(struts.xml配置文件中action标签的name属性值)
    /hello.actiion的action可以省略,但在有些浏览器不行,所以建议写上

运行成功!

在这里插入图片描述

struts2执行过程,图源传智播客

在这里插入图片描述

struts2常量配置

struts2框架,帮我们实现一部分功能,struts2里面有常量,在常量里面封装一部分功能
struts2默认的常量位置:
在这里插入图片描述

修改struts2默认常量值常用方式:在struts.xml配置文件中进行配置,用constant标签,name属性为常量名,value为常量值
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

表单提交数据到action里面,在action可以获取表单提交数据,

表单提交数据有中文,有乱码问题,解决:

  • post提交,可直接配置struts.xml配置文件如上述代码
  • get提交,需要自己手写编码转换

所以,如果在action获取表单通过post方式提交中文,中文乱码问题struts2解决了,不需要自己处理问题

分模块开发

单独写配置文件,把配置文件引入到struts核心配置文件中

<include file="cn/itcast/action/hello.xml"></include>

cn/itcast/action是包名,如果hello.xml也在在src目录下,可直接写:

<include file="hello.xml"></include>

访问action的方法

有三种方式实现

第一种、使用action标签的method属性,在这个属性里面写执行的action的方法

  1. 创建action,创建多个方法:
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
	public String add() {
		return "add";
	}
	
	public String update() {
		return "update";
	}
}

  1. 在struts.xml中配置
<package name="test" extends="struts-default">
<!-- 在method属性写上要执行方法的名称 -->
		<action name="addAction" class="ydt.web.myAction.TestAction" method="add">
			<result name="add">/add.jsp</result>
		</action>
		<!-- 执行update()方法 -->
		<action name="updateAction" class="ydt.web.myAction.TestAction" method="update">
			<result name="update">/fff.jsp</result>
		</action>
	</package>

第二种、使用通配符方式实现
在action标签里面name属性,name属性值里面写 符号 * 星号,method属性="{1}",表示识别一个星号

<package name="test" extends="struts-default">
		<action name="hello_*" class="ydt.web.myAction.TestAction" method="{1}">
			<result name="update">/fff.jsp</result>
			<result name="add">/add.jsp</result>
		</action>
	</package>

此时地址栏

若是:http://localhost:8080/demo1/hello_add.action,访问的便是add方法,
若是:http://localhost:8080/demo1/hello_update.action,访问的便是update方法,

第三种、动态访问实现(我不会)

在action里面的方法有返回值

如果有返回值时候类型必须是String

action里面的方法可以没有返回值,没有返回值时候,result标签不需要配置

1、把方法写成void

import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
	public void testMethod() {
		System.out.println("执行代码。。。。");
	}
}

2、让返回值,返回 ”none”

import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
	public String execute() {
		return NONE;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值