Struts2 helloWorld
3、HelloWorld准备
2011年5月3日
9:18
1:创建Web Project后,在MyEclipse里面的window 下的preferences里面配置好tomcat的路径还有JRE的路径。
2:下载的struts 的包,要看里面的例子
3:把struts.xml文件拷贝到src包下,不要放在WEBINFO下面,因为编译后,struts配置文件就会自动的放到webinfo下面
4:拷贝过去lib
5:找到例子中的filter拷贝过去
6:如果用开发模式的话,要把前面的 <constant name="struts.devMode" value="false" />拷贝到新建的<package>前面,表示开发模式,把value值设置为true。
7:查看struts这个的源码
右键工程,属性,找到Java source Attachment,然后往里面找到D:/JarPackage/struts-2.2.1.1/src/core/src/main/java
8:如何编辑xml的时候会给提示?
Window preferences,敲入
carlog里面配置dtd,可以从struts2里面的一个core文件解压开,然后找到dtd,然后在window preference里面配置路径,注意选择url,下面的key可以去原来的文件中复制网址
9:在浏览器里面输入url http://zhaoxin-pc:8080/Struts2_0100_Intruduction/hello后,通过http协议,发送给tomcat,tomcat发现WebAPP是项目名字, Struts2——0100——Introduction,把这个Webapp交给对应的程序处理,要读这个webapp里面的web.xml文件看是怎么配置的,从web.xml里面找到了filter,这个filter过滤所有地址,我们敲击地址的时候就会被
接收到,它如何处理?首先看namespace,从struts.xml里面插,然后找/后面的action,也是从struts里面去查。
10:首先客户端输入地址,浏览器就把请求发给tomcat,tomcat收到请求后找交给那个webapp去做处理,找到webapp后,会参考里面的web.xml,在里面的filter中找到处理的类,这个类参考struts.xml,首先参考namespace,再找对应的action,然后找对应的result,然后把这个请求发送给对应的jsp文件。然后这个jsp文件就会把内容反馈给客户端。
11:
12:为么搞的这么麻烦?
设计模式好处是可扩展性,那么这个为么这么麻烦?struts2好处在于可以把请求和展现分开。分开的好处就是要想改成别的视图,配置下就可以
4、Struts2的HelloWorld例子程序以及遇到的问题解决
2011年6月5日
18:41
一 首先在Myeclipse里面建立web project,命名为:myStruts2.
二 将struts2 的包引入。
三 然后配置web.xml,里面配置好filter和map,增加如下
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
四 从struts2自己带着的例子程序里面拷贝struts.xml,放到src包下
五 然后修改index.jsp文件,如下:
<body>
<h2><s:form action="Login">
<s:textfield name="message" label="你的姓名"/>
<s:submit value="提交"></s:submit>
</s:form></h2>
</body>
并且在jsp文件前方加上<%@taglib prefix="s" uri="/struts-tags" %>,用来引入struts2标签库
六 再写LoginAction类
public class LoginAction extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
if(message.equalsIgnoreCase("zhaoxin")) {
return SUCCESS;
}else {
return ERROR;
}
}
}
问题1:这里曾经遇到问题,在重写的execute()方法中if语句中return SUCCESS,其实和返回return "success"是一样的,但是在后边struts.xml中映射action的时候要注意,对于result一定要写成 name=“success”;
七 这里定义了一个action,那么要回去struts2文件中定义action的映射
这里可以加入开发模式那个一行,所以,如果改一点东西的话,就会立即反馈,不需要重启服务器了。
<package name="default" namespace="/" extends="struts-default">
<!--<default-action-ref name="index" />-->
<action name="Login" class="dianxin.LoginAction">
<result name="success">/helloWorld.jsp
</result>
</action>
</package>
八 重新思考
对于这个工程,运行后,首先是web.xml找到filter是struts2,在index里面把输入的内容通过message得到,点击提交按钮后,在struts.xml里面,根据action对应的class为: dianxin.LoginAction,那么把message交给这个类处理,这个类里面,判断是不是,是的话,返回success字符串,然后到struts.xml里面同一个action里面找对应的result,然后跳转到对应的页面。(最后把项目运行起来后再看这句话,项目下载地址在下面)
九 总结
Struts2 的HelloWorld纠结了好久,今天下午终于解决掉了,以前老是出现404错误,根据我的经验,如果出现了这个404错误,首先就回去找struts.xml中的action映射,首先检查action的name和index.jsp中form表单的action的name是不是相同。然后看action对应的class,最后看result。
一般情况下,为了保证命名空间还有filter之类的不出现错误,能从struts2的例子程序中拷贝就一定要拷贝,不要自己写。
十 自己做的这个实验工程包下载地址:http://download.csdn.net/source/3341784
1:JSP、Java文件等的编码方式,尤其是有时候的乱码问题,对于JSP来说,除了可能是eclipse的默认的编码方式外,还有可能就是在JSP的开头设定的编码方式就不对。
2:对于JSP的标签库还需要了解,对于HTML也需要好好了解下。
3:在用JSP标签库的时候注意form的范围
4:action类是继承自ActionSupport。一般要重写execute方法,用来返回信息。