一、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层框架来说,数据封装比较安全) ?? ?核心技术是拦截器,给开发提供了很多便利 ?? ?比如说参数的封装(传值),数据校验,文件上传下载等
后续继续补充
|