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)的更多相关文章

  1. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. Struts2学习笔记⑧

    今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...

  4. Struts2学习笔记①

    Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...

  5. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)

    Struts2学习笔记一结合Hibernate完成查询商品类别简单案例(工具IDEA) 1.jar包准备 Hibernate+Struts2 jar包 struts的jar比较多,可以从Struts官 ...

  6. Struts2学习:interceptor(拦截器)的使用

    对于需要登陆验证.权限验证等功能的网站,每一次请求,每一个action都写一段验证的代码,未免显得冗余且不易维护.struts2提供了拦截器interceptor,为这些页面提供一个切面,或者说公共组 ...

  7. Struts2 学习笔记(概述)

    Struts2 学习笔记 2015年3月7日11:02:55 MVC思想 Strust2的MVC对应关系如下: 在MVC三个模块当中,struts2对应关系如下: Model: 负责封装应用的状态,并 ...

  8. Java后台处理框架之struts2学习总结

    Java后台处理框架之struts2学习总结 最近我在网上了解到,在实际的开发项目中struts2的使用率在不断降低,取而代之的是springMVC.可能有很多的朋友看到这里就会说,那还不如不学str ...

  9. struts2学习之旅三 权限管理和导航设计

    1,权限管理的db设计和dao实现,尽量简单快速有效: db的设计如下:权限按照角色来赋给用户: 权限对应每一个具体的功能,有菜单级别的,有导航级别的,还有页面级别的功能: 涉及到权限的敏感操作一般都 ...

  10. struts2 学习记录 过滤器 国际化

    struts2接触不是一天两天了,但是一直没有用它做什么项目,但老师确一直说它有很大的学习价值,所以还是把我学习到的东西给记录一下,记录的东西没有规律,只是给自己留个备份, struts2中最关键的是 ...

随机推荐

  1. Guava Joiner 拼接字符串

    Joiner Guava 是Google 对Java的内置类型进行增强和扩展的工具. Joiner.on(", ").join(Iterator<> iter) Joi ...

  2. 练习: 省市联动(Ajax)

    // 示例一: china.xml (位于 src 目录下) <?xml version="1.0" encoding="utf-8"?> < ...

  3. Linux源码包安装和脚本安装

    能够先 vi INSTALL 看看安装过程. 1.源码包安装 2.脚本安装

  4. 试着利用BAPI 寻找F-59创建凭证的函数

    功能块代码 F-59开发类 FIBP事务说明 支付请求 事物:FBP1Screen 0BKPF-BLART = AB________________________________________从程 ...

  5. ABAP权限检查,TCode与权限对象进行关联

    一.确认权限对象,和关联字段: Tcode:SU21 维护权限对象例如"M_MSEG_WMB",它关联字段为'WERKS'M_MSEG_WMB 物料凭证:工厂 二.在ABAP代码中 ...

  6. 【jenkins】jenkins实时显示python脚本输出

    jenkins在构建shell脚本时可以实时输出结果,但是在构建python脚本时,是等到python执行完成以后,才显示结果,这个对于我们判断脚本执行状态非常不利 这里介绍一种方法,能够实时显示py ...

  7. 4.1 使用STM32控制MC20拨打电话

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  8. 深度学习1--ubuntu14.04+win10双系统

    相当多的内容参考的百度经验https://jingyan.baidu.com/article/eb9f7b6d79a7b4869364e885.html?qq-pf-to=pcqq.group 还可以 ...

  9. Loadrunder场景设计篇——手工场景设计

    概述 通过选择需要运行的脚本,分配运行脚本的负载生成器,在脚本中分配Vuser来建立手工场景 手工场景就是自行设置虚拟用户的变化,主要是通过设计用户的添加和减少过程,来模拟真实的用户请求模型,完成负载 ...

  10. $git学习总结系列(1)——基本用法

    廖雪峰的官方网站:http://www.liaoxuefeng.com/ 本文是学习廖雪峰的官方网站上git教程git基本用法的总结,详细内容可以进入廖雪峰的官方网站查看. 注:本文中的主要内容都是基 ...