我是先前发实习的 有认识我的么
我再看公司一个框架 是用SSH 
我的理解是 他们直接用EXT.AJAX.REQUEST 直接访问动作了 基本都这样 
我想自己搭这个框架的时候 却发声了错误 
就是 我访问什么都不成功 包括没有参与动作的 index.jsp 都访问不了
我发几个配置文件给大家看看 求指导
第一个Struts.xml
    <!-- 是否显示详细错误信息 -->
<constant name="struts.devMode" value="true" />
<!-- 国际化资源文件名称 -->
<constant name="struts.custom.i18n.resources" value="i18n" />
<!-- 是否自动加载国际化资源文件  -->
<constant name="struts.i18n.reload" value="false" />
<!-- convention类重新加载 -->
<constant name="struts.convention.classes.reload" value="true" />
<!-- 浏览器是否缓存静态内容 -->
<constant name="struts.serve.static.browserCache" value="true" />
<!-- 配置使用Spring管理Action -->
<constant name="struts.objectFactory"  value="spring" />
<!-- 上传文件大小限制设置 -->
<constant name="struts.multipart.maxSize" value="-1" />
<!-- 主题 -->
<constant name="struts.ui.theme" value="simple" />
<!-- 编码 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.locale" value="zh_CN" />
<!-- 后缀 -->
<constant name="struts.action.extension" value="action" />

<!-- 结果资源的路径-->
<constant name="struts.convention.result.path" value="/WEB-INF/main/" />
<!-- 指定的action -->
<constant name="struts.convention.action.packages" value="com.Achilles.action"/>

    <!-- URL资源分隔符 -->
<constant name="struts.convention.action.name.separator" value="_" />
<!-- 允许使用静态java方法 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />

 <package name="basePackage" extends="struts-default">
<interceptors>
<interceptor-stack name="baseStack">
                <interceptor-ref name="exception" /><!-- 将异常定位到一个画面 -->
                <interceptor-ref name="alias" /><!-- 在不同请求之间将请求参数在不同名字件转换,请求内容不变 -->
                <interceptor-ref name="servletConfig" /><!-- 提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问  -->
                <interceptor-ref name="i18n" />
                <interceptor-ref name="prepare" /><!-- 如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法(可以去掉) -->
                <interceptor-ref name="chain" /><!-- 让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用 -->
                <interceptor-ref name="debugging" /><!-- 提供不同的调试用的页面来展现内部的数据状况  -->
                <interceptor-ref name="scopedModelDriven" /><!-- 如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部 -->
                <interceptor-ref name="modelDriven" /><!-- 如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中 -->
                <interceptor-ref name="fileUpload" /><!-- 提供文件上传功能 -->
                <interceptor-ref name="checkbox" /><!-- 添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox -->
                <interceptor-ref name="multiselect" />
                <interceptor-ref name="staticParams" /><!-- 从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中 -->
                <interceptor-ref name="actionMappingParams" />
                <interceptor-ref name="params">
<param name="excludeParams">dojo\..*,^struts\..</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
                <!-- 配置方法级别的校验 -->
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                    <param name="validateAnnotatedMethodOnly">true</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
            </interceptor-stack>
</interceptors> <!-- 配置默认拦截器栈 -->
<default-interceptor-ref name="baseStack" /> <!-- 未到找Action指向页面 -->
<default-action-ref name="errorPage" /> <action name="errorPage">
<result type="redirect">/WEB-INF/main/error/error_page_404.jsp</result>
</action>
    </package>
    
<include file="struts-config-website.xml"></include>

解决方案 »

  1.   

    第二个 struts-config-website.xml
    <package name="websitePackage" extends="basePackage" namespace="/website/">
    <interceptors>
     <interceptor name="trimInterceptor" class="com.Achilles.common.system.TrimInterceptor"/> 
    <interceptor-stack name="adminStack">
    <interceptor-ref name="trimInterceptor"/> 
     <interceptor-ref name="baseStack" />
    </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="adminStack" />
    </package>
      

  2.   

    第三个 CommonBaseAction 因为每个ACTION都继承了这个类 具体我也不知道干嘛用的 不继承 程序就不能用
    get set块 我就省了
    public class CommonBaseAction extends ActionSupport implements Serializable {
        
    /**
         * 序列号
         */
    private static final long serialVersionUID = -7847038996095839690L;
       
    /**
         * 初始化日志
         */
    protected Logger logger = Logger.getLogger(this.getClass());

    /**
     * 缓存控制
     */
    protected static final String PROGMA = "progma";

    protected static final String NO_CACHE = "no_cache";

    protected static final String CACHE_CONTROL = "Cache_Control";

    protected static final String NO_STORE = "no_store";

    protected static final String EXPIRES = "Expires";

    protected static final Integer ZERO = new Integer(0);

    /**
     * html申明类型
     */
    protected static final String TEXT_HTML = "text/html";

    protected static final String TEXT_PLAIN = "text/plain";

    protected static final String TEXT_XML = "text/xml";

    protected static final String IMAGE_JPGE = "image/jpge";

    /**
     * 工程服务路径
     */
    protected String webAppPath;

    protected String logInfo;

    protected static final String CHAR_ENCODE_UTF8 = "UTF-8";

    protected String encode = CHAR_ENCODE_UTF8;

    protected String id;

    protected String [] ids;

    public CommonBaseAction() {
    super();
    try {
    webAppPath = ServletActionContext.getRequest().getContextPath();
    } catch (Exception e) {}
    }

    /**
     * 设置浏览器禁用缓存
     */
    protected void setResponseNoCache(String type) {
    getResponse().setContentType(type + ";charset=" + encode);
    getResponse().setHeader(PROGMA, NO_CACHE);
    getResponse().setHeader(CACHE_CONTROL, NO_CACHE);
    getResponse().setHeader(CACHE_CONTROL, NO_STORE);
    }

    public String getEncode() {
    return encode;
    } public void setEncode(String encode) {
    this.encode = encode;
    }

    protected void ajax(String content, String type) {
    try {
    setResponseNoCache(type);
    getResponse().getWriter().write(content);
    getResponse().getWriter().flush();
    getResponse().getWriter().close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
      

  3.   

    第4个 TrimInterceptors 
    public class TrimInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 2365641900033439481L; @Override
    public String intercept(ActionInvocation invocation) throws Exception {
    Map<String, Object> parameters = invocation.getInvocationContext().getParameters();
    for (String key : parameters.keySet()) {
    Object value = parameters.get(key);
    if (value instanceof String[]) {
    String[] valueArray = (String[]) value;
    for (int i = 0; i < valueArray.length; i++) {
    valueArray[i] = valueArray[i].trim();
    }

    parameters.put(key, valueArray);


    }
    }
    return invocation.invoke();
    }
    }
      

  4.   

    第五个 ACTION类 很简单的 
    基本就是 配置好的话 就是
    类名 IndexAction 有一个方法 
    public String index()
    {
     return "test";
    }
    jsp 名字 就是 index_test.jsp 类名和返回的名字 访问JSP
    URL就是 项目名/包名/类名!方法名.action
    但是我自己做老是失败 
    我觉得SPRING的配置文件在这里完全没有 但删除后却无法运行 
    求高手指教