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. hbase运行时ERROR:org.apache.hadoop.hbase.PleaseHoldException:Master is initializing的解决方法

    最终解决了,其实我心中有一句MMP. 版本: hadoop 2.6.4 + hbase0.98 第一个问题,端口问题8020 hadoop默认的namenode 资源子接口是8020 端口,然后我这接 ...

  2. recursion

    w recursion nexttoken

  3. HTML代码的美感

    每当我访问精美的网站,我都情不自禁地会去查看源代码.这就好比你拥有一副X光眼镜,能够看到任何人--甚至透视他们的遮羞布.这简直是天经地义的事情嘛!我迫不及待地想了解,这个精美的网站,是不是由同样具有美 ...

  4. Python3.6全栈开发实例[005]

    5.接收两个数字参数,返回比较大的那个数字. def compare(a,b): return a if a > b else b # 三元表达式 print(compare(20,100))

  5. HDU1950-Bridging signals-最长上升子序列

    Description 'Oh no, they've done it again', cries the chief designer at the Waferland chip factory. ...

  6. if控制器+循环控制器+计数器,控制接口分支

    但是我不想这么做,接口只想写一次,让循环控制器和if控制器去判断接口,执行我想要的分支.这里遇到了一个问题,if控制器通过什么去判断接下来的分支?我引入了一个计数器的概念.起始值为0,每次循环加1,将 ...

  7. url的配置

    from django.conf.urls import patterns, url urlpatterns = patterns('common.views', url(r'^$', 'index' ...

  8. CSS 中z-index全解析(摘自阿里西西)

    z-index全解析 Z-index属性决定了一个HTML元素的层叠级别.元素层叠级别是相对于元素在Z轴上(与X轴Y轴相对照)的位置而言.一个更高的Z-index值意味着这个元素在叠层顺序中会更靠近顶 ...

  9. document.documentElement和document.body区别以及获取浏览器的宽高

    原文:http://www.jb51.net/article/41410.htm 1.区别: body是DOM对象里的body子节点,即 <body> 标签: documentElemen ...

  10. web前端基础知识学习网站推介

    内容:一.基础知识及学习资料1. HTML入门学习:http://www.w3school.com.cn/html/index.aspHTML5 入门学习:http://www.w3school.co ...