为何web.xml中的welcome-file-list不能是Action地址

问题描述:

有位网友在使用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,这种方法不会产生多余的请求,浏览器中显示的地址也不会发生改变,是最完美的解决方案~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值