Struts2框架(一)架构、文件配置、核心API详解
来源:互联网 发布:flash傻瓜制作软件 编辑:程序博客网 时间:2024/06/01 07:26
Struts2框架(一)
介绍struts2
struts2:属于web层,代替servlet技术
strut2:接收并处理请求.
struts2:框架封装了很多web层开发中常见的功能,我们使用这些功能不需要我们增加来代码实现了,只需要配置下就直接使用.
struts2:提高web层开发效率
struct2与struct1框架
基于完全不同架构的不同的框架.并不属于版本的升级.
strut2框架搭建
1、导包,参考struts2下的apps/struts2-blank/web-inf/lib
2、创建Action(处理请求的servlet)
3、创建struts2主配置文件
在src下创建,名称struts.xml
<struts> <package name="" namespace="" extends=""> <action name="" class="" method=""> <result class=""></resutlt> </package></struts>
4、配置struts2入口过滤器
struts2架构
intercepter 拦截器 :请求经过action之前先经过拦截器
- 拦截器是用来封装功能,
- 体现AOP思想
- 可插拔式的灵活设计
- 早期版本默认经过18个拦截器,当前新版本默认经过20个拦截器
AOP思想:面向切面编程
纵向重复,横向抽取
struts2详解
基本配置信息
package元素:封装Action配置,方便项目的模块开发 name属性:给包起个名称,不能重复 namespace属性:命名空间,指定Action资源名前的访问路径 不写该属性,相当于填写"/",该属性值可以重复 extends属性:继承另一个包,会将配置信息继承,必须继承struts-default.action元素:配置action对象 name属性:指定访问action时填写的资源名称 class属性:填写Action完整类名,用于struts2框架创建action对象 method属性:定位类中处理请求的方法,填写方法名.result元素:定义结果 name属性:对应Action中方法的返回值 type属性:指定交给那个结果处理器来处理 转发(默认值) dispatcher 重定向 redirect 标签体:指定跳转的资源路径,相对目录WebContent<package name="hello" namespace="/hello" extends="struts-default"> <action name="HelloAction" class="cn.it.test.HelloAction" method="hello"> <result name="success" type="dispatcher">/hello.jsp</result> </action> </package>
常量配置
常量配置如何修改
src/struts.properties
src/struts.xml (推荐使用)
<constant name="常量键" value="常量值"></constant>
WEB-INF/web.xml
<init-param> <param-name></param-name> <param-value></param-value></init-param>
常量(列举3个)
struts.i18n.encoding=UTF-8 (国际化),解决表单post提交参数乱码
struts.action.extension=action 指定Action访问名后的后缀
struts.deMode=false 是否开启struts2开发模式(建议设置为true)
开启开发模式:1.热启动,方便配置文件生效 2.方便查看错误信息
<constant name="struts.devMode" value="ture"></constant>
动态方法调用配置
叹号动态方法调用
- 开启动态方法调用常量 struts.enable.DynamicMethodInvocation = true
- 删除method属性
在使用时使用Action名称!方法名[.后缀名]格式访问
<constant name="struts.devMode" value="ture"></constant> <action name="HelloAction" class="cn.it.test.HelloAction">
通配符动态方法调用
Action元素的name属性改为使用*好通配符写法
浏览器中填写路径是,在访问路径中加入方法名
引入外部struts配置文件
<!-- 引入配置文件 --> <include file="cn/it/dynamic/dynamic.xml"></include>
结果跳转
转发 <result name="success" type="dispatcher">/hello.jsp</result>重定向 <result name="success" type="redirect">/hello.jsp</result>转发到Action <result name="success" type="chain"> <param name="namespace">/</param> <param name="actionName">Demo2Action</param> </result>重定向到Action <result name="success" type="redirectAction"> <param name="namespace">/</param> <param name="actionName">Demo3Action</param> </result>
struts2中Action创建规则
action创建方式1:Action可以是一个pojo(普通java对象-不需要实现任何接口|继承任何类)
struts2是一款代码低侵入性框架
创建方式2:实现一个名为Action的接口
1. 准备Action方法例子供我们参考
2. 准备了字符串常量供我们使用
Action中方法规则:
1. public
2. String
3. 方法名任意
4. 方法不能有参数
5. 方法可以抛出异常
创建方式方式3:继承一个名为ActionSupport类
1.ActionSupport实现了Action接口,我们可以使用接口中的方法和常量,方法也不需要空实现
2.还实现了Validateable, ValidationAware, TextProvider, LocaleProvider接口,可以直接使用这些接口的功能.
struts2中如何获得ServletAPI
ActionContext对象
- ActionContext的生命周期?
每次请求都会创建一个ActionContext - ActionContext本质是什么?
本质是Map集合 - ActionContext应如何获得?
struts2使用ThreadLocal将数据中心与当前请求的线程绑定,我们可以随时获得请求线程绑定的数据中心对象.
获得方式
解耦方式
/** * 解耦方式访问ServletAPI * 获得request、session、application域的Map */public class Demo9 extends ActionSupport{ public String execute() throws Exception { //获得数据中心-ActionContext对象 ActionContext context = ActionContext.getContext(); //appication域Map Map<String, Object> applicationScope = context.getApplication(); //session域Map Map<String, Object> sessionScope = context.getSession(); //request域Map Map<String,Object> request = (Map<String, Object>) context.get("request"); //struts2推荐使用ActionContext本身作为request域 //分别向三个域中存入键值对 applicationScope.put("name", "applicationTest"); sessionScope.put("name", "sessionTest"); context.put("name", "requestTest"); return SUCCESS; }}
原生API方式
/** * 获得原生ServletAPI * 获得原生request、session、ServletContext */public class Demo10 extends ActionSupport{ @Override public String execute() throws Exception { //获得原生request HttpServletRequest request = ServletActionContext.getRequest(); //获得原生response HttpServletResponse response = ServletActionContext.getResponse(); //获得原生session HttpSession session = request.getSession(); //获得原生servletContext ServletContext servletContext = ServletActionContext.getServletContext(); //向域中存放值 request.setAttribute("name", "requestTest"); session.setAttribute("name", "sessionTeset"); servletContext.setAttribute("name", "servletContextTest"); return SUCCESS; }}
实现接口方式
/** * 实现接口方式获得ServletAPI */public class Demo11 extends ActionSupport implements ServletRequestAware{ //实现接口,并准备成员变量接收对象 private HttpServletRequest request; @Override public String execute() throws Exception { //向域中存放值 request.setAttribute("name", "requestDemo"); return SUCCESS; } //在接口实现方法中保存传入对象 @Override public void setServletRequest(HttpServletRequest request) { this.request = request; }}
- Struts2框架(一)架构、文件配置、核心API详解
- Hibernate框架(一)文件配置、核心API、对象状态详解
- EXT核心API详解(一)
- EXT核心API详解(一)
- JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用
- JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用
- Java Struts2 框架入门详解(一)MVC架构详解以及Struts基本概述
- EXT核心API详解(一)-Ext
- EXT核心API详解(一)-Ext
- [转载]EXT核心API详解(一)-Ext
- EXT核心API详解(一)-Ext
- EXT核心API详解(一)-Ext
- EXT核心API详解(一) - Ext类
- EXT核心API详解(一) - Ext类
- EXT核心API详解(一)-Ext
- Struts2框架4.Struts2配置详解
- Struts2核心文件配置与 xml文件配置基础版
- Struts2(一)Struts2配置详解
- 全局变量、静态全局变量、静态局部变量和局部变量的区别
- RootWarp
- ARM64 Linux kernel + busybox rootFS via NFS over QEMU with GDB
- 未将对象引用设置到对象的实例。
- centos 7远程登陆win10
- Struts2框架(一)架构、文件配置、核心API详解
- Web安全之XSS
- Serializable接口serialVersionUID的作用
- 第三十九讲项目六——回文日
- Java 多线程:线程通信
- Leetcode 5、Longest Palindromic Substring
- UVA-3.10-盒子-1587
- JavaScript "===" 与 "==" 的区别
- 单目视觉标定原理