葵花宝典 八 Struts2
来源:互联网 发布:路由器怎么没有网络啊 编辑:程序博客网 时间:2024/05/17 02:07
什么是框架,框架有什么用
框架是实现部分功能的代码,使用框架可以简化企业级开发,提高开发效率。
学习框架,清楚的知道框架能做什么
什么是struts2 框架,它有什么用?
struts2是struts的下一代产品,struts2是apache的产品
struts2是一个标准的mvc框架。javaweb中的model2模式就是一个mvc模式
使用struts2框架 可以简化我们的web开发,并且降低程序的耦合度
xwork 他是webwork的核心
xwork提供了很多核心的功能,前端拦截器,运行时属性的表达验证,类型转换,强大的表达式语言
1.导入jar包
下载struts2的jar包
2.对struts2框架进行配置
1.web.xml文件配置前端控制器(核心控制器)—-就是一个Filter
目的是为了让struts2框架可以运行
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
还要创建一个struts.xml配置文件,这个是struts2框架的配置文件,
目的:是为了struts2框架流程可以执行
名称:struts.xml
位置:src下
创建action类
要求:在action类中创建一个返回值类型是String类型的方法,注意,没有参数
在struts.xml文件中配置action
struts2的流程分析
请求—–strutsPrepareAndExcuteFilter核心控制器——–Interceptors 拦截器(实现代码功能)——Action的excute—–结果页面Result
拦截器在struts—default.xml定义
执行拦截器是defaultstack中引用拦截器
——通过源代码断电调试,证明拦截器是执行
在核心拦截器的init方法对dispather进行了初始化,在dispather类中定义的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
原因: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指定的类。
2.关于手动配置struts.xml文件中提示操作
struts.xml提示来自于DTD文件约束
“-//Apache Software Foundation//DTD Struts Configuration 2.3//EN”
“http://struts.apache.org/dtds/struts-2.3.dtd”>
如果可以上网,自动缓存dtd,提供提示功能
如果不能上网,也可以配置本地DTD提示
导入DTD时,应该和配置的DTD版本一样
关于常量的配置
default.properties 它声明了struts中的常量
问题:人为设置常量,可以在哪些位置设置
1.strtus.xml应用最多
2.struts.properties
3.web.xml
配置常量
struts.action.extension
do,,
常用常量
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"/>导入其它的配置文件。
1.关于Action类的创建方式介绍:
有三种方式
1.创建一个POJO类.
简单的Java对象(Plain Old Java Objects)
指的是没有实现任何接口,没有继承任何父类(除了Object)
优点:无耦合。 缺点:所以工作都要自己实现。 在struts2框架底层是通过反射来操作: * struts2框架 读取struts.xml 获得 完整Action类名 * obj = Class.forName("完整类名").newInstance(); * Method m = Class.forName("完整类名").getMethod("execute"); m.invoke(obj); 通过反射 执行 execute方法 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.创建一个类,继承自ActionSupport类. com.opensymphony.xwork2.ActionSupport ActionSupport类实现了Action接口。 优点:表单校验、错误信息设置、读取国际化信息 三个功能都支持. 缺点:耦合度高。 在开发中,第三种会使用的比较多.
1.通过设置method的值,来确定访问action类中的哪一个方法.
当访问的是book_add,这时就会调用BookAction类中的add方法。
当访问的是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> <a href="${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
Result结果类型
<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 ---------------------------------------------------- 局部结果页面与全局结果页面 局部结果页面 和 全局结果页面 <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>
- 葵花宝典 八 Struts2
- 葵花宝典
- 葵花宝典
- 葵花宝典
- 葵花宝典
- 葵花宝典
- Struts2学习笔记八
- 八、Struts2之OGNL
- (八)Struts2中的OGNL
- Struts2(八)国际化
- Struts2学习笔记(八)
- J2EE葵花宝典
- 程序员葵花宝典
- Android_UI_葵花宝典
- 【TypeScript】葵花宝典
- makefile葵花宝典
- makefile--葵花宝典
- 葵花宝典 六
- Codeforces Round #422 (Div. 2) C. Hacker, pack your bags! 排序, 贪心, 暴力(居然可以n方暴力)
- mysql 学习之列类型以及属性特点详解
- Cordova(PhoneGap)Android Native混合开发值传递
- 我的设计作品1
- AndroidStudio如何新建java工程?
- 葵花宝典 八 Struts2
- 【淘淘】---展示商品列表
- Avalon -- 使用错误集
- STM32---CAN2.0B读取新能源汽车BMS报文
- PHP中的输出语句
- COM组件、ActiveX、OCX区别
- 为什么要使用 Node.js
- 堆栈和线程
- 微信开发