• Struts2安装与简单部署实例


    打开http://struts.apache.org/网站,下载strut2

    版本选择:

    Full Distribution: Struts2完整版 建议下载该项(此版包括以下4项);

    Example Applications: Struts2的示例应用,完整版已包括;

    Essential Dependencies Only: Struts2的核心库,完整版已包括;

    Docmentation: Struts2相关文档,包含Struts2的使用文档、参考手册和API文档等。完整版已包括;

    Source:Struts2源代码,如需阅读Struts2源码,需要结合XWork源码点这里 获得。完整版已包括;

    Full Distribution该目录结构下包括

        apps:示例应用;

        docs:相关文档,包括Struts 2的快速入门、Struts 2的文档、以及API文档等内容;

        lib:核心类库,以及Struts 2 的第三方插件类库;

        src:Struts 2框架的全部源代码。

    提示  由于Struts 2必须需要依赖于是XWork,因此读者阅读Struts 2源代码时必须结合XWork的源码,而该src文件夹下并没有提供XWork的源代码。读者必须自行下载XWork源码,下载XWork源码请登录http://www.opensymphony.com/xwork/站点下载。

    lib文件夹下的struts2-core-2.1.6.jar、xwork-2.1.2.jar和ognl-2.6.11.jar等必需类库复制到Web应用的WEB-INF/lib路径下。当然,如果你的Web应用需要使用Struts 2的更多特性,则需要将更多的JAR文件复制到Web应用的WEB-INF/lib路径下。如果需要在DOS或者Shell窗口下手动编译Struts 2相关的程序,则还应该将struts2-core-2.1.6.jar和xwork-2.1.2.jar添加到系统的CLASSPATH环境变量里。(一般5个:

    struts2-core-2.0.11.1.jar

    xwork-2.0.4.jar

    commons-logging-1.0.4.jar

    freemarker-2.3.8.jar

    ognl-2.6.11.jar)

    提示  大部分时候,使用Struts 2的Web应用并不需要利用到Struts 2的全部特性,因此没有必要一次将该lib路径下JAR文件全部复制到Web应用的WEB-INF/lib路径下。

    注意:我下的是strut2 2.3的版本,更上面的不同:

    struts2.2.3最小jar包:
    struts2-core-2.2.3.jar :Struts 2框架的核心类库
    xwork-core-2.2.3.jar :XWork类库,Struts 2在其上构建
    commons-fileupload-1.2.2.jar :文件上传组件,2.1.6版本后必须加入此文件
    commons-io-2.0.1.jar
    commons-lang-2.5.jar
    commons-logging-1.1.1.jar :日志包,Struts 2框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录。
    freemarker-2.3.16.jar :Struts 2的UI标签的模板
    javassist-3.11.0.GA.jar :唯一一个特殊的jar包,此包不在struts2的lib文件夹中。
    ognl-3.0.1.jar  :对象图导航语言(Object Graph Navigation Language),struts2框架通过其读写对象的属性

    编辑Web应用的web.xml配置文件,配置Struts 2的核心Filter。下面是增加了Struts 2的核心Filter配置的web.xml配置文件的代码:

    <?xml version="1.0" encoding="GBK"?>
    <!-- 配置Web应用配置文件的根元素,并指定配置文件的Schema信息 -->
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <!-- 定义Struts 2的核心控制器:FilterDispatcher -->
    <filter>
    <!-- 定义核心Filter的名字 -->
    <filter-name>struts2</filter-name>
    <!-- 定义核心Filter的实现类 -->
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
    </filter>
    <!-- FilterDispatcher用来初始化Struts 2并且处理所有的HTTP请求 -->
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    </web-app>

    注意:

    如果struts2版本是2.1及以前

    web.xml配置过滤器的时候应该是这样:
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 

    如果struts2 版本是2.1以上,web.xml配置:
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 

    错误分析

    java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils
    解决:缺少commons io包

    java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
    解决:缺少commons lang包

    java.lang.ClassNotFoundException: javassist.ClassPool
    解决:缺少javassist包

    我用的是eclipse ee,apache版本是1.7,新建一个dynamic web project没有看到web.xml,为什么呢?是因为新建工程时最后一个选项会让你选择是否产生web.xml,勾选就可以了。参考;http://www.iteye.com/problems/62504

    创建hello.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>strut2 应用</title>
    </head>
    <body>
    <form action="struts.action" method="post">
    请输入姓名:<input type="text" name="name" /><br/>
    <input type="submit" value="提交">
    </form>
    
    </body>
    </html>

    当点击提交按钮时,就会交给struts.actiion,strut2的filter拦截器就会起作用,将用户请求转发给相应的action类。

    下面编写action类的实现。

    理论上,Action可以不继承任何类或实现任何接口,以增强程序的可测试性,这也是和Struts1.X不同的地方。但是,继承自ActionSupport可以减少更多的编码工作。

           在ActionSupport中,定义了方法execute(),当用户向该Action发送请求时,会自动调用。程

     在src目录下的org.action包中:

    package org.action;
    
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class StrutsAction extends ActionSupport
    {
        private  String name;
        public String getName()
        {
            return this.name;
        }
        public void setName(String name)
        {
            this.name=name;
        }
        public String execute() throws Exception
        {
            if(!name.equals("HelloWorld"))
            {
                Map request=(Map)ActionContext.getContext().get("request");
                request.put("name", getName());
                return "success";
            }
            else
            {
                return "error";
                
            }
        }
    
    }

    配置struts.xml

     struts.xml文件应该在哪里,放在WEB-INF/classes路径下,也就是web应用程序类路径。WEB应用程序的类路径是指WEB-INF/classes目录,Eclipse中,创建在src目录下的文件最终发布后会自动复制到WEB-INF/classes目录下。也就是说放在src目录也没用问题(经过测试,确实如此.

    struts.xml:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <package name="default" extends="struts-default">
            <action name="struts" class="org.action.StrutsAction">
                <result name="success">/welcome.jsp</result>
                <result name="error">/hello.jsp</result>
            </action>
        </package>
    </struts>

    strut.xml可以中涉及到很多标签,以下是简单的解释:

    标签名称

    说明

    include

    包含其他xml文件,在示例中,这意味着struts.xml可以访问定义在struts-default.xml文件中的组件。

    该元素可以使得Struts2定义多个配置文件,“分而治之”。

    要注意的是,任何一个struts2配置文件都应该和struts.xml有相同的格式,包括doctype,并且可以放在类路径下的任何地方。

    package

    Action或截拦器分组。

    name:名称,必填项,名称自定义,没特别要求。方便别的package引用。

    extendspackage能继承其他的package,即通过该属性实现,值为另一个packagename

    在示例中,extends =”struts-default”是从struts-default.xml中继承的。

    action

    定义Actionname属性为访问时用到的名称,class属性是Action的类名。

    result

    根据Action的返回值定义页面导航。

    Action的预定义的返回值有:

    String SUCCESS = "success";

    String NONE    = "none";

    String ERROR   = "error";

    String INPUT   = "input";

    String LOGIN   = "login";

    比如,当Action返回SUCCESS时希望转到ok.jsp页面,则可以这样写:

    <result name=”success”>/ok.jsp</result>

        其中,name的缺省为success

     

    welcome.jsp:

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
     <%@ taglib uri="/struts-tags" prefix="s"  %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    hello<s:property value="#request.name"/>
    
    </body>
    </html>

    项目的文件组织结构如下:

    参考了:

    http://my.oschina.net/tomzhao/blog/23782

    http://www.blogjava.net/lzhidj/archive/2008/07/08/213445.html

  • 相关阅读:
    有关mysql数据库的编码
    成功启动了Apache却没有启动apache服务器
    遍历元素绑定事件时作用域是怎么回事啊,为什么要用this关键字,而直接使用元素本身就不行?
    js中给函数传参函数时,函数加括号与不加括号的区别
    win64安装及配置apache+php+mysql
    ubuntu 12.04 安装nginx
    ubuntu下怎么显示右上角的小键盘
    ubuntu12.04安装Vmware Tools
    PyCharm教程
    jira使用指南
  • 原文地址:https://www.cnblogs.com/youxin/p/3521672.html
Copyright © 2020-2023  润新知