struts2 的简介以及其环境搭建和使用

本文深入解析了Struts2框架,介绍了其作为Web层框架的角色,详细阐述了Struts2的配置过程,包括核心过滤器的配置、Action类的编写、配置文件的解析顺序以及如何配置Action。此外,还探讨了不同类型的参数封装方法,如常量、String数据和对象类型的封装。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

struts2

什么是struts2

是Web层的一个框架,对Web层的功能进行了封装。常见的web层框架struts1、webWork、springMVC

struts2的作用
  1. 接收页面的请求数据

  2. 封装数据传递参数

  3. 接收结果数据到域对象

  4. 域对象到页面展示数据

struts2的文件加载顺序
  1. struts2的前端控制器(StrutsPreparedAndExecuteFilter)的init方法

    init方法:服务器启动执行 执行一次

    主要作用: 用来加载整个struts2的配置文件的

  2. struts2自动写好的配置文件(执行顺序由上到下)

    • default.properties:已经配置好的键值对信息(action的后缀名地址访问 上传文件的大小控制…)
    • struts-default.xml:struts2的默认包:struts-default,存在大量拦截器
    • struts-plugin.xml:struts2整合spring需要用到的一个配置文件
  3. 自己创建或书写的配置文件(执行顺序由上到下)

    • struts.xml:action的浏览器访问路径配置文件
    • struts.properties:不常用
    • web.xml:加载StrutsPrepareAndExecuteFilter的初始化参数值

此加载顺序主要以后面的配置文件内容为主,可以覆盖前面的内容

环境搭建
  1. 各文件的内容

    apps:Struts2提供一些项目案例。(关注点)
    docs:Struts2提供的开发规范和文档
    lib:Struts2提供的开发jar包
    src:Struts2提供的源代码

  2. 所需jar包

    apps/struts2-blank.war/WEB-INF\lib下面的所有jar包

    因为struts2-blank.war项目是struts2最基本的环境搭建项目

struts2的使用
  1. 配置struts2的核心过滤器,在web.xml中配置
<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. 编写Action类
public class Struts2Demo01 {	//常常继承ActionSupport
    //必须是返回字符串的方法
	public String execute() {
		...
		return "success";
	}
}

这个ActionSupport类实现类ation,存在5个常量分别为:

SUCCESS:成功"sucess"

NONE:不跳转 null

LOGIN:用于用户登录失败页面跳转 “login”

INPUT:表单出错情况下,页面跳转 “input”

ERROR:错误页面 “error”

  1. 配置struts2.xml中的Action
<!-- 
	package:配置包
	name:包的名称,在配置文件中不要出现重复的包即可
	extends:用于继承其他的包,通常继承struts-default
	namespace:名称空间,与<action>标签中name一起决定访问路径的
		namespace="" 	默认名称空间
		namespace="/"	根名称空间
		namespace="/aa"	带有名称的名称空间
-->
<package name="action" extends="struts-default" namespace="/">
    <!-- 
   		name:action的名字,和浏览器访问路径有关,与namespace共同决定访问路径
   		class:Action类的全路径
   		method:执行Action中的哪个方法,默认值是execute
  	-->
	<action name="hello" class="com.edu.action.Struts2Demo01" method="execute">
		<result name="success">/success.jsp</result>
	</action>
</package>
  1. 其他配置

    • constant配置:配置struts2中的常量
    <!-- 修改访问路径后缀名 -->
    <constant name="struts.action.extension" value="php"></constant>
    
    • include配置:包含其他的配置文件
    <include file="com/edu/struts2_demo01.xml"></include>
    
action的三种使用方式
  1. 通过method参数设置:配置过多,冗余。
//前台访问url的路径
<a href="${ pageContext.request.contextPath }/findCustomer.action">查询客户</a>
<a href="${ pageContext.request.contextPath }/saveCustomer.action">保存客户</a>
<a href="${ pageContext.request.contextPath }/updateCustomer.action">修改客户</a>
<a href="${ pageContext.request.contextPath }/deleteCustomer.action">删除客户</a>
//xml配置文件需要书写4个action
<package name="action" extends="struts-default" namespace="/">
	<action name="findCustomer" class="com.edu.action.Demo01" method="execute">
		<result name="success">...</result>
	</action>
    <action name="saveCustomer" class="com.edu.action.Demo01" method="execute">
		<result name="success">...</result>
	</action>
    ...
</package>

​ 2. 通配符的配置:(前提,访问路径必须与方法名有一定联系)

//页面
<a href="${ pageContext.request.contextPath }/linkMan_find.action">查询联系人</a>
<a href="${ pageContext.request.contextPath }/linkMan_save.action">保存联系人</a>
// * 就代表需要执行的那个方法
<action name="linkMan_*" class="com.edu.action.Demo02" method="{1}"/>
	<result name="success">...</result>
</action>
  1. 动态方法访问方式
//页面,!后面表示要执行的方法
<a href="${ pageContext.request.contextPath }/product!find.action">查询商品</a>
<a href="${ pageContext.request.contextPath }/product!save.action">保存商品</a>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
struts2的Servlet的API访问
  1. 方式一:通过ActionContext实现
ActionContext actionContext = ActionContext.getContext();
Map<String,Object> map = actionContext.getParameters();
  1. 方式二:实现特定接口的方式实现
public class RequestDemo2Action extends ActionSupport implements ServletRequestAware,ServletContextAware{
	private HttpServletRequest request;
	private ServletContext application;
}
  1. 方式三:通过ServletActionContext对象的静态方法实现
HttpServletRequest request = ServletActionContext.getRequest();
Map<String, String[]> parameterMap = request.getParameterMap();
//通过ServletActionContext获取页面数据、往session和Application
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
ServletContext application = ServletActionContext.getContext();
HttpSession session = request.getSession();
全局结果视图

针对一个包下所有的action都生效的一个页面,先执行局部,再执行全局

//书写在action外,package内
<global-results>
	<result>/demo1/success.jsp</result>
</global-results>
配置结果页面

result标签的配置:

//name:逻辑视图的名称,默认是success
//type:
//		dispatcher:默认值,转发(转发到jsp页面)
//		redirect:重定向(重定向到jsp)
//		chain:转发到另一个Action
//		redirectAction:重定向到另一个Action
//		stream:文件下载
<result name="success" type="dispatcher"></result>
struts2对页面数据的封装
  1. 常量和String数据的封装

    条件:1. 需要有成员属性 2. 需要有set方法

//页面书写
<h2>常量与String数据的封装</h2>
<form method="post" action="${pageContext.request.contextPath}/demo01">
	用户名:<input type="text" name="username"><br>
	年龄:<input type="text" name="age"><br>
	<input type="submit" >
</form>
-----------------------------------
//action中书写,必须要set方法
private String username;
private int age;
	
public void setUsername(String username) {	//struts会通过set方法,自动封装属性
	this.username = username;
}
public void setAge(int age) {
	this.age = age;
}
  1. 对象类型的封装

    条件:1. 需要有成员对象 2. 需要set/get方法 3. 页面需要OGNL表达式

//页面书写
<h2>对象的封装</h2>
<form method="post" action="${pageContext.request.contextPath}/demo02">
	用户名:<input type="text" name="user.username"><br>
	年龄:<input type="text" name="user.age"><br>
	<input type="submit" >
</form>

//action书写,必须要有set/get方法
//需要get方法是为了避免出现多个对象,使struts只对一个对象的里的所有属性进行封装
private User user;
	
public void setUser(User user) {
	this.user = user;
}
public User getUser() {
	return user;
}
  1. 模型封装

    条件:1. 需要有成员对象,而且还得实例化这个对象 2. 需要实现一个接口 ModelDriver

    1. 需要提供一个getModel方法 4. 将对象以getModel进行返回
//页面
<form method="post" action="${pageContext.request.contextPath}/demo01">
	用户名:<input type="text" name="username"><br>
	年龄:<input type="text" name="age"><br>
	<input type="submit" >
</form>
//action书写方式
public class demoAction extends ActionSupport implements ModelDriven<User>{
	private User user = new User();
	@Override
	public User getModel() {
		return user;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值