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中最关键的是 ...
随机推荐
- POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】
链接: http://poj.org/problem?id=1860 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- 0x01 MySQL What's DataBase
0x01 数据库管理软件的由来 在此之前,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅能存在于某一台机器上. 如果暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在 ...
- centos7 安装python3.6
•到python官网找到下载路径, 用wget下载 wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz •解压tgz包 tar ...
- linux crontab+curl+php 实现php定时任务
首先登入Linux ->用root登入 在命令行输入 crontab -e 之后就会打开一个文件,并且是非编辑状态,则是vi的编辑界面,通过敲键盘上的i,进入编辑模式,就可以编辑内容.这个文件 ...
- openresty安装文档
一.OpenResty简介 OpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并 ...
- CoreThink主题开发(九)使用H-ui开发博客主题之用户个人主页
感谢H-ui.感谢CoreThink! 效果图: 这里使用table布局 /Theme/Blog/User/Index/home.html <extend name="$_home_ ...
- 解释python中的help()和dir()函数
help函数是一个内置函数,用于查看函数或模块用途的详细说明 import copy print(help(copy.copy)) Help on function copy in module co ...
- cookie的路径和域
1.Cookie的路径介绍 我们知道Cookie 的属性有很多,其中有一个属性是路径path.有些人认为Cookie 的路径指的是Cookie 在客户端的保存路径,其实并不是.Cookie 的路径是相 ...
- linux alsa pcm(此pcm非硬件pcm接口)
转:https://blog.csdn.net/crycheng/article/details/7095899 CODEC :音频芯片的控制,比如静音.打开(关闭)ADC(DAC).设置ADC(DA ...
- PHP用*隐藏中文问题
中文截取 function substr_cut($user_name){ $strlen= mb_strlen($user_name, 'utf-8'); $firstStr= mb_substr( ...