问题描述:
有位网友在使用JDiy框架开发项目时,在web.xml中做了如下配置:
<!-- ..部分代码略.. --> <welcome-file-list> <welcome-file>index.jd</welcome-file> </welcome-file-list> <!-- ..部分代码略.. -->
原本想在访问默认页的时候,直接交由action处理,而运行的时候,却出现404文件未找到的错误。
原因分析:
这是由于web.xml中的welcome-file-list配置段仅对servlet和普通jsp页面有效,而JDiy框架采用的是JDiyLoadFilter来加载的,它是一个Filter而不是Servlet,这也就意味着我们不能将action地址设为默认页。
解决方法:
方法1(采用网页重定向)
首先我们在web.xml中随便定义一个jsp页面作为默认页,代码片段:
<!-- ..部分代码略.. --> <welcome-file-list> <welcome-file>welcome.jsp</welcome-file> </welcome-file-list> <!-- ..部分代码略.. -->
然后我们再去welcome.jsp中做重定向,代码如下:
<html> <head> <meta http-equiv="refresh" content="0;url=index.jd"> </head> <body></body> </html>
这种方法有一些弊端,如,由于它是客户端重定向(实际上会产生两次请求);浏览器地址栏中的地址也变成了跳转后的地址,不利于用户体验,同时也不利于SEO搜索引擎优化等。
方法2(采用forward action)
这是JDiy官网推荐的方法,那就是直接将请求转发至Action。
首先如同方法1一样,在web.xml中随便定义一个jsp页面作为默认页,如:
<!-- ..部分代码略.. --> <welcome-file-list> <welcome-file>welcome.jsp</welcome-file> </welcome-file-list> <!-- ..部分代码略.. -->
然后不同的是,welcome.jsp代码变成如下这样:
<%@ page import="net.jdiy.core.JDiyAction" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <% JDiyAction.forwardAction("index.jd"); return; %>
这儿我们使用到了JDiyAction类的forwardAction静态方法,直接将请求转发到action,这种方法不会产生多余的请求,浏览器中显示的地址也不会发生改变,是最完美的解决方案~~