struts入门之namespace初探

本文深入探讨了Struts框架中的命名空间(namespace)概念,通过实际示例解释了其逻辑地址的特点,以及如何正确配置和使用namespace,以实现更灵活的模块化管理。

今天在学习struts后续的东西,发现内容里面提到了namespace。但是没有细讲,一晃而过。都不知道是怎么回事。

尽然已经提到了namespace,我们不能把它遗留下这里吧,有问题就解决问题,不懂我们就搞定,这才是IT人士。

经过几个小时的”实验“,貌似有那么一回事了。好,写下来。

上次自己做了一个入门,我发现如果太依赖IDE的话,对象我们这些新手来说确实不好。接下来我们就手工来试验下namespace吧。

follow   me。。。。

我现在已经算是struts最基本的都知道了。所有接下来写的东西不会太详细。但是只要你了解一点struts,你都能看的懂。

还是接着我上次写的入门的例子来。服务器我们用tomcat。

首先在tomcat的webapp里面创建一个文件夹,如:basic。我的是这样的

然后进入文件夹,创建两个jsp页面  一个login.jsp和一个done.jsp,然后是一个文件夹WEB-INF

如图:

struts入门之namespace初探

login的jsp我们实现一个登陆

code:

  1. <%@ page contentType="text/html;charset=GBK"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags"%>  
  3. <html>  
  4.   <body>    
  5.   
  6. <div align="center">  
  7.       <s:form action="login" method="POST" namespace="/test1/test2">  
  8.         <s:textfield label="姓名" name="name"/>  
  9.         <s:textfield label="性别" name="sex"/>  
  10.         <s:reset value="重置"/>  
  11.         <s:submit value="提交"/>  
  12.       </s:form>  
  13.     </div>    
  14.   
  15. </body>  
  16. </html>    

大家注意那个namespace属性,他的意思是:我们在名为/test1/test2 的命名空间去找login这个action。大家可能还注意到一点就是那个antion没有没有后缀名。(下面是个人揣摩的)因为有个namespace,struts就知道找的是action了。但是如果不用namespace这个属性,而这样写<s:form action=" test1/test2/ login" method="POST"> 这样是错的。因为struts不知道这是啥玩意儿。应该这样写<s:form action=" test1/test2/ login.action" method="POST">   这下就要后缀名了, 这样就不会报错了,亲自验证了的。个人理解,如果错了,劳烦纠正下。

然后是写done.jsp。

code:

done.jsp


这里我们就做一个标记吧。

然后再WEB-INF里面创建相应的文件和文件夹classes,lib文件夹和web.xml。 我想这几个文件夹和文件的作用我就不用说了吧。

如图:

 struts入门之namespace初探

接下来我们干什么了?

first:把struts必要的jar包放在lib里面,这样运行的时候,程序会自动到lib里面去找相应需要的包。

然后是配置web.xml

code:

  1. <?xml version '1.0' encoding 'GBK'?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">  
  3.      <filter>  
  4.         <filter-name>struts2</filter-name>  
  5.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  6.     </filter>  
  7.     <filter-mapping>  
  8.         <filter-name>struts2</filter-name>  
  9.         <url-pattern>/*</url-pattern>  
  10.     </filter-mapping>  
  11.     <welcome-file-list>  
  12.         <welcome-file>login.jsp</welcome-file>  
  13.     </welcome-file-list>  
  14. </web-app>  
  15.   


还是老话,这个是过滤器然后把请求都转发到控制器里面去。

然后我们定义了一个欢迎的页面。

最后就是我们的classes文件夹里面了。

这里面是action的class文件和struts.xml文件。

如图:

 struts入门之namespace初探

加上上面的,总共就这么多文件和文件夹了不会再添加文件和文件夹了

下面是struts.XML的内容。至于他的作用,我想我不用多说了撒。

  1. <?xml version="1.0" encoding="GBK" ?>  
  2. <!DOCTYPE struts PUBLIC   
  3.         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.         "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6. <package name="test" extends="struts-default" namespace="/test1/test2">  
  7.     <action name="login" class="actions.LoginAction">  
  8.         <result name="done" >/done.jsp </result>  
  9.          <result name="failed" >/login.jsp</result>  
  10.          <result name="input" >/login.jsp</result>  
  11.     </action>  
  12. </package>  
  13. </struts>   

大家请注意package里面的namespace属性了没有?是不是时曾相识,没有错,相信你的感觉。<s:form action="login" method="POST" namespace="/test1/test2">   没有忘吧,form就是要找命名空间为/test1/test2    的package里面的action。这样的好处是。。。。现在还不知道,以后我自己体会吧,现在先记住这个用处。O(∩_∩)O~。大家再看看 我们的struts.xml的内容,和上次我的入门例子就是多了一个namespace而已。但是这是有区别的。为了让大家看见区别我先在程序运行后截个图,好说明下。

请看我们的URL地址:如图
struts入门之namespace初探

大家会不会发现,貌似login.action是在test1里面的test2里面啊。我们平时访问的网页就是在某个文件夹下面的哪个网页。开始我们并没有创建test1,test2文件夹啊!我开始也是有这样的疑问。于是就建文件夹,但是有问题。其实你我的想法是对的。这个是逻辑上的地址,并不是物理上的。     但是有一点大家要注意的是:JSP路径却是物理上的。你看看我们result里面的值:/done.jsp   前面有倾斜的横线他表示的是服务器根路径+项目的路径   也就是http://127.0.0.1:8080/basic/  如果你把那个斜横线去了,后果是什么呢?比如这样<result name="done" >done.jsp </result> 结果是:程序会到basic/test1/test2/里面找done.jsp文件,但是我们没有/test1/test2/文件夹,所以报错404。

这下算有点明白了,我们就来看我们的action文件吧,这次我继承了ActionSupport。

code:

  1. package actions;   
  2.   
  3. import com.opensymphony.xwork2.ActionSupport;   
  4.   
  5. public class LoginAction extends ActionSupport{   
  6.     private String name;   
  7.     private String sex;   
  8.     public LoginAction() {   
  9.        
  10.     }   
  11.        
  12.     public String execute(){   
  13.         return "done";   
  14.     }   
  15.   
  16.     public void setName(String name) {   
  17.         this.name name;   
  18.     }   
  19.   
  20.     public String getName() {   
  21.         return name;   
  22.     }   
  23.   
  24.     public void setSex(String sex) {   
  25.         this.sex sex;   
  26.     }   
  27.   
  28.     public String getSex() {   
  29.         return sex;   
  30.     }   
  31.   
  32.   

请到你的classes文件夹下面编译这个java文件。

开CMD

命名如下:javac    空格   -d    空格    .(点)    空格     *.java           空格我分的开,方便看。它的意思是会生产相应的文件夹,当然你也可以不要包名。但是请到struts.xml里面吧action对于的class文件的包名也改成对应的。

如果报错很正常,自己检查检查。原因是找不到com.opensymphony.xwork2.ActionSupport    这个包。怎么回事了。给大家留个问题在这里。让大家自己来解决解决。

如果编译通过了。那么恭喜你。你可以运行了。

现在基本明白了namespace的作用吧。

回味下。

1.namespace是逻辑是的,不会反应在物理上的位置的变化。所有你使用了namespace属性后不用去调整里面任何文件的位置。

2.但是jsp里面是物理的,请大家相当的注意这个问题。搞清楚路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值