写这个之前,在一个Java群里面跟一伙人吵的很凶,原因就是因为我问了一个访问Action不带后缀“.action”而找不到的问题,吵了很久,一群人鄙视了我很久,最后不了了之,之后测试了一下,确实是我错了,来说说我的理解。我是想遮掩访问action:http://localhost:8080/myproject/login,myproject是我的项目名,login是登陆action,这里我没带后缀,我的做法是这样配置:
<package name="root" namespace="/" extends="struts-default">
<action name="login" class="com.LoginAction">
<result>/login.jsp</result>
</action>
</package>
按理说遮掩就可以了,但是不知道为什么,在我的项目中没带后缀,访问不到这个action,带了才能访问到,于是我就想了只写出"/login"会不会把它当成命名空间呢?也就是说到“/login”的命名空间中去,但是后面没什么action了,于是我就想了一招,这样配置:
<package name="login" namespace="/login" extends="struts-default">
<default-action-ref name="login" />
<action name="login" class="com.LoginAction">
<result>/login.jsp</result>
</action>
</package>
这样如果是到了这个命名空间,也可以显示出来,这样做,鬼使神差地却能在我的那个项目中显示,显示是能显示,更他们炒后,我于是去测试了一下,建了一个测试工程,struts.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.enable.DynamicMethodInvocation"
value="false" />
<constant name="struts.devMode" value="false" />
<package name="root" namespace="/" extends="struts-default">
<action name="login" class="com.LoginAction">
<result>/login.jsp</result>
</action>
</package>
<package name="login" namespace="/login" extends="struts-default">
<default-action-ref name="home" />
<action name="home" class="com.HomeAction">
<result>/home.jsp</result>
</action>
</package>
<!-- Add packages here -->
</struts>
我配置了两个命名空间,一个根命名空间,一个名为“login”的命名空间,
测试:不要根命名空间,如果按照我上面说的会把它当成“login”命名空间,而执行的话,由于我配置了默认处理action是可以显示的,但是事实上却报了“404”错误,也就是说它只会去根命名空间或默认命名空间中找有没有名为login的action,也就是虽然你没写后缀,但是Struts 2解析的时候它会解析成login.action,而不会当成命名空间去找,虽然我不知道我项目中怎么把它当成命名空间处理了,但是按常理这是不可能的,我那个应该是碰巧而言。这就让我想起了,一句很重要的话“命名空间只有一个级别
”,也即是说对于这样的url:
http://localhost:8080/myproject/manage/user/login,对于struts 2来说它是遮掩的
http://localhost:8080/myproject/manage/user/login.action,它会先去命名空间名为"manage/user"的包中找是否有名为login的action,如果没有找打不会去“manage”命名空间中找,而会去默认命名空间中找,如果默认命名空间中没有找到就会报错了。
交流是很重要的,谢谢那些鄙视我的人。。。。。。
分享到:
相关推荐
根据提供的文件信息,我们可以从《Struts 2实战 Struts2 in Action》这一书籍中提炼出与Struts 2框架相关的多个重要知识点。Struts 2是一个基于Java的开源Web应用框架,它继承了Struts 1的优点并进行了大量的改进和...
作为一个基于Action和基于拦截器的框架,Struts2提供了丰富的功能,使得开发者能够构建可维护、可扩展的Web应用。下面我们将深入探讨Struts2的主要特性、工作原理以及如何在实际开发中运用。 1. **核心概念**: - ...
根据提供的信息,我们可以推断出这是一本关于Struts 2框架的书籍——《Struts 2实战 Struts 2 in action 的中文版》。本书主要介绍了Struts 2框架的相关概念、工作原理以及实际应用案例等内容。接下来,我们将根据...
当用户通过浏览器发送请求时,Struts2会将请求转发给相应的Action处理。 - **执行流程**: - 用户发起HTTP请求。 - 请求被Struts2的前端控制器(FilterDispatcher)拦截。 - FilterDispatcher根据配置找到对应的...
Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...
**Struts2实战——《Struts2 In Action中文版》** 《Struts2 In Action》是一本专为Java开发者设计的实战指南,旨在深入解析Struts2框架的使用与实践。Struts2作为一款强大的MVC(Model-View-Controller)框架,极...
然而,正如标题所示,“Struts2的bug——关于Struts2中找不到Action的”,这个问题可能困扰了许多开发者。在Struts2框架中,Action是核心组件,用于处理用户请求并执行业务逻辑。当系统报告找不到Action时,这通常...
"Struts2 in Action" 是一本深入探讨Struts2框架的专业书籍,旨在帮助开发者掌握这一框架的核心概念和实践技巧。这本书的中文版不仅提供了理论知识,还附带有配套的源代码,方便读者进行实践操作,加深理解。 ...
《Struts2 in Action》中文版是一本深入探讨Struts2框架的专业书籍,该书不仅提供了详尽的理论知识,还包含了大量的实战案例,对于希望掌握Struts2框架的开发者来说,是一本不可或缺的参考书。 ### Struts2框架概览...
### Struts 2 Action 动态方法调用详解 #### 一、引言 在Struts 2框架中,Action动态方法调用是一项非常实用的功能。它允许开发者在一个Action类中定义多个处理方法,而不仅仅局限于传统的`execute()`方法。这种...
在处理用户请求时,Struts2允许开发者通过Action类来接收和处理参数,包括中文参数。当我们需要通过POST方法提交包含中文字符的数据时,可能会遇到编码问题,因为HTTP请求默认使用的是ASCII编码,而中文字符需要UTF-...
Struts2 中 Action 接收参数的方法 Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性...
struts2 in action 源码
《Struts2 in Action》是一本深入探讨Struts2框架的权威著作,中文版的发布使得国内开发者能够更方便地理解和应用这一强大的Java Web开发框架。Struts2是Apache软件基金会旗下的一个开源项目,它是MVC(Model-View-...
如果你想自学struts2,此文档是很好的自学宝典,经典struts2 in Action,能帮你建立整体的struts2思想,你还在犹豫什么
类型转换则是指Struts2能够自动将请求参数的字符串值转换为Action属性所需的类型,如将`age`的字符串值转换为整型。 为了调试和理解这个过程,可以开启Struts2的日志,查看拦截器的执行顺序和参数绑定情况。此外,...
《Struts2 in Action》是一本深入介绍该框架的专业书籍,无论是中文版还是英文版,都为读者提供了全面理解和实践Struts2的知识。 中文版的《Struts2 in Action》为中文阅读者提供了方便,使得理解复杂的框架概念变...