今天看着视频学习如何手动配置struts的环境,凭着记忆把过程再做一遍记录吧............
准备工作:
下载Struts2.2.1.1-all.zip 。地址是http://struts.apache.org/
开始之前我们先来了解一下struts2.2.1.1-all.zip这个文件夹里面有什么东东吧。解压Struts2.2.1.1-all.zip 、
我们可以看到struts2.2.1.1里面有4个文件夹和一些.txt文档,我们主要说说这4个文件夹吧。
apps:里面是一些可以跑起来的例子,这个用处很大,以后你就知道WHY了
docs:顾名思义就知道是一些帮助信息啦,这是在struts的官网下截取出来的一些帮助信息
lib:这里放的是struts的一些架包,我们待会需要的架包也是从这里面取得的。
src:这里放的是源码,struts是一个开源项目,有些这些源码我们可以自己生成struts2.2.1.1的API了,就不用冰天雪地跪玻璃碴子求struts2.2.1.1的API啦,哈哈、、、、
好了,下面开始啦、、、、、
1、新建web项目,命名为struts2(命名是自己喜欢吧)
2、我们需要把一下架包丢到到struts2项目的WEBROOT——WEB_INF——lib目录下
(这是struts2.2.0版本的配置方式,实践证明也能在struts2.2.1.1版本中跑起来)
需要加入的架包有:
common-fileupload-1.2.1.jar//common-io-1.3.2.jar//common-loggin-1.0.4.jar//ognrl-3.0.jar/struts2-core-2.2.1.1.jar//xwork-core-2.2.1.1.jar//freemarker-2.3.16.jar共7个。这些东西就在struts的lib中找。
3、在WEBROOT的目录下new一个login.JSP页面.页面中添加一个表单,其中action=“login”代码如下:
<form action="login">
username:<input type="text" name="username"><br>
Password:<input type="password" name="password"><br>
<input type="submit" value="submit">
</form>
4、修改web.xml。在里面加入一段过滤器,代码如下:
<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>
对于<url-pattern>我做小小的解释,这里是对所有信息进行拦截过滤(深入解释还没研究出来啊,嘻嘻)
5、在src下建立一个xmlfile名为struts.xml。其实执行解释的时候不是解释这个的,实际解释的是WebRoot/WEB-INF/classes下的Struts.xml的,这儿不用建,它随src下的struts改变而改变,为什么要在src下建呢?我的理解是,strut2项目下没有class啊,就算有你也不能这样写吧,貌似在src下面写可以便于书写还是什么的(以后理解再完善)
6、这里我们需要对struts.xml进行配置了。先给代码哈、、、
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="struts2" extends="struts-default">
<action name="login" class="">
<result name="success"></result>
</action>
</package>
</struts>
解释下:
这里面的
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">来源于struts2.2.1.1的apps里面的例子,我们知道的,apps下是一些可以跑起来的例子,所以他也肯定配置好了struts.xml了,是吧,我们直接把这头部拿来用用,可以吧、、
然后<struts></struts>就像一个大房子,<package>是里面的房间,根据不同的name,可以找到对应的房间,然后房间里面有很多的桌子<action>,form就是根据action的name对号入座的。好了,先解释这么多,不懂的往后看,待会给你走一回。
7、下面我们在src下建一个package:com.xin.struts2。并在这个package下建一个LoginAction.class。老规矩,先上代码:
package com.xin.struts2;
public class LoginAction {
public String username;
public String Password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public String execute(){
return"success"; //注释一下,这里返回的success和struts.xml中的<result name="success">对应
}
}
这里我就不解释了,学过java都知道是什么回事。
8、现在我们的struts.xml中的action中的class的路径可以填上了:<action name="login" class="com.xin.struts2.LoginAction">
9、下面我们new一个result.jsp。这个页面用于显示结果,上代码:
username:${requestScope.username}<br>
password:${requestScope.password}
10、貌似现在已经好了吧,部署一下看能跑起来不,其实是不能的。因为还缺少一个架包,在struts2.2.1.1这个版本里面javassist依赖被OGNL排除了的,所以要引入javassist_3.7.ga.jar。那么这个架包哪找呢?我们可以从可以运行的实例中找到。打开struts的apps,打开其中一个.war文件,找到WEBROOT下的lib,里面肯定有的
11、好了,现在可以部署让程序跑起来了。我上传了这个简单的源代码,希望对像我这样的菜鸟有帮助吧。
下面我来叙述一下这个运行过程是怎么样走的、、、、、、、、、
1、首先,我们运行login.jsp,提交表单的信息,其中action被web.xml拦截,这是wen.xml的filter-mapping中/*的功劳
2、来到web.xml,它的filter获取到action的信息是login,然后就去找struts.xml中对应的action
3、struts.xml中的struts可以有很多个package,package又可以包含很多个action,它会根据web.xml传过来的action的name选着对应跳转的页面。这里的package.name是struts。里面的action.name 是login,根据class找到对应的LoginAction.java
4、在LoginAction.java中是对username和password的处理,不做过多解释。这里的execute方法返回的值告诉我们要到那个result
5、回到struts.xml了,根据<result>的 name我们指定相应的跳转页面,这里跳转到/result.jsp
好了,整个流程跑完了,回头一看,这么长啊,我晕了~~~