今天在学习struts后续的东西,发现内容里面提到了namespace。但是没有细讲,一晃而过。都不知道是怎么回事。
尽然已经提到了namespace,我们不能把它遗留下这里吧,有问题就解决问题,不懂我们就搞定,这才是IT人士。
经过几个小时的”实验“,貌似有那么一回事了。好,写下来。
上次自己做了一个入门,我发现如果太依赖IDE的话,对象我们这些新手来说确实不好。接下来我们就手工来试验下namespace吧。
follow
我现在已经算是struts最基本的都知道了。所有接下来写的东西不会太详细。但是只要你了解一点struts,你都能看的懂。
还是接着我上次写的入门的例子来。服务器我们用tomcat。
首先在tomcat的webapp里面创建一个文件夹,如:basic。我的是这样的
然后进入文件夹,创建两个jsp页面
如图:
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">
大家会不会发现,貌似login.action是在test1里面的test2里面啊。我们平时访问的网页就是在某个文件夹下面的哪个网页。开始我们并没有创建test1,test2文件夹啊!我开始也是有这样的疑问。于是就建文件夹,但是有问题。其实你我的想法是对的。这个是逻辑上的地址,并不是物理上的。
这下算有点明白了,我们就来看我们的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
如果报错很正常,自己检查检查。原因是找不到com.opensymphony.xwork2.ActionSupport
如果编译通过了。那么恭喜你。你可以运行了。
现在基本明白了namespace的作用吧。
回味下。
1.namespace是逻辑是的,不会反应在物理上的位置的变化。所有你使用了namespace属性后不用去调整里面任何文件的位置。
2.但是jsp里面是物理的,请大家相当的注意这个问题。搞清楚路径。