问题描述:
有位网友在使用JDiy框架开发项目时,在web.xml中做了如下配置:
1
2
3
4
5
|
<!-- ..部分代码略.. -->
<
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页面作为默认页,代码片段:
1
2
3
4
5
|
<!-- ..部分代码略.. -->
<
welcome-file-list
>
<
welcome-file
>welcome.jsp</
welcome-file
>
</
welcome-file-list
>
<!-- ..部分代码略.. -->
|
然后我们再去welcome.jsp中做重定向,代码如下:
1
2
3
4
5
6
|
<
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页面作为默认页,如:
1
2
3
4
5
|
<!-- ..部分代码略.. -->
<
welcome-file-list
>
<
welcome-file
>welcome.jsp</
welcome-file
>
</
welcome-file-list
>
<!-- ..部分代码略.. -->
|
然后不同的是,welcome.jsp代码变成如下这样:
1
2
3
|
<%@ page
import
=
"net.jdiy.core.JDiyAction"
%>
<%@ page contentType=
"text/html;charset=UTF-8"
language=
"java"
%>
<% JDiyAction.forwardAction(
"index.jd"
);
return
; %>
|
这儿我们使用到了JDiyAction类的forwardAction静态方法,直接将请求转发到action,这种方法不会产生多余的请求,浏览器中显示的地址也不会发生改变,是最完美的解决方案~~