struts入门之namespace初探。

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

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

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

 

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

 

follow   me。。。。

 

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

 

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

 

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

 

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

如图:

login的jsp我们实现一个登陆

code:


<%@ page contentType="text/html;charset=GBK"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
  <body>

<div align="center">
      <s:form action="login" method="POST" namespace="/test1/test2">
        <s:textfield label="姓名" name="name"/>
        <s:textfield label="性别" name="sex"/>
        <s:reset value="重置"/>
        <s:submit value="提交"/>
      </s:form>
    </div>

</body>
</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。 我想这几个文件夹和文件的作用我就不用说了吧。

如图:

 

接下来我们干什么了?

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

然后是配置web.xml

 

code:

<?xml version = '1.0' encoding = 'GBK'?>
<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">
     <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

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

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

 

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

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

如图:

 

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

 

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

<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="test" extends="struts-default" namespace="/test1/test2">
    <action name="login" class="actions.LoginAction">
        <result name="done" >/done.jsp </result>
         <result name="failed" >/login.jsp</result>
         <result name="input" >/login.jsp</result>
    </action>
</package>
</struts>

 

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

请看我们的URL地址:如图

 

大家会不会发现,貌似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:

package actions;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{
    private String name;
    private String sex;
    public LoginAction() {
   
    }
   
    public String execute(){
        return "done";
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getSex() {
        return sex;
    }
}

 

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

开CMD

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

 

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

 

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

 

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

 

回味下。

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

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

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值