【Struts2】Struts2技术基础(环境搭建、作用域、第一个Struts2程序)

Struts2 框架

Struts2 概念: mvc设计思想中,控制器的解决方案。(替代并简化 servlet的控制器开发)
优点: ①代码解耦和(跳转路径不会写死在代码中
②自动接受请求参数,自动转化类型,自动封装成实体
③跳转路径的代码,消除
④一个Struts2控制器可以书写多个方法,便于管理
⑤Struts2代码书写角度,脱离Servlet的api.便于单元测 试(普通java类)

1).第一个Struts2程序(Struts2的环境搭建、配置及其执行)

(1)搭建Struts环境
导入jar包 
(2)导入struts.xml,放入src的根目录下
(3)配置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>
 
(4)写一个类和方法,在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>
	<package name="struts" extends="struts-default">
		<action class="全类名 " name="访问action的名字" method="类的方法名">
			<result name="ok">/index.jsp</result>
		</action>
	</package>
</struts>
启动TomCat访问时,路径+action的名字

2).Struts2内置工具类(ServletActionContext)、接受请求参数、及其action的生命周期

(1)Struts2内置工具类
工具类: ServletActionContext
作用:获得request  response  servletContext 对象。
(2)Struts2接受请求参数
### struts接受请求参数核心特点
①使用Action的属性接受
②自动数据类型转化(Integer Double Long String Date)
③自动实体对象的封装
### 基本数据类型和包装类型数据接收,以及String、Date
Integer Double Long String  Date(默认支持格式: yyyy-MM-dd yyyy年MM月dd日)
①在Action中声明属性
②属性名必须要和请求参数名保持一致
③提供标准set和get方法
### 数组类型(List集合类型)参数接受
①在Action中声明数组类型的属性。
②保证属性名和请求参数名一直
③提供set、get方法。
### 封装实体对象
①在action声明实体类型的属性
②保证请求参数的名字格式:`action的属性名.实体属性名`
③提供set和get方法
(3)Struts2的Action的生命周期
Servlet的生命周期:
①浏览器第一次访问创建
②tomcat关闭销毁
③一个Servlet类只创建一个servlet对象。
Struts2实现的控制器生命周期:
①创建:浏览器每次访问,都会新建action对象。
②个数:N个。
③生命周期一次请求过程。
优点:
action使用属性接受数据,是线程安全。
为什么要讲aciton设计多例?
①struts2使用action的属性接受数据。
②如果action只创建一个,多线程访问临街资源,线程不安全。
底层设计:
浏览器请求------sturts2的action---反射创建对象。(Action action = new XXxxAction)
并request.setAttribute("名字",action);

3).Struts2实战action的开发规范、跳转

(1)实战Action开发规范
控制器编写:将业务逻辑相关的控制器方法,放在同一个Action类中。
package:
作用: 在struts.xml管理action标签。
将业务逻辑相关的控制方法的配置action标签,放在同一个package标签下。
namespace:
访问action: `/项目名/namespace/action的name`
标签:
<package name="user" extends="struts-default" namespace="/user">
     	<action name="fAction"></action>
</package>
访问: /项目名/user/fAction
开发规范:将业务逻辑相关的action的访问路径,放在同一个namespace下。
(2)跳转
默认: action--->jsp(请求转发)
①Action--->JSP
	请求转发 (展示所有控制器跳转到展示所有jsp): 默认:
	请求重定向 (注册成功后跳转到登录页面):
		<action name="" class="" method="">
			<result name="方法返回值" type="跳转方式">跳转后的jsp的URL-pattern</result>
        </action>
		type可选值:  dispatcher(请求转发) 、redirect(请求重定向)
②Action---->Action(同包跳转)
		<action name="" class="" method="">
			<result name="方法返回值" type="跳转方式">跳转后的action的名字</result>
        </action>
        type可选值:	chain(请求转发)、	redirectAction(请求重定向)
③Action跨namespace跳转到Action
<action name="" class="" method="">
	<result name="方法返回值" type="跳转方式">
		<param name="namespace">目标跳转的action所在的namespace</param>
		<param name="actionName">目标action的name</param>
    </result>
</action>
type:  chain(请求转发)、redirectAction(请求重定向)
4).Request的作用域、struts2的常量配置、以及配置文件简化
(1)request作用域
①通过ServletActionContext获得request对象。
②Action的属性自动放入request作用域中。
	 
(2)struts2的常量配置
默认配置文件: struts2-core-2.3.16.3.jar  (org.apache.struts/default.properties)
①设置请求参数的编码:
   <constant name="struts.i18n.encoding" value="UTF-8"></constant>
②设置action默认请求后缀
   struts.action.extension=action
   <constant name="struts.action.extension" value="do"></constant>
③文件上传大小设置
   struts.multipart.maxSize=2097152: 默认单个文件上传大小限制,单位字节: 2M
   设置文件上传大小为20M
   <constant name="struts.multipart.maxSize" value="20000000"></constant>
(3)action配置文件简化
①配置通用的action访问路径
 
②特点:
好处: 简化action标签,开发代码少。
缺点: 可读性差。
原文地址:https://www.cnblogs.com/jwnming/p/13634968.html