struts2 基本配置和介绍
来源:互联网 发布:游戏王gx结局知乎 编辑:程序博客网 时间:2024/06/06 02:30
Struts2配置 ———源码位置 day31_struts2_3
1. struts2配置文件加载顺序
struts2框架要能执行,必须先加载StrutsPrepareAndExecuteFilter. 在StrutsPrepareAndExecuteFilter的init方法中对Dispatcher进行了初始化. 在Dispatcher类中定义的init方法内就描述了struts2配置文件加载的顺序 init_DefaultProperties(); // [1] ---------- org/apache/struts2/default.properties init_TraditionalXmlConfigurations(); // [2] --- struts-default.xml,struts-plugin.xml,struts.xml init_LegacyStrutsProperties(); // [3] --- 自定义struts.properties init_CustomConfigurationProviders(); // [5] ----- 自定义配置提供 init_FilterInitParameters() ; // [6] ----- web.xml init_AliasStandardObjects() ; // [7] ---- Bean加载 1. default.properties 文件 作用:定义了struts2框架中所有常量 位置: org/apache/struts2/default.properties 2. struts-default.xml 作用:配置了bean,interceptor,result等。 位置:在struts的core核心jar包. struts-plugin.xml 它是struts2框架中所使用的插件的配置文件。 struts.xml 我们使struts2所使用的配置文件。 3. 自定义的struts.properties 就是可以自定义常量。 4. web.xml 在开发中,后加载文件中的配置会将先加载文件中的配置覆盖。 default.properties struts-default.xml struts.xml
2. 关于Action 的配置
1. <package> 作用: 用于生命一个包,方便管理action 1.name 它用于声明一个包名,包名不能重复,也就是它是唯一的。 2.namespace 它与action标签的name属性合并确定了一个唯一访问action的路径。 3.extends 它代表继承的包名。 4.abstrace 它可以取值为true/false,如果为true,代表这个包是用于被继承的。2. <action> 用于声明 一个action 1.name 就是action的一个名称, 它是唯一的(在同包内) 它与package中的namespace确定了访问action的路径。 2.class Action类的全名 3.method 要访问的Action类中的方法的名称,方法无参数 ,返回值为String. 3.<result> 用于确定返回结果类型 1.name 它与action中的方法返回值做对比,确定跳转路径。3. 关于action配置其它细节: 1.关于默认值问题 <package namespace="默认值"> namespace的默认值是"" <action class="默认值" method="默认值"> class的默认值是 com.opensymphony.xwork2.ActionSupport method的默认值是 execute <result\d X name="默认值"> name的默认值是 "success" 2.关于访问action的路径问题 现在的action的配置是: <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="cn.itcast.action.DefaultAction"> <result>/hello.jsp</result> </action> </package> 当我们输入: http://localhost/struts2_day01_2/a/b/c/hello 也访问到了action。 原因:struts2中的action被访问时,它会首先查找 1.namespace="/a/b/c" action的name=hello 没有. 2.namespace="/a/b action的name=hello 没有 3.namespace="/a" action的name=hello 没有 4.namespace="/" action的name=hello 查找到了. 如果最后也查找不到,会报404错误. 3.默认的action。 作用:处理其它action处理不了的路径。 <default-action-ref name="action的名称" /> 配置了这个,当访问的路径,其它的action处理不了时,就会执行name指定的名称的action。 4.action的默认处理类 在action配置时,如果class不写。默认情况下是 com.opensymphony.xwork2.ActionSupport。 <default-class-ref class="cn.itcast.action.DefaultAction"/> 如果设置了,那么在当前包下,默认处理action请的的处理类就为class指定的类。
关于常量配置
default.properties 它声明了struts中的常量。问题:人为设置常量,可以在哪些位置设置 ? 1.struts.xml(应用最多) <constant name="常量名称" value="常量值"></constant> 2.struts.properties(基本不使用) 3.web.xml(了解) 配置常量,是使用StrutsPrepareAndExecuteFilter的初始化参数来配置的. <init-param> <param-name>struts.action.extension</param-name> <param-value>do,,</param-value> </init-param>常用常量 : struts.action.extension=action,, 这个常量用于指定strus2框架默认拦截的后缀名. <constant name="struts.i18n.encoding" value="UTF-8"/> 相当于request.setCharacterEncoding("UTF-8"); 解决post请求乱码 <constant name="struts.serve.static.browserCache" value="false"/> false不缓存,true浏览器会缓存静态内容,产品环境设置true、开发环境设置false <constant name="struts.devMode" value="true" /> 提供详细报错页面,修改struts.xml后不需要重启服务器 (要求) struts.xml文件的分离: 目的:就是为了阅读方便。可以让一个模块一个配置文件,在struts.xml文件中通过 <include file="test.xml"/>导入其它的配置文件。
Action
- 底层实现:
struts2矿建底层是通过反射来操作: 1. struts2框架 读取struts.xml 来获取action 类名, 2. Obj = class.forName("完整类名").newInstance(); 3. Method m = Class.forName("完整类名").getMethod("execute"); m.invoke(obj); 同过反射执行execute方法
- 关于Action类的创建方式介绍:
三种方式: 1. 创建一个POJO 类(Plain Old Java Objects) 没有继承任何父类(除了Object) 优点:无耦合 缺点:功能需要自己实现,麻烦 2. 创建一个类,实现Action 借口,com.opensymphony.xwork2.Action 优点:耦合低。提供了五种结果视图,定义了一个行为方法。 缺点:所以工作都要自己实现。 public static final String SUCCESS = "success"; // 数据处理成功 (成功页面) public static final String NONE = "none"; // 页面不跳转 return null; 效果一样 public static final String ERROR = "error"; // 数据处理发送错误 (错误页面) public static final String INPUT = "input"; // 用户输入数据有误,通常用于表单数据校验 (输入页面) public static final String LOGIN = "login"; // 主要权限认证 (登陆页面) 3. 创建一个类,继承ActionSupprtcom.opensymphony.xwork2.ActionSupport ActionSupport类实现了Action借口 优点:表单校验、错误信息设置、读取国际化信息 三个功能都支持. 缺点:耦合度高。 (一般使用这个比较多)
- 关于aciton 的访问:
1.通过设置method的值,来确定访问action类中的哪一个方法. <action name="book_add" class="cn.itcast.action.BookAction" method="add"></action> 当访问的是book_add,这时就会调用BookAction类中的add方法。 <action name="book_update" class="cn.itcast.action.BookAction" method="update"></action> 当访问的是book_update,这时就会调用BookAction类中的update方法。 2.使用通配符来简化配置 1.在struts.xml文件中 <action name="*_*" class="cn.itcast.action.{1}Action" method="{2}"></action> 2.在jsp页面上
book.jsp<a href="${pageContext.request.contextPath}/Book_add">book add</a><br><a href="${pageContext.request.contextPath}/Book_update">book update</a><br><ahref="${pageContext.request.contextPath}/Book_delete">book delete</a><br><a href="${pageContext.request.contextPath}/Book_search">book search</a><br>product.jsp<a href="${pageContext.request.contextPath}/Product_add">product add</a><br><a href="${pageContext.request.contextPath}/Product_update">product update</a><br><a href="${pageContext.request.contextPath}/Product_delete">product delete</a><br><a href="${pageContext.request.contextPath}/Product_search">product search</a><br>
当访问book add时,这时的路径是 Book_add,那么对于struts.xml文件中. 第一个星就是 Book 第二个星就是 add 对于{1}Action---->BookAction 对于method={2}--->method=add 使用通配符来配置注意事项: 1.必须定义一个统一的命名规范。 2.不建议使用过多的通配符,阅读不方便。 3.动态方法调用 (了解)在struts.xml文件中<action name="book" class="cn.itcast.action.BookAction"></action>访问时路径: http://localhost/struts2_day01_2/book!add
就访问到了BookAction类中的add方法。
对于book!add 这就是动态方法调用。注意:struts2框架支持动态方法调用,是因为在default.properties配置文件中设置了动态方法调用为true.struts.enable.DynamicMethodInvocation = true
struts2 框架中获取 servlet 中 的request ,session ,servlet ,response API 的方法
1.通过ActionContext来获取
1.获取一个ActionContext对象。 ActionContext context=ActionContext.getContext(); 2.获取servlet api 注意:通过ActionContext获取的不是真正的Servlet api,而是一个Map集合。 1.context.getApplication() 2.context.getSession() 3.context.getParameter();---得到的就相当于request.getParameterMap() 4.context.put(String,Object) 相当于request.setAttribute(String,String);
2.注入方式获取(这种方式是真正的获取到了servlet api)
1.要求action类必须实现提定接口。 ServletContextAware : 注入ServletContext对象 ServletRequestAware :注入 request对象 ServletResponseAware : 注入response对象 2.重定接口中的方法。 private HttpServletRequest request; 3.声明一个web对象,使用接口中的方法的参数对声明的web对象赋值. public void setServletRequest(HttpServletRequest request) { this.request = request; } 扩展:分析其实现: 是使用struts2中的一个interceptor完成的. <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/> if (action instanceof ServletRequestAware) { //判断action是否实现了ServletRequestAware接口 HttpServletRequest request = (HttpServletRequest) context.get(HTTP_REQUEST); //得到request对象. ((ServletRequestAware) action).setServletRequest(request);//将request对象通过action中重写的方法注入。 }
3.通过ServletActionContext获取.
在ServletActionContext中方法都是static。 getRequest(); getResposne(); getPageContext();
Result 中的结果类型
1.name 与action中的method的返回值匹配,进行跳转.2.type 作用:是用于定义跳转方式 对于type属性它的值有以下几种: 在struts-default.xml文件中定义了type可以取的值 <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /> 必会: chain dispatcher redirect redirectAction stream dispatcher:它代表的是请求转发,也是默认值。它一般用于从action跳转到页面。 chain:它也相当于请求转发。它一般情况下用于从一个action跳转到另一个action。 redirect:它代表的是重定向 它一般用于从action跳转到页面 redirectAction: 它代表的是重定向 它一般用于从action跳转另一个action。 stream:代表的是服务器端返回的是一个流,一般用于下载。 了解: freemarker velocity
3.局部结果页面与全局结果页面
局部结果页面 和 全局结果页面
<action name="result" class="cn.itcast.struts2.demo6.ResultAction"> <!-- 局部结果 当前Action使用 --> <result name="success">/demo6/result.jsp</result> </action> <global-results> <!-- 全局结果 当前包中 所有Action都可以用--> <result name="success">/demo6/result.jsp</result> </global-results>
0 0
- struts2 基本配置和介绍
- struts2基本介绍以及环境配置
- Struts2基本配置和类型转换
- Solr 基本介绍 安装和配置
- Kea DHCP配置介绍和基本使用
- struts2-struts2的基本配置
- Struts2总结 - 基本配置
- Struts2基本配置实例
- struts2的基本配置
- Struts2基本的配置
- Struts2的基本配置
- Struts2.2基本配置
- struts2基本配置
- Struts2 基本配置
- Struts2基本配置
- struts2基本配置详解
- struts2入门基本配置
- struts2基本配置
- CSS层叠样式表
- sharding-jdbc 使用,进行分库分表以及多数据库间的事物验证
- 广东工业大学第12届ACM程序设计大赛 Problem E: 倒水(Water)
- 关于vs2015每次打开都要配置opencv问题
- CCF 学生排队 Java实现
- struts2 基本配置和介绍
- 翻转链表
- 文章标题
- TOJ 4483: Common Digit Pairs
- 学习淘淘商城第十六课(展示后台管理页面)
- 初识嵌入式
- Java中垃圾回收机制
- NBUT1223-Friends number
- Mac上安装MyEclipse2015 Mac破解版下载