一、Struts2概述
Struts2是Apache公司出品的一款优秀的Web层框架,实现了MVC思想,基于过滤器,核心功能是拦截器,给开发提供了很大的便利。
如:参数拦截器、类型转换拦截器等,实现数据的类型转换、校验、国际化等。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
二、创建Struts2工程的步骤?
(1) 导入struts所需的jar包
(2) web.xml中配置Struts核心过滤器
(3) 将struts.xml文件导入src包
(4) 创建Action,进行业务逻辑处理
(5) struts2.xml具体配置
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>1009struts</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 配置核心过滤器 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
struts2.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.xml文件名称是固定的,且必须存放于src包 -->
<package name="a" extends="struts-default" namespace="/">
<!--package:一个struts.xml文件中可以定义多个
作用:管理action
name:package的名称,自定义,多个package的name不可重复
extends:继承struts-default包,能够使用Struts框架中提供的核心功能
namespace:命名空间,和action节点中的name共同构成了访问路径
-->
<action name="ta_*" method="{1}" class="com.xxx.action.TestAction">
<!--action:
作用:将Java类与请求时所用的访问路径进行映射
name:对应访问路径
method:对应要执行的方法
class:对应该方法所在Java类的全类名
-->
<result name="ok" type="dispatcher">/b.jsp</result>
<!--result:
作用:针对每一个方法的返回值,相应地匹配要展示的画面
name:对应方法的返回值
type:不具体声明时,默认跳转方式为dispatcher,即转发。
redirect:重定向到jsp <result name="guarantyId" type="redirect">GrtGBasicInfoAction_getByIdDetailView.action?guarantyId=${guarantyId}&gageType=${gageType}&view=view</result>
chain:转发到action
redirectAction:重定向到action
注意:在result中指定跳转的目标页面时,页面名称前要加"/"
-->
<result name="okk" type="dispatcher">/c.jsp</result>
</action>
<!-- <action name="t1" method="test1" class="com.xxx.action.TestAction"> -->
<!-- <result name="ok" >/b.jsp</result> -->
<!-- </action> -->
<!-- <action name="t2" method="test2" class="com.xxx.action.TestAction"> -->
<!-- <result name="okk">/c.jsp</result> -->
<!-- </action> -->
</package>
<package name="P" extends="struts-default" namespace="/P">
<action name="ttt_*" method="{1}" class="com.xxx.action.TestAction">
<result name="ok2">/add.jsp</result>
</action>
</package>
<include file="user_struts.xml"></include>
</struts>
三、具体struts.xml配置?
(1) struts.xml文件名称是固定的,且必须存放于src目录下
(2) package:一个struts.xml文件中可以定义多个
作用:在struts2中管理action
name:package的名称,多个package的name不可以重复
namespace:命名空间,和action节点中的name属性,共同构成了访问路径
extends:继承struts-default包,能够使用struts2框架中
提供的核心功能。一般情况下任何包都要继承struts-default
(3) action:
作用:将后台Java类与请求时所用的访问路径进行映射
name:指action名称,同一个package中的action之间name不可重复
method:指具体要执行的Action(后台Java类)中的方法
class:指要执行的Action对应的全类名
(4) result:结果视图
作用:针对后台中每一个方法的返回值,相应地指定该方法执行成功后要展示页面
name:对应Action(后台Java类)中方法的返回值
type:指定下一步请求方式
不指定type时,默认值:dispatcher,即转发到jsp
redirect,即重定向到jsp
redirectAction,即重定向到Action中的方法
chain,即转发到Action中的方法
注意!!!在result中指定跳转的目标页面名称时,前面要加"/"
(5) include:主要用于struts配置文件业务划分,
不同的业务模块可以分开配置
最终在struts.xml文件中,通过include引入
作用:提高struts代码可读性
四、Strust2执行的流程?
客户端(浏览器)发送请求时:
(1) 过滤器
(2) 加载struts.xml文件(根据画面上的href或action内容,到struts.xml文件中,找到相应的action)
(3) 根据action中的class,进入指定的Action类
(4) 根据action中的method,执行Action类中的指定方法Action中方法的返回值类型为字符串,且为无参方法
(5) 根据Action中方法返回的字符串,到action节点内result中找到相应的name,跳转到该result指定的画面
五、如何动态地配置struts中的action?
<action name="book_*" method="{1}" class="com.easy.action.BookAction">
</action>
<a href="Book/book_addBook">添加</a><br>
<a href="Book/book_updateBook">修改</a><br>
name:*之前为统一格式
method:占位符的形式,匹配Action中的方法,必须为{1}
六、Action中向页面传递数据的方法?
获取到request:
HttpServletRequest request = ServletActionContext.getRequest();
或获取到session:
HttpSession session = request.getSession();
将数据通过request发送到下一画面
request.setAttribute("student", student);
七、struts2总结?
作用于web层,基于过滤器实现的。
有利于数据隔离(相对其他web层框架来说,数据封装比较安全)
核心技术是拦截器,给开发提供了很多便利
比如说参数的封装(传值),数据校验,文件上传下载等
后续继续补充