Struts 2.1在windows 7中的配置(Tomcat 6+JDK 6以及Eclipse )图文

来源:互联网 发布:北大在职研究生 知乎 编辑:程序博客网 时间:2024/06/03 11:41
 

8月16日

 

今天晚上捣鼓了一下Struts 2.1,不知道是版本问题还是什么问题,老是报404错误!

有待解决!!!大哭大哭大哭

补充:9月8日,今天把这个错误(主要就是result not defined)解决了。主要是struts要放在src根目录下,我之前都是放在action里面的。所以会报错。这是我出现的错误,不是每个错误都这样解决的。

8月17日

鉴于上面的404错误是什么原因,我不是很清楚,网上有高人说是:出现这个错误就是说访问的资源不存在,那就肯定要么是配置文件出错了,要么是你的类文件没有放在classes目录下面,无外这两种情况。

我今天把之前的Tomcat 5.5和JDK全部弃之不用,在本本windows 7 上重新捣鼓了一遍,问题解决了,主要是这样做的:

一、

1、下载Struts

下载Struts2.1.6,网址http://struts.apache.org/download.cgi#struts216,点击下图中选中的部分即可下载。

 

image

2、

下载Eclipse for JavaEE(3.4 or 3.5),网址http://www.eclipse.org/downloads/,点击下图选中的链接,进入下一个页面,找到能够下载的地方下载就行。

image

二、Tomcat是6.0版的,jdk是1.6的。不过windows 7上的配置还是有些不一样的。

A、JDK的安装与配置

1、从官网下载jdk-6u24-windows-i586.exe

网址:https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u24-oth-JPR@CDS-CDS_Developer

platform一栏选择“windows”,在下面的小方框中打对勾,然后点击“continue”,然后在弹出的网页中下载jdk-6u24-windows-i586.exe。自己选择下载路径,我下载在F:/JDK中,如图



2、下载完毕后开始安装JDK,直接按照安装向导的提示安装即可,安装时可以自己选择安装路径,我的安装路径是F:/JDK。

3、配置环境变量:右击我的电脑—属性—高级系统设置—环境变量,如图

     在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”;

 

(1)JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径F:\JDK,此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依靠此变量),如图

 

(2)Path使得系统可以在任何路径下识别java命令,设为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,如图



(3)CLASSPATH为java加载类(class or lib)路径,只有类在classpath中,java命令才能识别,设为:

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar (要加.表示当前路径),如图

 

4、环境变量配置完之后测试一下JDK是否安装成功

单击“开始”—“运行”,键入"cmd",然后分别键入命令java -version,java,javac,若出现以下类似画面表示安装成功:



 




B、Tomcat的安装与配置

1、进入http://tomcat.apache.org/ 下载Tomcat7.0.11的32-bit Windows zip版本到F:\Tomcat,下载完之后直接解压,解压到F:\Tomcat\apache-tomcat-0.7.11

2、右击我的电脑—属性—高级系统设置—环境变量,如图



在系统变量中添加以下变量

(1)TOMCAT_HOME,该变量指向解压文件的路径,该目录下有lib、bin等文件夹。添加方法如下:

     点击环境变量下的“新建”,在“变量名”中填写“TOMCAT_HOME”,在“变量值”中填写解压文件的路径,例如F:\Tomcat\apache-tomcat-0.7.11,然后点击“确定”,如图


(2)CATALINA_HOME,该变量的值与TOMCAT_HOME相同,设置方法同(1),如图

 

(3)在“系统变量”中找到Path变量,双击打开Path变量,在“变量值”的最后面添加“%TALINA_HOME%\bin”,如图

 

 

(4)在“系统变量”中找到Path变量,双击打开Path变量,在“变量值”的最后面添加“%TALINA_HOME%\lib\servlet-api.jar”,如图




3、在控制台输入service install Tomcat7,在系统中安装Tomcat7服务项,然后进入控制面板—系统和安全—管理工具—服务,找到Apache Tomcat Tomcat7服务项,右击该项,点“启动”,启动该服务,如图




4、打开浏览器,地址栏输入http://localhost:8080 或 http://127.0.0.1:8080 如果出现tomcat示例主页,则表示服务器安装成功,如图



5、也可以在控制台运行startup.dat和tomcat7.exe(运行时要指明绝对路径,startup.dat和tomcat7.exe在bin目录下)来测试服务器是否安装成功,如图

 

6、在控制台运行bin目录中shutdown.bat可以关闭服务器
7、若无法访问tomcat主要或者无法启动startup.dat,可能是8080端口被占用了,可以用netstat -a 命令查看一下,如图


    如果8080端口被占用了,可以修改tomcat的访问端口,方法如下:找到F:\Tomcat\apache-tomcat-7.0.11\conf目录下的server.xml文件,打开该文件,找到以下内容

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
将其中的 port="8080"改为 port="9090"即可
注:每次需要启动tomcat服务器都要运行startup.bat文件。如果觉得麻烦可以把服务里启动类型设置为自动。但这样开机速度会慢些。

 

三、Eclipse的使用(我是菜鸟)

这里以配置Tomcat 6.0为例。

image

选择Server下面的Runtime Environments:

image

点击右边的“Add”按钮,进“New Server Runtime Environment”对话框,选择我们要配置的Tomcat版本,这里选用了Tomcat v6.0,注意要与你下载的版本一致。

image

Next后进入下图:

image 

在Tomcat installation directory右边的Browse按钮,点击它,进入本地磁盘目录,选择你的Tomcat安装目录,如下:

image

确定后,回到刚才那个对话框,点击JRE右边的Installed JREs按钮,进入下图的界面:

image

如果这里已经配置了JDK,则直接选择即行,如果没有配置的话,就点右边的“Add”,添加一个标准的JRE

image

Next,下图,点右边的Directgry浏览本地文件系统,找到JDK的安装目录。

image

好,确定 – finish,下一步,完成。如下图:

image

 

一般我们用这个工具来做Web项目,就建一个动态Web工程吧:

image

如果上图的选项中没有Dynamic Web Project的话,可在最下面Other那里找到,又或者通过定制菜单将这一项显示在这里进入下图界面,在Project name中输入工程名,这里起名为“HelloWorld”,在Target runtime中选择刚才我们配置的Tomcat 6.0服务器。如下图:

image 

行了,完成。

关于如何把外部的jar包引进我们的项目中来,这个其实很简单,复制那些jar文件,在下图的lib目录下右键粘贴即行。

image

关于如何运行Web项目,Eclipse for JavaEE与MyEclipse的做法不同。

image

进入下图,找到我们配置的服务器:

image

Next – > finish即行。

 四、Eclipse跑Struts 2

建议下载JSP标准标准库JSTL,下载地址:/Files/rongxh7/jstl-jar.rar

好,暂时下载这些,以后,需要用到其他的时,再下载。至于JDK6.0,Tomcat6.0,Eclipse的安装,请大家自行安装,在这里就不演示安装过程了,如有什么问题,再联系我。

关于Eclipse的部分用法,如在Eclipse里配置Tomcat服务器,新建动态Web项目等,请看我的(Eclipse图解教程),或者上网找一下其他的资料学习一下。

来开始我们的项目吧,先做个简单的测试,New一个Dynamic Web Project,起名为“SimpleWeb”,将Struts2.1.6的下载包解压后得到的lib目录,在lib目录下,找到以面的jar包:

xwork-2.1.2.jar
struts2-core-2.1.6.jar
struts2-convention-plugin-2.1.6.jar
ognl-2.6.11.jar
freemarker-2.3.13.jar
commons-loggin-1.0.4.jar
commons-fileupload-1.2.1.jar

把这些包放进项目的lib目录下,同时,建议也把JSTL的核心jar包也放到lib目录,这些JSTL的包主要有:

jstl.jar
standard.jar

我们先要在项目WEB-INF下的web.xml文件中配置Struts2应用,配置后,web.xml全部代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>SimpleWeb</display-name>
  <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>

</web-app>

我们在项目的WEB-INF目录下新建一个文件夹命名为“content”,这个文件夹名一定要这样,如果写成别的,要另外配置一下,但初学的话,就按它默认的吧。我们新建的这个content目录,就是专门用来放JSP文件的。

我们在content目录下建一个JSP文件,命名为“hello.jsp”,内容可以很简单,就在里面写一个简单的话:Hello SImple,代码略。

这时,整个项目的文件夹视图如下:

image

我运行Tomcat服务器,测试一下Struts2配置能不能用。首先我们在地址栏输入:http://localhost:8060/SimpleWeb/hello.jsp ,很遗憾,不管用了,报错了:HTTP Status 404 - The requested resource (/SimpleWeb/hello.jsp) is not available.截图如下:

image

正确的做法是,输入地址: http://localhost:8060/SimpleWeb/hello.action 或者http://localhost:8060/SimpleWeb/hello 如果出现如下结果,就说明Struts2配置成功了。

image

 

注意一点,这只是在WEB-INF/content目录下的文件是通过这种方式访问的;如果不是在这目录下,而在项目目录下,即Eclipse对应项目的WebContent下,就不能这样访问了。举例说,在项目根目录下建个hello.jsp的文件,则我们只能通过http://localhost:8060/SimpleWeb/hello.jsp来访问。

能通过hello.action或者hello访问WEB-INF/content下的hello.jsp,这种做法,是Struts2.1.6跟Struts2.0不同之处之一。使用时请确保你使用的Struts版本是2.1.6+。相关的命名规范与默认的action匹配规则,请参考官方的文档:http://struts.apache.org/2.1.6/docs/convention-plugin.html

我们再新建一个Java类,命名为HelloAction,此类须继承com.opensymphony.xwork2.ActionSupport,代码如下:

package cn.simple.action;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;


public class HelloAction extends ActionSupport {

    @Override
    public String execute() throws Exception {
        System.out.println("HelloAction execute ... ");
        return SUCCESS;
    }
}

让我们再次访问:http://localhost:8060/SimpleWeb/hello.action 或者http://localhost:8060/SimpleWeb/hello 

可以看出,在Eclipse的控制台确定打印出了以下信息,这说明,访问请求确定经过了HelloAction类。

image

同时页面是跳到了WEB-INF/content/hello.jsp文件(如下图),这说明请求的确是从HelloAction类转发到了hello.jsp。

image

看来,好像在不做什么配置,Struts2.1.6也会找到名为HelloAction的类来处理…/hello.action或者…/hello的请求,而好像也没有做什么配置,HelloAction会自动将请求转发给名为hello.jsp的页面,这正是Struts2.1.6的妙用之处,全赖struts2-convention-plugin-2.1.6.jar这个插件,具体了解,可看我上面提供的官方链接,或者看这位帅哥的翻译之作:struts2采用convention-plugin实现零配置

看了上面的HelloAction的代码若感到莫名其妙的话,我这里把那些默认的、约定俗成的代码也写出来,这样,修改后的HelloAction类如下:

package cn.simple.action;

import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;

@Results({
    @Result(name="success",location="hello.jsp",type="dispatcher")
})

public class HelloAction extends ActionSupport {

    @Override
    public String execute() throws Exception {
        System.out.println("HelloAction execute ... ");
        return SUCCESS;
    }
}

这样就容易明白许多了。解释如下:

name = “success” 跟 Action里的execute()方法的返回值SUCCESS(也可写成“success”)对应,即若此Action类一旦返回SUCCESS,就会跳到对应的这个Result去处理。
location = “hello.jsp”,表示请求由这个Action跳转到hello.jsp这个页面。
type = “dispathcer”,表示转发方式,具体解释见下面。


其中type=”dispatcher”表示请求转发,还有另一种常用的叫做type=”redirect”重定向,在下文会出现。Struts2的请求转发和重定向的区别其实跟Java Servlet里的是差不多的。Servlet里与其功能等价的的代码片断如下:

request.getRequestDispatcher("hello.jsp").forward(request, response);    //请求转发
response.sendRedirect("hello.jsp");    //重定向

两者的区别可以这样理解:请求转发(Dispatcher)在转发到的另一页面(如hello.jsp)还能保留Request域里的东西,而重定向(Redirect)的话,就跟它的名字“重定向”一样,跳到了另一个页面(如hello.jsp),不再跟原来页面(或者一个action、或者一个Servlet,或者JSP页面)有任何瓜葛,不会保存原来页面Request域的东西。还有一个表面上的区别就是:请求转发(Dispatcher)到另一个页面(如hello.jsp)后,地址栏里显示的仍然是上一个页面(这里称页面不太合适)的路径(如hello.action),而重定向则显示的是新跳到的那个页面的路径。大家自己测试一下,观察一下,其实也挺容易理解的。

 

 

好了,问题解决了!

以上内容主要来自俩牛人博客:http://luorenhuan.blog.163.com/blog/static/184817309201132244636418/ 以及http://www.blogjava.net/rongxh7/archive/2009/07/18/287258.html

 

原创粉丝点击