Struts2笔记 - 01 入门

Posted 完齿猪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2笔记 - 01 入门相关的知识,希望对你有一定的参考价值。


• Struts2的概念

    Struts是流行和成熟的基于MVC设计模式的Web应用程序框架,为了帮助我们减少在运用MVC设计模型来开发Web应用时间。

    Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构。最初,是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。不久之后,Webwork框架和Struts社区联合创造了现在流行的Struts2框架。

  

    Struts2 是一个MVC拉动的(或MVC2)框架,Struts2 的模型-视图-控制器模式是通过以下五个核心部分进行实现的:

    ·操作(Actions)

    ·拦截器(Interceptors)

    ·值栈(Value Stack)/OGNL

    ·结果(Result)/结果类型

    ·视图(View)



• 环境准备

    运行struts2的环境要求

    · Servlet API 2.4 或以上

    · JSP API 2.0 或以上

    · Java JDK 1.5 或以上

    · struts2 Jar 包


    Struts官方网站:

http://struts.apache.org/

    历史版本:

http://archive.apache.org/dist/struts/

Struts2笔记 - 01 入门

    我下载的是struts-2.5.20,all版本,包括:

Struts2笔记 - 01 入门

    apps: 用于存放官方提供的 Struts2 示例程序,这些程序可以作为学习者的参考资料。各示例均为 war 文件,可以通过 zip 方式进行解压。

    docs: 用于存放官方提供的 Struts2 文档,包括 Struts2 的快速入门、Struts2 的文档,以及 API 文档等内容。

    lib:  用于存放 Struts2 的核心类库,以及 Struts2 的第三方插件类库。

    src:  用于存放该版本 Struts2 框架对应的源代码。



• 第一个案例

    · 添加核心jar包:

Struts2笔记 - 01 入门


    · 配置web.xml,Struts2 的核心过滤器

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>


    · 创建 Action 类

public class HelloWorldAction extends ActionSupport {
@Override
public String execute() throws Exception {
  System.out.println("执行 HelloWorldAction ");
  return SUCCESS;
}
}


    · 创建struts.xml

<struts>
  <package name="default" namespace="/" extends="struts-default">
    <action name="helloworld" class="com.ex01base.action.HelloWorldAction">
      <result>/ex01/result.jsp</result>
    </action>
  </package>
</struts>


    · 创建JSP

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Demo</title>
</head>
<body>
  This is a result jsp.
</body>
</html>


http://localhost:8088/Demo_Struts2/helloworld.action

    当在浏览器输入网址,.action是struts2默认的后缀,然后在struts.xml 查找action name="helloworld" ,安装class的路径找到HelloWorldAction.java。

Struts2笔记 - 01 入门

    运行HelloWorldAction.java,在控制台打印,并返回SUCCESS,因为extends ActionSupport,所以其实SUCCESS这个全局变量是"success"字符串。

    当<result>的默认返回类型是"success",就跳到/ex01/result.jsp页面。




• Struts2的工作原理

    一个请求在 Struts2 框架中的处理大概可以分为以下几个步骤:

   这个图是旧的,在Struts2 2.1.2 前用的是FilterDisPatcher,2.1.3 之后用的是StrutsPrepareAndExecuteFilter。目的是在执行action之前执行StrutsPrepareAndExecuteFilter。

    (1) 客户端浏览器发送一个请求(HttpServletRequest)。

    (2) 这个请求经过一系列的过滤器(Filter,例如ActionContextCleanUp,这些都是可选的)

    (3) 程序会调用 StrutsPrepareAndExecuteFilter,然后询问 ActionMapper 这个请求是否需要调用某个 Action。

    (4) 如果 ActionMapper 要调用某个 Action(.Action结尾的),StrutsPrepareAndExecuteFilter 会把请求的处理交给 ActionProxy。

    (5) ActionProxy 通过配置管理器(Configuration Manager)从配置文件(struts.xml)中读取框架的配置信息,从而找到需要调用的 Action 类。

    (6) ActionProxy 会创建一个 ActionInvocation 的实例。

    (7) ActionInvocation 使用命名模式调用 Action,在调用 Action 前,会依次调用所有配置的拦截器(Intercepter1、Intercepter2……)。

    (8) 一旦 Action 执行完,则返回结果字符串,ActionInvocation 就会负责查找结果字符串对应的 Result,然后执行这个 Result。通常情况下 Result 会调用一些模板(JSP 等)呈现页面。

    (9) 产生的 Result 信息返回给 ActionInvocation,在此过程中拦截器会被再次执行(顺序与 Action 执行之前相反)。

    (10) 最后产生一个 HttpServletResponse 的响应行为,通过 StrutsPrepareAndExecuteFilter 反馈给客户端。



• Struts2 配置文件

    ▪ web.xml文件

    文件是一种J2EE配置文件,决定servlet容器的HTTP元素需求如何进行处理。它严格来说不是一个Struts2 配置文件,但它是Struts2 运作所需要进行配置的文件。

    ▪ struts.xml 

    struts.xml是Struts2 框架的核心配置文件,包括:

    (1) 全局属性

    (2) 用户请求和相应Action之间的对应关系

    (3) Action可能会用到的参数和返回结果

    (4) 各种拦截器的配置


    ▪ struts.xml 元素说明

    · dtd 是约束struts.xml中可以有哪些标签不能有哪些标签

<!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
          "http://struts.apache.org/dtds/struts-2.5.dtd">

    · <struts> 元素是文件的根元素,所有其他元素都放在 <struts></struts> 中。

    · <include> 元素用于在一个 struts.xml 配置文件中包含其他的配置文件。

    · <constant> 元素用于进行常量配置。

    · <package> 元素用于进行包配置,在 Struts2 框架中,包用于组织 Action 和拦截器interceptors等信息,每个包都是由零个或多个拦截器以及 Action 所组成的集合。

    package的名字必须是唯一的,其中可以包含一些子元素:

    package="" 提供了将多个Action组织成为一个模块的方式,

    extends="" 继承的父类的名称

    abstract="" 设置package的属性为抽象,抽象的package不能定义action的值 

http://localhost:8088/Demo_Struts2/test/xxx.action

    package 里面的元素必须按照一定的顺序排列:

    <result-types>

    <interceptors> 拦截器

    <default-interceptor-ref> 默认的拦截器

    <default-action-ref> 

    <default-class-ref>

    <global-results> 全局返回结果类型

    <global-exception-mappings>

    <action>(所有的action放到最后) 



    · Struts2 Action动作

    struts.xml关于action定义的片段如下:

<action name="userAction" class="com.action.UserAction" method="add">
...
</action>

    当访问 url:

http://localhost:8088/项目名称/userAction.action

    就会访问到com.action.UserAction的方法add(),如没有method没有写的话,就会访问默认的方法execute()。如果有命名空间的话,则需要访问:

http://localhost:8088/项目名称/命名空间/userAction.action



    · Struts2 拦截器

    拦截器在概念上与servlet过滤器或JDK代理类相同。拦截器允许横切功能,把action以及框架分开实现。你可以使用拦截器实现以下操作:

    (1) alias  允许参数在请求之间使用不同的别名。

    (2) checkbox  通过为未检查的复选框添加参数值false,以辅助管理复选框。

    (3) conversionError  将字符串转换为参数类型的错误信息放置到action的错误字段中。

    (4) createSession  自动创建HTTP会话(如果尚不存在)。

    (5) debugging  为开发人员提供一些不同的调试屏幕。

    (6) execAndWait  当action在后台执行时,将用户发送到中间的等待页面。

    (7) exception  映射从action到结果抛出的异常,允许通过重定向自动处理异常。

    (8) fileUpload  便于文件上传。

    (9) i18n  在用户会话期间跟踪选定的区域。

    (10) logger  通过输出正在执行的action的名称提供简单的日志记录。

    (11) params  设置action上的请求参数。

    (12) prepare  这通常用于执行预处理工作,例如设置数据库连接。

    (13) profile  允许记录action的简单分析信息。

    (14) scope  在会话或应用程序范围内存储和检索action的状态。

    (15) ServletConfig  提供可访问各种基于servlet信息的action。

    (16) timer  以action执行时间的形式提供简单的分析信息。

    (17) token  检查action的有效性,以防止重复提交表单。

    (18) validation  提供action的验证支持。



    ·  Struts2 结果类型

    <results>标签在Struts2 MVC框架中扮演视图的角色。Action负责执行业务逻辑,下一步就是使用<results>标签显示视图。

    下一章有详细的讲解。


    ▪ struts.properties

    是struts2框架的全局属性文件,自动加载。该文件包含很多key-value对。但该文件,完全可以配置在· struts.xml 的constant元素中。

#制定默认编码集,对于请求参数带有中文的情况应该设置成gbk.gb2312,默认值utf-8
struts.i18n.encoding=utf-8
#是否每次HTTP请求到达时,都重新加载国际化资源文件,默认为false
struts.i18n.reload = true
#但struts.xml改动后,是否重新加载该文件,在开发阶段建议设置成true,提高开发效率,默认为false
struts.configuration.xml.reload=true
#是否使用struts2的开发模式,可获得更多报错信息,便于调试,在开发阶段设置为true,默认为false
struts.devMode =true
#设置浏览器是否缓存静态页面,开发阶段设置为false,以获得服务器最新响应,默认为true
struts.serve.static.browserCache=true
#指定后缀为.action形式的请求可以被struts2处理,可配置多个请求后缀,比如.do,struts等,配置多个后缀名用逗号隔开
struts.action.extendsion=action,do,struts2,
#配置服务器运行时的端口号,一般情况下该属性不用修改,如果端口号占用则重新分配端口号,默认为80
struts.url.http.port = 8080




以上是关于Struts2笔记 - 01 入门的主要内容,如果未能解决你的问题,请参考以下文章

struts2--笔记

struts2之day01——02入门案例

LearnOpenGL 笔记 - 入门 04 你好,三角形

struts2笔记01-环境搭建

学习笔记:python3,代码片段(2017)

Struts2入门