MVC介绍 :Java Web应用的结构,Model1和Model2
Model1:大量的JSP页面和少量的JavaBean(实体以及数据库操作)
Model2:ServletJavaBean、JSP视图层
MVC特征 :一个模型可以对应多个视图
显示逻辑和模型返回的数据分离
分层降低的程序的耦合度,提高了扩展性
MVC框架 :按照执行效率排序:JSP+Servlet>Struts1>Spring MVC>Struts2+FreeMarker>Struts2+OGNL+值栈
如果按照开发效率,则和以上排序相反,注意Spring MVC和Struts2基本一致
Struts2简介:是一个基于MVC的Web程序应用框架,分为三个组件:模型、视图、控制器。
Struts2优势:
- 结构清晰,使开发者只关注业务逻辑实现即可
- 提供了丰富的标签,大大提高了开发效率
- 提供页面导航,通过配置文件把握整个系统各部分之间的联系,便于后期维护
- 不在依赖于Servlet API,便于测试
搭建Struts2环境
- 导入Jar包
- 修改Web.xml配置文件(添加核心过滤器)
- 在<web-app>标签添加:
<filter>
<filter-name>Struts2</filter-name>
<filter-class>
org.apache.Struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 在资源目录SRC下创建添加struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
</struts>
使用Struts2输出“Hello Struts”
- 添加并实现Action类
- 在Struts.xml中配置<action>以及<result>
实现Action类三种方法:
- 使用普通的Java类,编写public String execute()方法
- 实现Action接口,实现execute()方法
- 继承ActionSupport类,重写execute()访法(最常用),提供其他的有用方法,如国际化相关,表单验证,异常提示等其他功能
在Struts2中控制器分为俩部分
- 核心控制器:他就是在web.xml配置的StrutsPrepareAndExecuteFilter,负责过滤所有的用户请求,根据请求不同,分发给不同的Action处理
- 业务控制器:它就是Action,负责调用模型来实现请求的业务,并把结果交给视图来展示
在Action中接受用户上传的参数实现方式有三种
- 属性方式接受参数
- 定义属性来接收客户端上传的参数
- JavaBean方式接受参数
- 定义实体类对象来接收客户端上传的参数
- ModelDriven方式接受参数
- 实现ModelDriven接口来接收客户端上传的参数
1.method属性:可以通过<action>中的method属性来实现多个方法对不同的请求分别进行处理。
- 使用method属性指定调用的方法
- 动态方法调用(不推荐使用,有安全隐患)
2.使用通配符简化<action>的配置
1.在<action>使用通配符
2.有通配符时<action>的匹配顺序
3.<package>的namespace属性
1.在<package>中使用namespace属性
2.多个namespace是<action>的匹配顺序
4.使用<include>包含配置文件
1.不方便管理,拆分多个配置文件
<result>的配置
- <result>的name属性
- 根据Action中方法返回值跳转到不同页面
- <result>的type属性
- dispatch:默认采用转发
- redirect:使用type属性重定向到结果页面
- china:转发到action,action的链式处理
- redirectAction:重定向到action
- stream:返回一个inputStram,一般用于文件下载
- json:返回一个JSON格式的数据,一般用于用户ajax
3. dispatcher与redirect的区别(和转发和重定向区别一样):
1.dispatcher转发形式,把参数等资源转发给本资源
2.redirect重定向到指定URL,参数等资源丢失
4.redirect与redirectAction的区别
1.redirect跳转页面或Action;可以跳转到本应用的内部或外部
2.redirectAction跳转到Action;只能跳转到本应用程序内部
全局结果配置
跳转到公共错误页面,例如:
<global-results>
<result name=”/error.jsp”</result>
</global-results>
动态结果的配置
实现Action值,在struts.xml文件中取出nextDispose的值,并根据它跳转到相应的页面。
异常映射的配置
例如:
<global-exception-mappings>
<exception-mapping result="error1" exception="java.lang.NullPointerException">
</exception-mapping>
<exception-mapping result="error2" exception="java.sql.SQLException">
</exception-mapping>
</global-exception-mappings>
解释:在<package>中的<ation>的处理方法中如果抛出了NullPointerException,会跳转到/error1.jsp页面;如果抛出SQLException,就会跳转到/error2.jsp页面。
补充:
解决乱码:
修改struts.xml,添加代码<constant name="struts.i18n.encoding" value="编码格式" />
页面显示:
<%@taglib uri="/struts-tags" prefix="s"%>
<s:property value="属性名"/>
Struts2
- 为项目添加Struts2支持
- 使用struts2源文件app/sturts-blank示例中的所有jar包
- 在web.xml中添加Struts2的核心过滤器
- 添加Struts2的配置文件,在apps/struts-blank/WEB-INF/classes
- Struts2运行原理(流程)
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
- 参数传递方式
- 属性方法
- JavaBean
- struts.xml配置
- 常量属性
- 动态方法调用
- 开发模式
- 包配置
- 命名空间
- 全局结果以及异常映射
- 拦截器(以后讲)
- 管理action
- 分割xml文件