Struts2学习三----------Action搜索顺序

? 版权声明:本文为博主原创文章,转载请注明出处

Struts2的Action的搜索顺序

  http://localhost:8080/path1/path2/student.action

  1)判断package是否存在,如:/path1/path2

  2)存在,判断action是否存在,没有,则报错

  3)不存在,检查上一级路径的package是否存在(直到默认的namespace),重复第一步,没有,则报错

实例

1.项目结构

2.pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<groupId>org.struts</groupId>
	<artifactId>Struts2-ActionSearchOrder</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Struts2-ActionSearchOrder Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<!-- 统一Struts2的开发环境 -->
		<struts.version>2.5.10</struts.version>
	</properties>

	<dependencies>
    	<!-- junit -->
    	<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
	    </dependency>
	    <!-- Struts2 -->
		<dependency>
		    <groupId>org.apache.struts</groupId>
		    <artifactId>struts2-core</artifactId>
		    <version>${struts.version}</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>Struts2-ActionSearchOrder</finalName>
	</build>

</project>

3.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd"
		version="3.0">

	<!-- 配置Struts2过滤器 -->
	<filter>
		<filter-name>struts</filter-name>
		<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

</web-app>

4.SearchAction.java

package org.struts.action;

import com.opensymphony.xwork2.ActionSupport;

public class SearchAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	public String search() throws Exception {

		return SUCCESS;

	}

}

5.struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

	<package name="search1" extends="struts-default" namespace="/">
		<action name="search"  class="org.struts.action.SearchAction" method="search">
			<result>/search.jsp</result>
		</action>
		<action name="CommonSearch"  class="org.struts.action.SearchAction" method="search">
			<result>/Common.jsp</result>
		</action>
	</package>

	<package name="search2" extends="struts-default" namespace="/aa">
		<action name="CommonSearch"  class="org.struts.action.SearchAction" method="search">
			<result>/aaCommon.jsp</result>
		</action>
	</package>

</struts>

6.aaCommon.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>This is aaCommon.jsp</title>
</head>
<body>
	This is aaCommon.jsp
</body>
</html>

7.Common.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>This is Common.jsp</title>
</head>
<body>
	This is Common.jsp
</body>
</html>

8.search.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>This is search.jsp</title>
</head>
<body>
	This is search.jsp
</body>
</html>

9.效果预览

  9.1 访问http://localhost:8080/Struts2-ActionSearchOrder/aa/CommonSearch.action,此时存在namespace="/aa"的package,搜索action,存在

  9.2 访问http://localhost:8080/Struts2-ActionSearchOrder/aa/search.action,此时存在namespace="/aa"的package,搜索action,不存在,报错

  9.3 访问http://localhost:8080/Struts2-ActionSearchOrder/aa/bb/CommonSearch.action,不存在namespace="/aa/bb"的package,搜索上一级路径的package,此时存在namespace="/aa"的package,搜索action,存在

  9.4 访问http://localhost:8080/Struts2-ActionSearchOrder/CommonSearch.action,存在namespace="/"的package,搜索action,存在

  9.5 访问http://localhost:8080/Struts2-ActionSearchOrder/search.action,存在namespace="/"的package,搜索action,存在

参考:http://www.imooc.com/video/8998

时间: 2024-08-28 16:50:05

Struts2学习三----------Action搜索顺序的相关文章

struts2 学习(三) ----- 用户登录验证

下面是struts2 的第三个程序(用户登录验证)步骤:(需要新建login.jsp,Login.java和message.jsp) 1.增加Struts框架,步骤在第一篇中. 2.新建一个login.jsp.布局如下: 3.然后新建一个class,名为Login.java,代码如下: 4.在struts.xml文件中,代码如下: 5.新建message.jsp页面,代码如下: 6.OK,运行. **************************************************

Struts2 学习笔记--Action Method--接收参数

struts2中的路径问题 注意:在jsp中”/”表示tomcat服务器的根目录,在struts.xml配置文件中”/”表示webapp的根路径,即MyEclipse web项目中的WebRoot路径. 总结: struts2中的路径问题是根据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径 . 虽然可以用redirect方式解决,但redirect方式并非必要. 解决办法非常简单,统一使用绝对路径. (在jsp中用request.getContextRoot方式来拿到weba

shell学习三十八天----执行顺序和eval

执行顺序和eval shell从标准输入或脚本中读取的每一行称为管道,它包含了一个或多个命令,这些命令被一个或多个管道字符(|)隔开. 事实上嗨哟很多特殊符号可用来分割单个的命令:分号(;),管道(|),&,逻辑AND(&&),逻辑OR(||).对于每一个地区的管道,shell都会将命令分割,为管道设置I/O,并且对每一个命令依次执行下面的操作. 看起来很复杂,但是每一个步骤都是在shell的内存里发生的,shell不会真的把每个步骤的发生演示给我们看.所以这是我们分析shell内

【Struts2学习笔记-3】常量配置

Struts2常量 配置Struts2常量值有3个地方,1)在struts.properties文件中配置常量:2)在web.xml文件中配置FileterDispatcher指定初始化参数来配置常量:3)在struts.xml文件中使用<constrant.../>元素来配置常量.下面详细说说第一种方式. 1. struts.configuration: 该常量指定加载struts2配置文件的配置文件管理器.该常量的默认值是org.apache.struts2.config.DefaultC

Struts2学习之文件上传/下载&amp;ValueStack(三)

简介 今天是学习Struts2第三天,也算struts2准备前奏告一段落,提升部分只能在后期深入了解,多看源码,多参阅资料.今天所学的知识点文件上传.下载/ValueStack&OGNL/Struts2标签 文件上传/下载 文件上传简介 a). 企业常用文件上传技术 : jspSmartUpload(主要应用 JSP model1 时代) . fileupload (Apache commons项目中一个组件). Servlet3.0 集成文件上传 Part类 b). Struts2 对文件上传

Struts2配置拦截器,struts2加载常量时的搜索顺序

1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) 5.web.xml 如果在多个文件中配置了同一个常量,则后一个文件中配置的常量值会覆盖前面的文件配置的常量值 2:Struts2拦截器配置 1.在Struts.xml中配置一个默认请求的action <!-- 没有找到action时默认执行的action --> <default-acti

Struts2框架学习(三) 数据处理

Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:ValueStack一种数据结构,操作数据的方式为:先进后出 OGNL : Object-GraphNavigation Language(对象图形导航语言)将多个对象的关系使用一种树形的结构展现出来,更像一个图形,那么如果需要对树形结构的节点数据进行操作,那么可以使用 对象.属性 的方式进行操作,OGNL技

struts2学习笔记(4)---------action中的方法调用

系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里面包含多个控制处理逻辑. 1)动态方法调用 即DMI(dynamic method invocation),使用actionName!methodName的形式来指定想要调用的方法,如果想使用DMI,需要在struts.xml里面加入这句话: <constant name="struts.enable.DynamicMethodInvocation" value="true" /&

struts2学习笔记(三)—— 在用户注册程序中使用验证框架

实现目标: 1.使用验证框架对用户注册信息进行验证 2.验证用户名.密码.邮箱不能为空 3.验证用户名.密码长度 4.验证邮件地址格式 具体实现 一.Struts2应用的基础配置 这里不做详细阐述,具体为web.xml.相关jar包的配置 二.将页面显示的文本内容放到资源文件中 1.查看用户注册程序中的所有页面,找到所有可以显示的文本内容,将它们分离出来放到资源文件中. 2.与相关的Action类同名,以.preperties为扩展名,与Action类位于同一个包中,只能由该Action访问 R