Struts2学习(1)
struts2概述
1.struts2框架应用javaee三层结构中web层框架。
2.strut2框架在struts1和webwork基础之上发展全新的框架。
3.struts2解决的问题:

4.版本:struts2.3.24
5.web层常见框架
(1)struts2
(2)springMVC
Struts2框架入门
配置action类访问路径
(1)创建struts2核心配置文件
-核心配置文件名和位置是固定的,
-位置必须在src下面,名称struts.xml
(2)引入dtd约束
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
struts.xml基本配置
<struts>
<package name="hellodemo" extends="struts-default" namespace="/">
<!-- name:访问名称 -->
<action name="hello" class="cn.itcast.action.HelloAction">
<!-- 配置方法的返回值到页面 -->
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
配置struts2过滤器
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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <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>*.action</url-pattern>
</filter-mapping>
</web-app>
struts2执行过程
过滤器在服务器启动时创建。
1.在过滤器实现功能
①获取请求路径
②.得到路径里面的hello值
2.①到src下面找struts.xml,使用dom4j解析
②拿着hello值到xml文件找action标签,匹配name属性值是否一样。
3.匹配name属性值一样,都是hello
找到name属性所在的action标签里面另外一个属性class值,就是action的全路径,得到的值就是action全路径。然后使用反射操作
//通过字节码文件得到源码
Class clazz = Class.forName("action全路径");
//得到名称是execute的方法
Method m = clazz.getMethod("execute");
//方法执行
Object obj = m.invoke();
//第四步
//得到action方法的返回值
//在struts.xml文件中,找到action标签里面有result标签,匹配result标签里的name属性是否一样
//如果一样,跳转到配置页面中

web.xml里过滤器名字是:StrutsPrepareAndExecuteFilter(最好记住,面试可能要用)
1.过滤器在服务器启动时创建,创建过滤器时候执行init方法。
(1)在init方法中主要加载配置文件
包含自己创建的配置文件和struts2自带的配置文件
在Dispatcher中有代码
private static final String DEFAULT_CONFIGURATION_PATHS = "struts-default.xml,struts-plugin.xml,struts.xml";
try {
init_FileManager();
init_DefaultProperties(); // [1]
init_TraditionalXmlConfigurations(); // [2]
init_LegacyStrutsProperties(); // [3]
init_CustomConfigurationProviders(); // [5]
init_FilterInitParameters() ; // [6]
init_AliasStandardObjects() ; // [7]
Container container = init_PreloadConfiguration();
container.inject(this);
init_CheckWebLogicWorkaround(container);
if (!dispatcherListeners.isEmpty()) {
for (DispatcherListener l : dispatcherListeners) {
l.dispatcherInitialized(this);
}
}
errorHandler.init(servletContext);
}
主要加载的配置文件

主要关心的是struts.xml和web.xml。
在服务器启动时会创建过滤器,然后加载struts.xml文件。
Struts配置

1.名称和路径是固定的。
2.在配置文件中主要有三个表情package、action、result
标签package
1.package类似于代码包,区别不同的action,要配置action,必须首先写package标签,在package里面才能配置action
2.package标签属性
(1)name属性
name属性值和功能本身没有关系的,在一个配置文件中可以写多个package标签,name属性值不能相同
(2)extends属性
-属性值固定的,struts-default
-写了这个属性之后,在package里面配置的类具有action功能,写了这句话,里面配置的类才具有action的功能。
(3)namespace属性
-namespace属性值和action标签里面的name属性值构成访问路径。默认是"/"。
标签action
1.action标签配置action访问路径
2.action标签属性
(1)name属性
-namespace属性值和action标签里面的name属性值构成访问路径
-在package标签里面写多个action标签,但是action的name属性值不能相同的
(2)class属性
-action全路径
(3)method属性
-比如在action里面可以默认执行的方法是execute方法,但是在action里面可以写其他方法。
-让action里面多个方法执行,使用method进行配置
result标签
1.根据action(其实就是一个类)的方法返回值,配置到不同的路径里面。
2.result标签属性
(1)name属性
-和方法返回值一样
<!-- 配置方法的返回值到页面 -->
<result name="ok">/hello.jsp</result>
(2)type属性
-配置如何到路径中(转发或者重定向)
-type属性的默认值 做转发操作
转发(地址栏不会变)
修改struts2默认常量值
(1)常用的方式
在struts.xml中进行配置
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
(2)还有两种方式(了解)
-在src下面创建struts.properties,进行修改
-在web.xml进行配置
介绍最常用常量
struts.i18n.encoding
(1)表单提交数据到action里面,在action可以获取表单提交数据
(2)表单提交数据有中文,有乱码问题,解决:
-post提交直接设置编码
-get提交编码转换
(3)如果在action获取表单通过post方式提交中文,中文乱码问题解决了,不需要自己处理问题。
分模块开发
1.单独写配置文件,把配置文件引入到核心配置文件中。
<!-- 引入hello.xml文件 -->
<include file="cn/itcast/action/hello.xml"></include>
<?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>
<include file="cn/itcast/action/hello.xml"></include>
</struts>
在该目录下创建hello.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>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="hellodemo" extends="struts-default" namespace="/">
<!-- name:访问名称 -->
<action name="hello" class="cn.itcast.action.HelloAction">
<!-- 配置方法的返回值到页面 -->
<result name="ok">/hello.jsp</result>
</action>
</package>
</struts>
Action编写方式
1.action编写有三种方式
第一种 创建普通类,这个类不继承任何类,不实现任何借口
第二种 创建类,实现接口 Action
public class UserAction implements Action {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
//return "success";
return SUCCESS;
}
}
这种方式很少用,因为实现接口,不管用不用里面的方法,都要实现它的方法。
第三种 创建类,继承类ActionSupport
public class PersonAction extends ActionSupport {
@Override
public String execute(){
return SUCCESS;
}
}
访问action的方法(重点)
1.有三种方式实现
第一种 使用action标签的method属性,在这个属性里面写执行的action的方法
第二种 使用通配符方式实现
第三种 动态访问实现(不用)
(1)如果action方法有返回值,在配置文件中没有配置,出现错误。

(2)在action里面的方法有返回值,如果有返回值时类型必须是String。
(3)action里面的方法可以没有返回值,没有返回值,在result标签里就不需要配置。
-把方法返回值写成void(不建议)
-返回Action.NONE
public class PersonAction extends ActionSupport {
@Override
public String execute(){
return NONE;
}
}
这样就无法跳转到指定页面了,在action里就可以不用谢<result/>标签了。
1.创建action,创建多个方法
public class BookAction extends ActionSupport {
//添加
public String add(){
System.out.println("add.............");
return NONE;
}
//修改
public String update(){
System.out.println("update...........");
return NONE;
}
}
2.使用method配置
<package name="methoddemo" extends="struts-default" namespace="/">
<!-- 有method属性:写要执行的action里面的方法的名称 -->
<action name="addAction" class="cn.itcast.method.BookAction"
method="add">
</action>
<!-- 执行update方法 -->
<action name="updateAction" class="cn.itcast.method.BookAction"
method="update"> </action>
</package>
缺陷:action的每个方法都要配置,如果action里面有多个方法,配置很多的actions.
使用通配符实现(重点)
1.在action标签里面name属性,name属性值里面写符号*
(1)*理解:表示匹配任意内容
-比如访问hello,*可以匹配到
-比如访问add,*可以匹配到
<action name="book_*" class="cn.itcast.method.BookAction"
method="{1}">
</action>


这两个网址都可以匹配到。
book_*,里面的*相当于变成update
最终执行action的方法名称是update
在method属性里面写update就可以了。
3动态访问

不需要使用method属性,直接在访问上写!

Struts2学习(1)的更多相关文章
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
- Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...
- Struts2学习:interceptor(拦截器)的使用
对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...
- Struts2 学习笔记(概述)
Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...
- Java后台处理框架之struts2学习总结
Java后台处理框架之struts2学习总结 最近我在网上了解到,在实际的开发项目中struts2的使用率在不断降低,取而代之的是springMVC.可能有很多的朋友看到这里就会说,那还不如不学str ...
- struts2学习之旅三 权限管理和导航设计
1,权限管理的db设计和dao实现,尽量简单快速有效: db的设计如下:权限按照角色来赋给用户: 权限对应每一个具体的功能,有菜单级别的,有导航级别的,还有页面级别的功能: 涉及到权限的敏感操作一般都 ...
- struts2 学习记录 过滤器 国际化
struts2接触不是一天两天了,但是一直没有用它做什么项目,但老师确一直说它有很大的学习价值,所以还是把我学习到的东西给记录一下,记录的东西没有规律,只是给自己留个备份, struts2中最关键的是 ...
随机推荐
- 【Nginx】HTTP请求的11个处理阶段
Nginx将一个HTTP请求分成多个阶段.以模块为单位进行处理.这样做的优点是使处理过程更加灵活.减少耦合度.HTTP框架将处理分成了11个阶段,各个阶段能够包括随意多个HTTP模块并以流水线的方式处 ...
- 003-Spring 中的StreamUtils
一.概述 StreamUtils是spring中用于处理流的类,是java.io包中inputStream和outputStream,不是java8中Steam.使用时仅依赖spring-core 二 ...
- Percona备份mysql全库及指定数据库(完整备份与增量备份)
Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份) Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对I ...
- 爬虫四 selenium模块
一.介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...
- pyhon时间输出
参考博客:http://www.cnblogs.com/xisheng/p/7634125.html http://www.cnpythoner.com/post/89.html 有些时候想要输出,但 ...
- Linux基础系列:常用命令(2)
作业一: 1) 新建用户natasha,uid为1000,gid为555,备注信息为“master” groupadd -g 555 natasha useradd -u 1000 -g 555 -c ...
- 【leetcode刷题笔记】Median of Two Sorted Arrays
There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted ...
- 一些逼格略高的 js 片段
// 一个接一个运行 // timeout 不能直接放在 for 里面,暂时不知道为什么 function functionOneByOne(fn, times, duration) { for(va ...
- Docker容器技术-优化Docker镜像
一.优化Docker镜像 1.降低部署时间 一个大的Docker应用是如何影响在新Docker宿主机上的部署时间. (1)编写Dockerfile创建一个大Docker镜像 [root@bogon ~ ...
- PHP验证是否为图片格式文件
/** * 判断是否为图片格式(jpg/jpeg/gif/png)文件 * * @param string $filePath * @return bool|string */ function is ...