java开发中常用框架介绍:
ssh:struts2 spring hibernate
ssm(ssi):springmvc spring mybatis(ibatis)
struts2.0框架概述:
strus2.0是一个基于mvc设计模式的web应用框架,它本质上相当于一个servlet,在mvc设计模式中,struts2.0作为控制器来建立模型与视图的数据交互,struts2.0采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与servlet api完全脱离。
struts2.0核心:
1.interceptor 拦截器
2.Action
3.ognl && valueStack
struts2.0框架的使用步骤:
1.导入相关jar包(官网:struts.apache.org)
jar包内文件夹分析: apps 示例代码 docs 文档 lib 相关jar包 src 源代码 我们使用struts框架不是直接将它的lib包下的所有jar文件copy到项目中,而是使用其中的一部分。我们可以参考它的是代码。(改示例代码项目struts2-blank后缀为zip,解压后找到lib中的jar包) 2.需要在web.xml文件中配置一个Filter(只有配置了它才可以使用strtus2框架)12 5struts2 3org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 46 struts2 7/* 8
3.struts.xml配置文件,它的位置放在src下。(apps示例代码classes文件夹中可以找到)
4.创建Action来完成逻辑操作struts2.0执行流程:
1.当通过浏览器发送一个请求;
2.会被StrutsPrepareAndExecuteFilter过滤器拦截; 3.StrutsPrepareAndExecuteFilter会调用struts2框架默认的拦截器(interceptor)完成部分功能; 4.根据struts.xml文件调用指定的action; 5.执行Action中的操作,根据Action中方法的执行结构来选择来跳转页面Result视图; ???6.会调用struts2框架默认的拦截器(interceptor)完成部分功能;注意:一般管StrutsPrepareAndExecuteFilter叫做前端控制器(核心控制器),只有配置了这个filter我们struts2框架才能使用。
struts2的默认拦截器(interceptor)他们是在struts-default.xml文件中配置的。 struts-default.xml文件是在struts-core.jar包中,默认的拦截器是在名为defaultStack的拦截器栈(<interceptor-stack>)中定义的。当我们在浏览器中访问一个jsp页面,StrutsPrepareAndExecuteFilter过滤其就会拦截到这个请求,就会根据请求路径在struts2.xml文件中进行判断,调用指定的一个Action的方法。
eg:
struts2.0源码导入:
src下文件夹分析:
apps assembly core plugins src xwork-core pom.xml 对于struts2框架它的源代码我们主要使用三部分: 1.struts2核心部分源代码 org.apache.struts2开头的类全名要查找的是core目录下的源代码(core\src\main\java) 2.struts2的xwork核心部分源代码 com.opensymphony.xwrok2开头的类全名要查找的是xwork-core目录下的源代码(xwork-core\src\main\java\com\opensymphony\xwork2) 3.struts2的插件的源代码 src\plugins在没有网络情况下,解决struts.xml编辑时只能提示问题:
1.windows-preferences-xml-xml catalog
2.点击add配置 location:查找的是dtd文件本地的位置(源代码中[src\core\src\main\resources\struts-2.3.dtd]) key type:URI key:strtus.xml文件中<!DOCYTPE>标签中的路径struts2配置文件的加载顺序:
StrutsPrepareAndExecuteFilter过滤器中init()方法中加载了:
dispatcher = init.initDispatcher(config);//init()方法中该段代码中执行了如下方法;init_DefaultProperties();//1 init_TraditionalXmlConfigurations();//2 init_LegacyStrutsProperties();//3 init_CustomConfigurationProviders();//4 nit_FilterInitParameters();//5 init_AliasStandardObjects();//6
第一个加载的是default.properties文件
位置:struts2-core.jar包,org.apache.struts2包下 作用:主要是声明了struts框架的常量,如struts2框架默认使用utf-8编码; 第二个加载的是一批配置文件 struts-default.xml 位置:struts2-core.jar 作用:声明了interceptor result bean struts-plugin.xml 位置:在struts2的插件包中 作用:主要用于插件的配置声明 struts.xml 位置:在我们自己的工程中 作用:用于我们自己工程使用struts2框架的配置 第三个加载的是我们自定义的struts.properties文件 位置:都是在自己工程的src下。 作用:定制常量 第四个自定义配置提供 第五个加载的是web.xml文件 主要是加载struts2框架在web.xml文件中的相关配置。 第六个bean相关配置Struts.xml文件配置介绍:
<struts> 根标签
<package>配置 name属性 作用:定义一个包的名称,它必须唯一; namespace属性 作用:主要是与action标签的name属性联合使用,来确定一个action的访问路径 extends属性 作用:指定我们继承自哪个包。一般值是struts-default struts-default包是在struts-default.xml文件中声明的。 abstruct属性 作用:它代表当前包是一个抽象的,主要是用于被继承。<action> name属性 作用:主要是与package标签的namespace属性联合使用,来确定一个action的访问路径 class属性 作用:用于指示当前的action类 method属性 作用:用于指示当前action类中的哪个方法执行<result>它主要是用来指示结果视图; name属性:作用:是与action类的method方法的返回值进行匹配,来确定跳转路径。 type属性:作用:用于指定跳转方式;不指定的话默认是转发; type属性取值范围: chain:它类似于请求转发,只不过它针对于action跳转。 dispatcher:转发(默认值),针对于jsp页面 freemarker httpheader redirect:重定向,针对于jsp页面 redirectAction:类似于重定向,针对于action stream velocity xslt plainText postback当多个action有相同的result,可以向上抽取,在<package>下定义全局result:<global-result><result name = "" type = ""></result></global-result>
关于action配置中class&method默认值以及result中name&type默认值的问题: struts-default.xml文件中配置了如下代码: <default-class-ref class="com.opensymphony.xwrok2.ActionSupport"/> 它的作用就是当一个请求来时,如果找不到指定的class以及对应的mehtod就会执行ActionSupport类中的execute方法,在这个方法中默认返回的是"success",也是说,result的name默认属性值是success,默认的跳转方式是请求转发dispatcher。 即: action标签中: class 默认值:com.opensymphony.xwrok2.ActionSupport method默认值:execute result标签中: name默认值:success type默认值:dispatcherstruts2常量配置:
default.properties文件中定义了struts2框架常用常量。
定义常量的三种方法: 1.在src下创建一个struts.properties配置文件 2.可以在web.xml文件中配置的(不推荐使用)struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts.i18n.encoding GBK
3.可以直接在struts.xml文件中定义常量(推荐使用)
<constant name = "struts.i18n.encoding" value = "utf-8"></constant> <!-- 可以帮助我们解决post请求乱码问题,等效于request.setCharEncoding("UTF-8") --> <constant name = "struts.action.extension" value = "action"></constant> <!-- 指定struts2框架路径的扩展名,即访问路径中后缀为.action才可以拦截执行struts2框架,该常量原默认值为"action,,"表示有后缀action和没有后缀都可以被过滤器拦截执行 --> <constant name = "struts.devMode" value = "true"></constant> <!-- 配置为true,他会提供更加详细的报错信息,以及在struts.xml修改后不再需要重启服务器 --> <constant name = "struts.enable.DynamicMethodInvocation" value = "true"></constant> <!-- 开启动态方法调用 --> 注意:后加载的配置文件中的常量会将先加载的常量覆盖掉。Struts2的Action详解
struts2中的action,主要是完成业务逻辑操作,action替代在servlet中完成的作用。
如何创建一个action
action类的三种创建方式 1.创建一个pojo类(plani ordinary java objec 简单的java对象) pojo类就是没有implements任何接口没有extends任何类 优点:无耦合 缺点:所有功能都需要自行完成 2.创建一个类实现Action接口 com.opensymphony.xwork2.Action 在Action接口中定义了五个常量(ERROR,INPUT,LOGIN,NONE,SUCCESS),一个execute方法。 五个常量:他们是默认的五个结果视图。 ERROR:错误视图 INPUT:它是struts2框架中interceptor中发现问题会访问的一个视图 LOGIN:登陆视图,可以在权限操作中使用 NONE:它代表null,什么都不做,也不会做跳转。 SUCCESS:成功视图。 优点:耦合度低 缺点:还是需要自行来完成功能。 3.创建一个类继承ActionSupport类 com.opensymphony.xwork2.ActionSupport ActionSupport也实现了Action接口 我们在开发中一般会使用这种方案: 优点:具有丰富的功能,例如,表单校验,错误信息设置,国际化 缺点:耦合度高如何访问一个action 1.直接通过<action>标签来配置,通过method来指定访问的方法,如果没有method方法,默认访问execute方法。 2.简化的action访问方式,可以使用*通配符。 <action name = "*_*" class = "cn.com.{1}Action" method = "{2}"></action> 3.扩展-动态方法调用:(不建议使用) 访问路径 感叹号 执行方法 eg:localhost:8080/struts2/User!login 这是struts2中提供的动态方法调用。 注意:对于struts的动态方法调用,要想使用我们必须配置一个常量来开启动态方法调用:[struts.enable.DynamicMethodInvocation = true]