Struts2简介

Struts2框架的作用

  • Struts2是一个基于MVC设计模式的Web应用框架
  • 它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。
  • Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。
  • 其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。
  • Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

常见web层的框架

  • Struts2
  • Struts1
  • Webwork
  • SpringMVC

web框架特点

基本前端控制器模型来设计

  • 浏览器发送的所有的请求,都需要经过前端控制器
  • 前端控制器再根据具体的请求所要实现的功能,分发到不同的action来处理
  • 所有的分发操作都是框架自动帮你完成的
  • 我们只需要关心数据怎么样处理。封装,接收这些都不用管
  • 其余的操作都是前端控制器来帮你完成

前端控制器

  • 所有的请求都要处理
  • 是通过过滤器来实现的
  • 过滤器当中会有接收数据,封装数据,把所有的东西都帮你处理好,最后到action当中就可以直接使用了

Struts2基本使用

1.下载strusts框架

https://struts.apache.org/

2.目录结构

  • apps

    • Struts2提供的应用,war文件:web项目打成war包。直接放入到tomcat可以运行
    • 里面就是一个最简单的一个项目,有strust2所需要的jar包
  • docs
    • Struts2的开发文档和API
  • lib
    • Strtus2框架的开发的jar包
  • src
    • Struts2的源码

3.创建一个web工程

4.引入jar包

jar包有很多,引入核心jar包即可,右面有需要再引入。

核心jar包

5.在工程当中创建一个jsp

在jsp当中写上一个连接,发送一个请求

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="hello.action">hello struts</a>
</body>
</html>

6.编写Action类

  • 在src当中创建一个普通的类

  • 在类当中提供一个方法,方法名称是固定的

    public String execute(){ }

  • 底层会使用反射执行此方法

public String execute(){
System.out.println("我已经接收到了请求");
return null;
}

7.创建Struts配置文件

  • 在src当中创建一个配置文件strust.xml
  • 此文件可以在blank项目的classes目录下找到

8.配置Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts> <package name="struts" extends="struts-default">
<action name="hello" class="com.xzh.struts2.HelloAction" />
</package>
</struts>

9.配置前端控制器

  • 没有前端控制器,就没有办法执行action
  • 因为Stusts这些功能都是有前端控制器来给我们提供的
  • 它是有一个过滤器来实现的
  • 所以要去配置一个过滤器
  • 到web.xml当中配置核心过滤器
<filter>
<filter-name>action2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>action2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  • 配置完运行,即可执行到创建的MyAction类中的excute方法

10.在Action当中excute中返回一个Success

public class HelloAction {
public String execute() {
System.out.println("我已经接收到了请求");
return "success";
}
}

11.改写strust.xml,配置页面跳转

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts> <package name="struts" extends="struts-default">
<action name="hello" class="com.xzh.struts2.HelloAction">
<!-- 结果页 -->
<result name="success">/myxq.jsp</result>
</action>
</package>
</struts>

Struts2执行流程

Struts2配置

struts2的加载顺序

  • 在struts2当中可以有很多地方可以配置常量
  • 配置的常量,哪一个地方生效,就跟加载顺序有关
  • 加载示例图

配置文件加载顺序

  • init_DefaultProperties() : 加载default.properties
  • init_TraditionalXmlConfigurations(); : 加载struts-default.xml、struts-plugin.xml、struts.xml
  • init_LegacyStrutsProperties(); : 加载struts.properties
  • init_CustomConfigurationProviders(); : 加载配置提供类
  • init_FilterInitParameters() ; : 加载web.xml中过滤器初始化参数
  • init_AliasStandardObjects() ; : 加载Bean对象
  • 配置文件加载顺序
    • default.properties
    • struts-default.xml
    • struts-plugin.xml
    • struts.xml
    • struts.properties
    • web.xml
    • 后配置的常量的值会覆盖先配置的常量的值

Package

  • 包,这个包与Java中的包的概念不一致。包为了更好管理action的配置

属性

  • name

    • 包的名称,只有在一个项目中不重名即可。
  • extends

    • 继承哪个包,通常值为struts-default。
    • 默认我们继承的是Struts-default
    • 在这个包当中,定义了很多结果类型和很多的拦截器,继承了这些东西之后,action才有了这些功能
  • namespace

    • namespace+name共同决定了访问路径
    • 名称空间有三种写法
      • 带名称的名称空间 namespace=”/aaa”
      • 根名称空间 namespance=”/”
      • 默认名称空间 namespace=””
  • abstract

    • 抽象的,用于其他包的继承
    • 现在这个包想被别人继承,设置abstract值为true
    • 设置成abstract后就不能用自己运行了

action

  • 配置Action类。

属性

  • name

    • 与namespace共同决定访问路径
  • class
    • Action类的全路径
  • method
    • 执行Action中的哪个方法的方法名,默认值execute
  • converter
    • 用来自定义类型转换器,一般不设置,内部提供的转换器已经够用

常量配置

  • 在Struts2的框架中,提供了非常多的常量,在default.properties
  • struts.i18n.encoding=UTF-8
    • Struts2中所有的post请求的中文乱码不用处理。
  • struts.action.extension=action,,
    • Struts2请求的默认的扩展名。默认扩展名是.action或者什么都不写。
  • 在Struts2中修改一些常量的值
    • 在default.properties当中的值是不允许直接修改的

    • 修改常量的值,可以有三个位置进行修正

      • struts.xml中进行修改:通过<constant>标签

      • struts.properties中进行修改:自己新建的, 只能修改常量,基本不使用

      • web.xml中进行修改:通过过滤器的初始化参数来修改常量

    • 后面的会覆盖前面的内容

include

  • 在一个配置文件当中引入其它的配置文件

  • 以后做团队开发时,很多人都需要去修改配置文件

  • 防止被改乱,可以单独的创建一个配置文件

  • 在主配置文件当中引入创建的配置文件

Action执行访问

Action类写法

1.Action类是POJO的类

自己手动实现execute方法

2.Action类实现一个Action的接口

  • 实现接口时,会让你覆盖execute方法
  • 在此接口当中定义了5个常量(逻辑视图)
    • String SUCCESS = "success";

      成功
    • String NONE = "none";

      没有跳转
    • String ERROR = "error";

      失败
    • String INPUT = "input";

      表单校验时出错
    • String LOGIN = "login";

      登录出错页面跳转
  • 示例

3.Action类继承ActionSupport类

  • 推荐使用此方式
  • Actionsupport当中提供了很多功能,数据校验,国际化等一系列操作方法
  • 示例

Action方法

Method访问

使用方法



public String add(){
System.out.println("添加");
return null;
}
public String delete(){
System.out.println("删除");
return null;
}
public String update(){
System.out.println("修改");
return null;
}
public String find(){
System.out.println("查找");
return null;
}
弊端

要写多个action标签

通配符

要求
  • 访问路径当中要包含执行的方法
  • 使用通配符调用方法时,内部会验证是否允许访问该方法,所以要在Action中加上
<allowed-methods>允许访问的方法</allowed-methods>

<global-allowed-methods>允许包中全局访问的方法</global-allowed-methods>
  • goods_* : method="{1}" 其中1为第一个*的内容
  • _ : class="com.myxq.struts.{1}" method={2}
使用方法





动态方法访问

要求
  • 默认是关闭状态,要想使用的话,必须得要通过修改常量来打开
  • 使用通配符调用方法时,内部会验证是否允许访问该方法,所以要在Action中加上
  • 使用方法





Struts2 (上)的更多相关文章

  1. Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

    Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...

  2. [JavaWeb基础] 009.Struts2 上传文件

    在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因 ...

  3. 利用struts2上传文件时,如果文件名中含有-符号,那么会出错

    利用struts2上传文件时,如果文件名中含有-符号,那么会出错 报错如下: HTTP Status 500 - C:\Program Files\Apache Software Foundation ...

  4. struts2上传的问题

    5. 在这里我加一个struts2的一个上传验证的问题 上传时我们可以这样来验证 //判断上传的文件是否合要求 public boolean filterType(String []types){ / ...

  5. struts2上传文件添加进度条

    给文件上传添加进度条,整了两天终于成功了. 想要添加一个上传的进度条,通过分析,应该是需要不断的去访问服务器,询问上传文件的大小.通过已上传文件的大小, 和上传文件的总长度来评估上传的进度. 实现监听 ...

  6. 关于Struts2上传文件的最大Size的设置

    今天使用Struts2的文件上传控件时,在struts.xml中,将处理上传的action中的fileUpload拦截器的maximumSize参数设置为5000000,上传了一个3M的文件后发现控制 ...

  7. struts2上传下载

    struts上传下载必须引入两个jar文件: commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件 import java.io.BufferedI ...

  8. 菜鸟学SSH(五)——Struts2上传文件

    上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...

  9. struts2 上传下载文件,异常处理,数据类型转换

    一,web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=" ...

  10. struts2上传单个文件

    项目目录: struts.xml配置: <constant name="struts.enable.DynamicMethodInvocation" value=" ...

随机推荐

  1. Multiple HTTPS Bindings IIS 7 Using appcmd

    http://toastergremlin.com/?p=308 Sometimes when using a wildcard SSL or Unified Communications Certi ...

  2. qt 零星笔记

    1.qt中堆栈对象的销毁 名字不对,我不知道该取个什么名字,暂且这样吧 在linux c编程中谈到过进程的内存映像,一个进程在内存中的映像如下

  3. 邮件伪造测试-Swaks

    1. 前言 在kali中自带一个邮件伪造工具Swaks,工具项目主页为 http://jetmore.org/john/code/swaks 2.基本用法: swaks --to --from --e ...

  4. mysql insert锁机制【转】

    最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...

  5. 正则表达式基础->

    描述:(grep) 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于两个正斜杠之间,它匹配被查找的行中任何位置出现的相同模式 基础正则表达式 正则表达式 描 ...

  6. ARKit从入门到精通

    ARKit从入门到精通(10)-ARKit让飞机绕着你飞起来 ARKit从入门到精通(9)-ARKit让飞机跟着镜头飞起来 ARKit从入门到精通(8)-ARKit捕捉平地 ARKit从入门到精通(7 ...

  7. if(a==1) & if(1==a) 区别

    [前提] 在公司参加项目时,看到前辈写if比较数值是否相等,经常会写 if(1==a) ,觉得有些奇怪,如是乎,将调查结果写下来记录一下. [结果] if(a==1) 与 if(1==a)是没有什么区 ...

  8. go 切片的 插入、删除

    package main import ( "fmt" ) func InsertSpringSliceCopy(slice, insertion []string, index ...

  9. 从bind函数看js中的柯里化

    以下是百度百科对柯里化函数的解释:柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.概念太抽象,可能 ...

  10. oracle一些笔记

    1.字符串类型字段 区分大小写 where table_name = 'MIDDLE' 2.execute immediate '' bulk collect into v_xxx_tab 3.列别名 ...