struts2初步使用及详解
背景
前段时间,自己搭建了个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初步使用及详解相关推荐
- struts2+hibernate+spring配置详解
#struts2+hibernate+spring配置详解 struts2+hibernate+spring配置详解 哎 ,当初一个人做好难,现在终于弄好了,希望自学这个的能少走些弯路. 以下是自己配 ...
- Struts2零配置属性详解(2)
2019独角兽企业重金招聘Python工程师标准>>> Struts2 零配置属性详解 一.插件包 直接引入myEclipse里面的struts code 包即可. struts2- ...
- Struts2之struts2文件上传详解
一.学习案例:通过在uploadfile.jsp页面填写完表单,提交后跳转到success.jsp页面,然后验证upload包下上传文件是否成功. 二.案例分析:struts2文件上传并不是表面上看的 ...
- Struts2的OGNL标签详解
一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...
- struts2 18拦截器详解(五)
I18nInterceptor 该拦截器处理defaultStack第四的位置,是用来方便国际化的,如果说我们的一个Web项目要支持国际化的话,通常的做法是给定一个下拉框列出所支持的语言,当用户选择了 ...
- Struts2的properties配置文件详解
### 指定加载struts2配置文件管理器,默认为org.apache.struts2.config.DefaultConfiguration ### 开发者可以自定义配置文件管理器,该类要实现Co ...
- struts2处理请求流程详解
struts2大概分为两块:一是struts2系统初始化,二是struts2处理请求,对请求作出响应. 下面就说说个人对struts2对请求处理流程的理解: 下面是StrutsPrepareAndEx ...
- struts2教程--标签库详解
struts2 标签库 tag-reference.html 就是 struts2标签规范 一. 通用标签库 的学习 <s:property> 解析ognl表达式,设置默认值,设置内容是否 ...
- 【struts2】struts2中的Action详解
在传统的MVC框架(如struts1.Spring等)中,Action都需要实现特定的接口,这些接口都是MVC框架定义的,实现MVC的接口会与MVC框架耦合.struts2的Action要灵活得多,可 ...
最新文章
- 电脑计算机无法找到脚本文件夹,win10系统开机出现无法找到脚本文件的设置办法...
- 富士通服务器安装操作系统,富士通平板u盘安装系统教程
- asp.net常用函数 选择自 UAM_Richard 的 Blog
- 战网服务器修改 win8,如何修改战网客户端?修改战网客户端的方法
- java plugin firefox_Firefox 中使用 Java 插件
- 软件开发模型2:增量模型/螺旋模型/敏捷模型
- Matlab论文插图绘制模板—柱状图(单组多色)
- 微信支付V3之投诉回调API封装
- Ceph Calamari软件包介绍
- MySQL数据库输入密码后闪退问题的解决方法
- 原来做图标这么简单!
- 【华为OD机试真题 JAVA】热点网站统计
- laravel 事务_【钢结构建筑】gmp建筑师事务所 | 杭州铁路南站
- java批量去除pdf签名,删除签名图标
- 票据OCR扫描仪-助力财务智能化
- MapReduce初体验——统计指定文本文件中每一个单词出现的总次数
- 美国高清晕渲地形图分享,每一幅都值得珍藏
- InDesign CS3 常用的字体
- 【预测模型-ElM分类】基于松鼠算法优化ElM神经网络实现数据分类附matlab代码
- C\C++刷题ADY3
热门文章
- 奈飞Netflix客户端推荐:Clicker for Netflix mac版
- Android Magazine App Maker Pro(简介及汉化版下载)
- 吃野生动物真的是“猎奇”的生物本能驱动的?
- 在matlab中的循环语句,matlab中循环语句
- 华为手机如何更新鸿蒙系统_华为鸿蒙2.0系统怎么升级_华为手机鸿蒙系统怎么升级...
- JAVA实现在键盘上输入一串字符,判断输入各类型字符的数量
- 7月27号王者荣耀进服务器未响应,王者荣耀体验服7月27日更新公告 修复普通攻击BUG...
- 生态碳汇涡度通量数据分析
- MPI和OpenMP混合编程实例
- mybatis 插件查询指定列