Struts2框架与Spring框架初解二
Struts2框架
使用Struts框架的执行过程:
发送一个请求 -> 先经过web.xml根文件 -> 有Struts2的核心过滤器
-> 到struts.xml -> 找到package -> package下的action -> 找方法
-> 先找class -> 找到method -> 根据返回值 匹配result
-> 如果result需要转发/重定向 -> 再去找网页资源
Struts2中的常量配置:
<!-- 动态请求** -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- 返回值response 和 本地编码格式 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 控制请求后缀 能否以 .action结尾
value的值 决定能以什么结尾
-->
<constant name="struts.action.extension" value="action"></constant>
<!-- 热加载 不需要重启服务器 就能让配置文件生效 -->
<constant name="struts.devMode" value="true"></constant>
Struts2中的动态请求:
<!-- 动态请求 -->
<package name="cal" namespace="/cal" extends="struts-default">
<!-- *是通配符 -->
<!-- struts2.5必须加上这句话 才能使用通配符 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="cal_*" class="com.lanou.controller.CalAction"
method="{1}">
<!-- 首先访问 cal_xxx这个请求路径
然后根据xxx 匹配{1}
如果 找到了xxx方法 就会运行xxx方法的代码
如果返回值 匹配 也会跳转到 xxx.html
-->
<result name="success">/{1}.html</result>
</action>
</package>
struts.xml中可以引入其他包里面的struts.xml的配置文件
相当于 将action分包写
<!-- 引入 引入其他包里面的配置文件 -->
<include file="com/lanou/entity/struts2.xml"> </include>
注: 只有将其他包的struts.xml配置文件引入src下的struts.xml配置文件,这个配置文件才会生效
struts请求参数获取
是通过在类里面写属性 并且需要get/set方法
那么 只需要统一页面的请求参数和属性名
就可以自动获取参数
Spring框架
spring的 IOC(控制反转) 和 DI(依赖注入)
详解原文地址:http://jinnianshilongnian.iteye.com/blog/1413846IOC - Inversion of Control "控制反转", 不是什么技术,而是一种设计思想.
从思想上发生了"主从换位"的变化,程序需要获取什么资源时不再主动出击,
而是被动的等待IOC容器来创建并注入它所需要的资源.
在Java开发中, IOC意味着将设计好的对象交给容器控制,而不是传统的在对象内部直接控制
控制 --- IOC容器控制了对象的创建,主要是控制了外部资源获取
反转 --- 容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象. 获取依赖对象的方式反转了
你需要什么,别自己创建,我来给你
即由IOC容器帮对象找相应的依赖对象,并注入,而不是由对象自己创建,避免了每次需要new创建对象时的浪费性能
DI - Dependency Injection "依赖注入",由容器动态的将某个依赖关系注入到组件之中.
依赖注入的目的并不是为软件系统带来更多功能,而是为了提升组件重用的频率,
为系统搭建一个灵活、可扩展的平台.
依赖 --- 应用程序依赖于IOC容器(配置依赖对象)
应用程序需要IOC容器来提供对象需要的外部资源
注入 --- IOC在应用程序需要的时候注入应用程序的依赖对象
注入的是所需要的外部资源(包括对象、资源、常量数据)
Spring不但可以创建普通对象,还可以创建List Map对象
<bean id="users" class="com.lanou.entity.User">
<property name="name" value="aaa"></property>
<property name="orders" >
<!-- list -->
<list>
<!-- 集合内部生成的对象 不能够被外界使用 -->
<bean id="order2" class="com.lanou.entity.Order">
<property name="orderName" value="lna"></property>
<property name="price" value="666"></property>
</bean>
<!-- 指向外部的对象 -->
<ref bean="order1"/>
</list>
</property>
<property name="info">
<map>
<entry key="idcard" value="123456"></entry>
<entry key="parent" value-ref="user1"></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="nickname">yyy</prop>
<prop key="age">5</prop>
</props>
</property>
</bean>
外部的集合内的对象
<bean id="order1" class="com.lanou.entity.Order">
<property name="orderName" value="大黄蜂"></property>
<property name="price" value="100"></property>
</bean>
得到IOC容器
ApplicationContext ac = new ClassPathXmlApplicationContext("application2.xml");
上一篇: spring与mybatis整合