struts2初步使用及详解
来源:互联网 发布:数据挖掘 推荐系统 编辑:程序博客网 时间:2024/06/05 22:54
背景
前段时间,自己搭建了个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 actioimport com.opensymphony.xwork2.Actionpublic 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的详解及使用
- Android Studio初步使用及HelloWorld详解
- struts2初步使用
- struts2的初步使用
- tomcat+servlet+android搭建及初步使用详解
- struts2.5初步使用教程
- Struts2配置与初步使用
- Struts2配置文件及详解
- EventBus使用详解(一)初步
- AJAX基础教程及初步使用
- Maven安装及初步使用
- mongodb安装及初步使用
- Dagger2初步使用及介绍
- Docker安装及初步使用
- Struts2初步
- Struts2初步
- Struts2初步
- Java8新特性浅析
- Alsa框架录音程序
- 嵌入式工程师入门的那些
- HihoCoder
- TCP三次握手与四次挥手
- struts2初步使用及详解
- 基于qwertySearch和T9Search实现的通讯录
- 【第一次写解题报告,,激动】POJ 1125【弗洛伊德算法-floyd算法】
- OC学习笔记之FoundationKit
- 关于Python的进程线程协程之threading模块(五)Time对象
- Day01-计算机基础
- Day02-操作系统与计算机网络
- Day03-Linux-常用命令
- Day04-Linux-用户和权限