背景

前段时间,自己搭建了个s2sh的框架,为了把每个框架的细节给说明,我又将它分解成了单独的模块进行描述。那么首先,就讲解下这个struts2。

struts2与servlet

这个是不得不说的地方,简而言之,struts2是对servlet的封装,也就是在servlet的基础上开发出来的。struts2的核心就是拦截器,而这个与servlet的过滤器的功能基本相同。除了struts2是用于拦截action的,servlet是处理html,jsp等。

这里我暂且先介绍它们,之后我再想写下关于自己自定义拦截器。并且也用servlet来制作个demo,进行对比。我也好加强下印象。

核心包

struts2的核心包就几个,大家可以百度下。那么我主要拿出8个来用,一般都只用这5个,甚至还会更少。
  • struts2-core-2.1.8.1    struts2的核心jar包,不可缺少的
  • xwork-core-2.1.6    xwork的核心包,由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类

  • commons-fileupload-1.2.1.jar , commons-io.jar     struts的上传下载 两者缺一不可

  • commons-lang-3-3.1.jar    为java.lang包提供扩展
  • commons-logging-1.0.4    Jakarta的通用日志记录包
  • freemarker-2.3.15    FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
  • ognl-2.7.3    是支持ognl表达式

这些网络上都能查的到,那么我说说我自己对这些包的看法,我简而言之。尽量通俗点

一、struts2-core是核心包,无话可说。
二、xwork-core是核心包,struts是基础xwork编写的。
三、commons-lang是java.lang的拓展,主要是toString,enum枚举等,我没用到过。
四、commons-logging是日志包,用来打印日志和log4j差不多。一般我们会使用log4j。
五、freemarker是生成页面的模板,加载速度比jsp快很多。struts2的标签是freemarker写的。
六、ognl是表达式有基本的三种用法,如#request.userName相当于request.getAttribute("userName");

引用包

我这里用自己的私服去加载的,但是私服访问的除了中央仓库,还有阿里云的仓库。

http://maven.aliyun.com/nexus/content/groups/public/

不知道为什么开源中国的私服,我访问不了了。

<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.1.8.1</version>

这里我挺奇怪一点的,就是我只引用了一个struts核心包,为什么其他的核心包,都被加载了? 对于这个疑问,我个人认为是阿里云的私服做的贡献吧。我说的对吗?

maven加载后的图

只有一个引用,就这么多包。

配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- struts2的配置 -->
<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>
<welcome-file-list>
<welcome-file>jsp/index.jsp</welcome-file>
</welcome-file-list>
</web-app>

这是配置拦截器的。

  • 其中那个class是使用我们引用的struts2核心包中自带的类,是一个默认类。我们还可以自定义这个类。之后我再详解这个。

  • url-pattern 后的 /* , 是代表拦截类型。这个就代表着不管什么类型都是通过struts来拦截的。还可以写成

    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
    </filter-mapping>

    那么这个过滤器是可以写多个的。

struts.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="action.LoginAction" method="aString">
<result name="success">jsp/success.jsp</result>
<result name="error">jsp/error.jsp</result>
</action>
</package>
</struts>

struts标签前面的一如既往,复制就好。这个就是个协议。
namespace后面跟个斜杠,就是说明直接在拦截………额,不知道怎么说,我直接举个例子
比如我的项目叫做Struts2Test。那么我访问的地址是

http://localhost:8099/Struts2Test

那么我的namespace=“/”,就是拦截,比如一个login.action

http://localhost:8099/Struts2Test/login.action

那么如果我namespace=”/aaa”,仍然要拦截login.action我就只能拦截aaa下的login.action

http://localhost:8099/Struts2Test/aaa/login.action

这个就是可以拿来做权限控制。拦截了这个,返回的界面,也是要找到/aaa下的页面的。也就是/aaa/jsp/error.jsp

另外,如果package name=”default” namespace=”/”中,这个name修改为如:name=”test”,那么就会去找到,拦截test的action,如果不存在这个action,就回去默认下找,这个默认相当于namespace=”“为空。

http://localhost:8099/aaa/test.action,那如果在 namespace "/aaa" 下没有 test.action 会出现什么情况呢?Struts 还会尝试在默认 namespace,即 "" 下找 test。
好比,URL 是 localhost:8099/aaa/test.action 时,如果在 "/aaa/test" namespace 下找不到 test.action,也是到 "" (default namespace) 下找 test.action,但不会去 "/aaa" 下找。

action及jsp

login.action

```package actio
import com.opensymphony.xwork2.Action
public class LoginAction{private String uname; //表单中的姓名 private String upass; //表单中的密码 //执行方法 public String aString(){System.out.println(uname+"-----"+upass);return "success";}public String getUpass() { return upass; } public void setUpass(String upass) { this.upass = upass; } public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } }

action中的属性,从前台页面获取的,都需要用get,set方法。这个其实就是封装了request。用get,set方法更简便。但是要记住加上。
这个方法还可以实现Action类,直接使用它的execute,方法。这样就会自行运行,不需要在struts中设置method。

index.jsp

<body>
<form action="login"> 用户名:<input type="text"      name="uname"><br> 密 码:<input type="text" name="upass"><br>
<input type="submit" value="登陆" />
</form>

action提交的名字,记得和struts相对应,否则拦截不到了。

error.jsp与success.jsp

error.jsp

<body>失败</body>

success.jsp

<body>成功</body>

就这样,挂到tomcat上运行下,就能出结果啦。

关于用namespace作为权限控制的问题,到时候还可以继续探讨下,我只是初步描述了下用法。

struts2初步使用及详解相关推荐

  1. struts2+hibernate+spring配置详解

    #struts2+hibernate+spring配置详解 struts2+hibernate+spring配置详解 哎 ,当初一个人做好难,现在终于弄好了,希望自学这个的能少走些弯路. 以下是自己配 ...

  2. Struts2零配置属性详解(2)

    2019独角兽企业重金招聘Python工程师标准>>> Struts2 零配置属性详解 一.插件包 直接引入myEclipse里面的struts code 包即可. struts2- ...

  3. Struts2之struts2文件上传详解

    一.学习案例:通过在uploadfile.jsp页面填写完表单,提交后跳转到success.jsp页面,然后验证upload包下上传文件是否成功. 二.案例分析:struts2文件上传并不是表面上看的 ...

  4. Struts2的OGNL标签详解

    一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...

  5. struts2 18拦截器详解(五)

    I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...

  6. Struts2的properties配置文件详解

    ### 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration ### 开发者可以自定义配置文件管理器,该类要实现Co ...

  7. struts2处理请求流程详解

    struts2大概分为两块:一是struts2系统初始化,二是struts2处理请求,对请求作出响应. 下面就说说个人对struts2对请求处理流程的理解: 下面是StrutsPrepareAndEx ...

  8. struts2教程--标签库详解

    struts2 标签库 tag-reference.html 就是 struts2标签规范 一. 通用标签库 的学习 <s:property> 解析ognl表达式,设置默认值,设置内容是否 ...

  9. 【struts2】struts2中的Action详解

    在传统的MVC框架(如struts1.Spring等)中,Action都需要实现特定的接口,这些接口都是MVC框架定义的,实现MVC的接口会与MVC框架耦合.struts2的Action要灵活得多,可 ...

最新文章

  1. 电脑计算机无法找到脚本文件夹,win10系统开机出现无法找到脚本文件的设置办法...
  2. 富士通服务器安装操作系统,富士通平板u盘安装系统教程
  3. asp.net常用函数 选择自 UAM_Richard 的 Blog
  4. 战网服务器修改 win8,如何修改战网客户端?修改战网客户端的方法
  5. java plugin firefox_Firefox 中使用 Java 插件
  6. 软件开发模型2:增量模型/螺旋模型/敏捷模型
  7. Matlab论文插图绘制模板—柱状图(单组多色)
  8. 微信支付V3之投诉回调API封装
  9. Ceph Calamari软件包介绍
  10. MySQL数据库输入密码后闪退问题的解决方法
  11. 原来做图标这么简单!
  12. 【华为OD机试真题 JAVA】热点网站统计
  13. laravel 事务_【钢结构建筑】gmp建筑师事务所 | 杭州铁路南站
  14. java批量去除pdf签名,删除签名图标
  15. 票据OCR扫描仪-助力财务智能化
  16. MapReduce初体验——统计指定文本文件中每一个单词出现的总次数
  17. 美国高清晕渲地形图分享,每一幅都值得珍藏
  18. InDesign CS3 常用的字体
  19. 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码
  20. C\C++刷题ADY3

热门文章

  1. 奈飞Netflix客户端推荐:Clicker for Netflix mac版
  2. Android Magazine App Maker Pro(简介及汉化版下载)
  3. 吃野生动物真的是“猎奇”的生物本能驱动的?
  4. 在matlab中的循环语句,matlab中循环语句
  5. 华为手机如何更新鸿蒙系统_华为鸿蒙2.0系统怎么升级_华为手机鸿蒙系统怎么升级...
  6. JAVA实现在键盘上输入一串字符,判断输入各类型字符的数量
  7. 7月27号王者荣耀进服务器未响应,王者荣耀体验服7月27日更新公告 修复普通攻击BUG...
  8. 生态碳汇涡度通量数据分析
  9. MPI和OpenMP混合编程实例
  10. mybatis 插件查询指定列