Struts2的基本介绍

Struts2的介绍

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

jar包可去这儿下载 jar包下载
也可以通过maven配置。

1. Struts2的配置

struts2的配置需要一个struts.xml的配置文件,这个文件放在src的包下。因为struts2是基于前端控制器模型的,所以我们还需要配置一个核心过滤器(也叫前端控制器),用以将各个请求分发到action去处理.
在这里插入图片描述

web项目结构图
在这里插入图片描述

先创建一个test.jsp

	<h1>struts2</h1>
	<a href="LoginAction">aaaaaaaaaaaaaaaaa</a>

然后写一个Action类叫LoginAction


public class LoginAction {

	//方法名用execute,因为Struts2会去找这个名字
	public String execute() {
		// TODO Auto-generated method stub
		System.out.println("123...");
		//返回的值,用于在struts.xml中查找跳转页面
		return "q";
	}
}
  1. 这是struts.xml这个配置文件,用来配置action类,放在src下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!-- struts为了管理Action的配置,通过报警性管理 -->
	<!-- 配置struts的包 -->
	<!-- struts-default核心过滤器 -->
	<package name="demo" extends="struts-default" namespace="/">
		<!-- 配置Action -->
		<action name="LoginAction" class="com.demo.LoginAction">
			<!--跳转页面 -->
			<result name="q">./ss.jsp</result>
		</action>
	</package>
</struts>

  1. 这是核心过滤器的配置文件,写在web.xml中
	<!-- 配置核心控制器,用以将接收到的请求发送给各个action -->
	<!-- 配置Struts2的核心过滤器 -->
	<filter>
		<!-- 名字可以随便起 -->
		<filter-name>struts2</filter-name>
		<!-- 核心过滤器 -->
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
		<!-- 修改常量 -->
		<!-- <init-param> -->
		<!-- <param-name>struts.action.extension</param-name> -->
		<!-- <param-value>xyz</param-value> -->
		<!-- </init-param> -->
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<!-- /*用以拦截所有请求 -->
		<url-pattern>/*</url-pattern>
	</filter-mapping>

以上就是一个简单的struts2的实例

2. struts.xml

2.1 package

package标签称为包,这个包与Java中的包的概念不一致。包为了更好管理action的配置。

package标签的属性

  1. name :包的名称,只有在一个项目中不重名即可。
  2. extends :继承哪个包,通常值为struts-default。
  3. namespace :名称空间,与标签中的name属性共同决定访问路径。
    名称空间有三种写法
    1. 带名称的名称空间 :namespace=”/aaa”
    2. 跟名称空间 :namespance=”/”
    3. 默认名称空间 :namespace=””

2.2 action

action标签配置Action类。

action标签的属性

  1. name :与namespace共同决定访问路径
  2. class :Action类的全路径
  3. method :执行Action中的哪个方法的方法名,默认值execute

Action实际上是要继承ActionSupport类的,当然不继承像上面写也是可以的。继承了可以用一些常量等。
ActionSupport基类中定义了五个标准的返回值 ,当然我们可以自己随意定义返回的名字
String SUCCESS = “success”; //默认是 SUCCESS 类型
String NONE = “none”;
String ERROR = “error”;
String INPUT = “input”;
String LOGIN = “login”;

3. Action的访问

struts2可以对一个action进行不同的方法的访问。

3.1 method方法

action的编写

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	public String find() {

		System.out.println("执行了find方法");
		return NONE;
	}

	public String Query() {
		System.out.println("执行了query方法");
		return NONE;
	}
}

struts.xml的配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!-- struts为了管理Action的配置,通过报警性管理 -->
	<!-- 配置struts的包 -->
	<!-- struts-default核心过滤器 -->
	<package name="demo" extends="struts-default" namespace="/">
		<!-- 配置Action -->
		<action name="LoginActionfind" class="com.demo.LoginAction"
			method="find">
			<result name="q">./ss.jsp</result>
		</action>
		<action name="LoginActionquery" class="com.demo.LoginAction"
			method="Query"></action>

	</package>
</struts>

3.2 通过通配符的方式

action的编写


import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

	public String find() {

		System.out.println("执行了find方法");
		return NONE;
	}

	public String Query() {
		System.out.println("执行了query方法");
		return NONE;
	}

	public String delete() {
		System.out.println("执行了删除方法");
		return NONE;
	}
}

struts.xml的编写

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<!-- struts为了管理Action的配置,通过报警性管理 -->
	<!-- 配置struts的包 -->
	<!-- struts-default核心过滤器 -->
	<package name="demo" extends="struts-default" namespace="/">
		<!-- 配置Action -->
		<action name="LoginActionfind" class="com.demo.LoginAction"
			method="find">
			<result name="q">./ss.jsp</result>
		</action>
		<action name="LoginActionquery" class="com.demo.LoginAction"
			method="Query"></action>

		<action name="LoginAction_*" class="com.demo.LoginAction"
			method="{1}"></action>
	</package>
</struts>

还有一种动态的方式,这儿略过,有兴趣的可以自行百度。

4. Action的数据接收与发送

4.1 通过ActionContext

struts2提供了一个类ActionContext来实现对数据的访问,可以访问request,session,application等的数据。

	public String find() {
		System.out.println("执行了find方法");
		ActionContext context = ActionContext.getContext();
		Map<String, Object> map = context.getParameters();

		for (String key : map.keySet()) {
			String[] val = (String[]) map.get(key);
			System.out.println(key + "----" + val[0]);
		}

		return NONE;
	}

在这里插入图片描述

4.2 通过原生方式

Struts2还可以提供和Servlet一样的方式来访问数据

	public String find() {

		System.out.println("执行了find方法");
		ActionContext context = ActionContext.getContext();
		Map<String, Object> map = context.getParameters();

		for (String key : map.keySet()) {
			String[] val = (String[]) map.get(key);
			System.out.println(key + "----" + val[0]);
		}

		HttpServletRequest request = ServletActionContext.getRequest();
		String name = request.getParameter("username");
		String password = request.getParameter("password");
		System.out.println(name + "=============" + password);
		return NONE;
	}

5. 结果页面的配置

	<package name="demo" extends="struts-default" namespace="/">
		<!-- 配置Action -->
		<action name="LoginAction_*" class="com.demo.LoginAction"
			method="{1}">
			<!-- 转发的方式跳转 -->
			<result name="find1" type="dispatcher"></result>
			<!-- 重定向的方式跳转 -->
			<result name="find2" type="redirect"></result>
		</action>
	</package>
发布了133 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41921315/article/details/103890368