1 什么是框架
框架是一个项目的半成品。在创建项目的时候,先把框架搭建起来,这样项目就完成了一些公共的功能。我们基于框架进行编写项目,就不用再关注公共功能了,只需要去写我们项目跟其他项目不一样的业务就可以。 公共的功能指的是:比如到数据库里面获取数据,再比如,收集表单中的数据。
程序开发过程中的半成品,解决项目开发过程中通用的问题,从而提高项目开发效率。
项目 = 框架 + 业务逻辑代码;
2 Struts2框架的介绍
Struts2框架用来完成MVC模式中控制器(Controller)部分,替换原项目中Servlet(XxxAction)部分代码。
Jsp+servlet+javabean
Servlet要做的事情
1.收参。2.参数的类型转换。3.参数封装成实体对象。
4.页面的跳转。视图的名称写死在控制器里面了。这样控制器和视图的耦合性就非常的高。
观察struts2官网上提供的资料:
3 Struts2的第一个案例
从浏览器发出一个请求,请求进入struts2的控制器,在控制器里面打印一句hello Struts2。页面跳转到一个index.jsp里面。
- 1.导入strust2相关的jar包。参考struts-2.3.15.1\apps\struts2-blank\WEB-INF\lib
- 2.在项目的web.xml里面配置struts2的核心控制器。
参考struts-2.3.15.1\apps\struts2-blank\WEB-INF\web.xml - 3.写控制器类。
- 4.对action进行配置。 需要你从空项目中去复制一个struts.xml配置文件放入到我们的src文件夹里面。 参考\apps\struts2-blank\WEB-INF\classes\struts.xml
复制后删除掉该文件中除了跟标签外的所有内容。
- 5、配置web.xml 作用:让struts2生效
- 6.测试。访问路径为: http://ip:port/appName/namespace/actionName
4、开发细节
1.struts.xml的配置
package标签和java中package的作用类似 java包package的作用:对class进行分门别类的管理 可以省略 struts2中package作用:对action进行分门别类的管理 不能省略 把相同模块的action放置到同1个包下 方便后期的维护工作 name:为 package标签起一个名字,作为唯一标识用 随便写 extends:要继承的父包 struts-default默认父包(规范) http://localhost:8989/struts2-day01/first
<struts> <package name="first" extends="struts-default"> <!-- 请求转发的跳转 --> <action name="testdis" class="com.macw.action.first.test"> <result name="ok" type="dispatcher">/index.jsp</result> </action> <!-- 重定向 --> <action name="red" class="com.macw.action.first.test"> <result name="ok" type="redirect">/index.jsp</result> </action> </package> <package name="test02" extends="struts-default" namespace="/test"> <action name="ok_*" class="com.macw.action.first.test" > <result name="m1">/index.jsp</result> </action> </package>
2、Struts2的工具类:ServletActionContext
用于获取Servlet中的request和response
5、补充:
1. action的访问方式:
a) http://ip地址:port/项目名/name属性值
http://localhost:8989/struts2-day01/login
b) http://ip地址:port/项目名/name属性值.action
http://localhost:8989/struts2-day01/login.action
2. MyEclipse中添加struts.xml的智能提示
Dtd(Document tType Define)文档类型定义
通常用于约束一个xml文件可以出现的内容以及次序。
A)从struts-core.jar中解压缩出struts-2.3.dtd
B)在MyEclipse中设置关联
6、 Struts2的底层的大致执行过程:
1.项目接受到所有的请求,请求都会去运行StrutsPrepareAndExecuteFilter
2.在过滤器中request.getRequestURi();得到/appName/namespace/actionName
3.通过字符串截断分别获取到请求的namespace和actionName
4.通过io读取struts.xml,通过namepace和actionName获取到ActionClass。
5.拿到actionClass通过反射生成一个Action对象。
6.调用action对象的execute方法,得到一个字符串。
7.再去读struts.xml看第六步的字符串对应到了哪一个jsp文件中。然后转发过去。