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中最关键的是 ...
随机推荐
- TFS二次开发-基线文件管理器(2)-TFS登录
首先需要做一个TFS的登录. 以前的文章是使用的DomainProjectPicker 最新的VS里面使用的是TeamProjectPicker 首先可以在WinForm程序上写一个Button,然后 ...
- ubuntu(已经配置了python2+opencv)简易配置python3的opencv:
所达到的效果就是python2与python3都能使用opencv参考:http://blog.csdn.net/jiandanjinxin/article/details/71438780https ...
- Python中 sys.argv[]的用法实操
使用sys.argv[]首先要调用模块sys import sys 通俗说,这个东西就是取代了input的功能,input是用pycharm上,而argv[]是用在命令行上 也就是window 上的小 ...
- 常用算法及其Python实现
冒泡排序 def bubble_sort(li): for i in range(len(li)-1): # i表示第几趟 for j in range(len(li)-i-1 ...
- 生产者,消费者,CDN
1 生产者消费者模型应用场景及优势? 什么是生产者消费者模型 在 工作中,大家可能会碰到这样一种情况:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进 ...
- PAT 1069. 微博转发抽奖(20)
小明PAT考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔N个人就发出一个红包.请你编写程序帮助他确定中奖名单. 输入格式: 输入第一行给出三个正整数M(<= 1000).N ...
- 剑指offer 面试34题
面试34题: 题目:二叉树中和为某一值的路径 题:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 解题代码 ...
- Django:popup弹出框简单应用实例
效果:在p1.html页面点击,弹出p2的弹出框,填写数据,在 popup_response页面处理数据 1.url设置 urlpatterns = patterns( url(r'^p1.html' ...
- dockfile
dockerfile是对镜像的描述 新建一个dockfile文件 docker inspect
- select + range + insertNode+offset
self. cmd.range.selectNodeContents(p[0]) 建立选区 self.cmd.select() 选中选区 self.cmd.selection([forceRe ...