Jaxson

Jaxson 关注TA

Jaxson

Jaxson

关注TA

  •  未知地区
  • 未知工作
  • 写了16,887字

该文章投稿至Nemo社区   Java  板块 复制链接


Struts 2基础知识杂记

发布于 2016/03/11 15:50 1,571浏览 0回复 7,589

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简介:是一个基于MVCWeb程序应用框架,分为三个组件:模型、视图、控制器。

Struts2优势:

  1. 结构清晰,使开发者只关注业务逻辑实现即可
  2. 提供了丰富的标签,大大提高了开发效率
  3. 提供页面导航,通过配置文件把握整个系统各部分之间的联系,便于后期维护
  4. 不在依赖于Servlet API,便于测试

搭建Struts2环境

  1. 导入Jar
  2. 修改Web.xml配置文件(添加核心过滤器)
    1. <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>

  1. 在资源目录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

  1. 添加并实现Action
  2. Struts.xml中配置<action>以及<result>

实现Action类三种方法:

  1. 使用普通的Java类,编写public String execute()方法
  2. 实现Action接口,实现execute()方法
  3. 继承ActionSupport类,重写execute()访法(最常用),提供其他的有用方法,如国际化相关,表单验证,异常提示等其他功能

Struts2中控制器分为俩部分

  1. 核心控制器:他就是在web.xml配置的StrutsPrepareAndExecuteFilter,负责过滤所有的用户请求,根据请求不同,分发给不同的Action处理
  2. 业务控制器:它就是Action,负责调用模型来实现请求的业务,并把结果交给视图来展示

Action中接受用户上传的参数实现方式有三种

  1. 属性方式接受参数
    1. 定义属性来接收客户端上传的参数
  2. JavaBean方式接受参数
    1. 定义实体类对象来接收客户端上传的参数
  3. ModelDriven方式接受参数
    1. 实现ModelDriven接口来接收客户端上传的参数

1.method属性:可以通过<action>中的method属性来实现多个方法对不同的请求分别进行处理。

  1. 使用method属性指定调用的方法
  2. 动态方法调用(不推荐使用,有安全隐患)

2.使用通配符简化<action>的配置

       1.<action>使用通配符

       2.有通配符时<action>的匹配顺序

3.<package>namespace属性

       1.<package>中使用namespace属性

       2.多个namespace<action>的匹配顺序

4.使用<include>包含配置文件

       1.不方便管理,拆分多个配置文件

 

<result>的配置

  1. <result>name属性
    1. 根据Action中方法返回值跳转到不同页面
  2. <result>type属性
    1. dispatch:默认采用转发
    2. redirect:使用type属性重定向到结果页面
    3. china:转发到action,action的链式处理
    4. redirectAction:重定向到action
    5. stream:返回一个inputStram,一般用于文件下载
    6. 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

  1. 为项目添加Struts2支持
    1. 使用struts2源文件app/sturts-blank示例中的所有jar
    2. web.xml中添加Struts2的核心过滤器
    3. 添加Struts2的配置文件,在apps/struts-blank/WEB-INF/classes
  2. Struts2运行原理(流程)
            在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中的配置找到对应的返回结果。
  1. 参数传递方式
    1. 属性方法
    2. JavaBean
  2. struts.xml配置
    1. 常量属性
      1. 动态方法调用
      2. 开发模式
    2. 包配置
      1. 命名空间
      2. 全局结果以及异常映射
      3. 拦截器(以后讲)
      4. 管理action
    3. 分割xml文件

访问Servlet API--Struts解耦和方式,将传统ServletAPI映射为Map<String,Object>对象
    1.方法1:创建ActionContext对象,getSession()...
    2.方法2:IOC方式,实现RequestAware,SessionAware等接口,重写方法
    3.耦合方式
本文标签
 {{tag}}
点了个评