写一个关于Servlet的问题,真心求指点

ansn009 2011-09-07 09:47:35
问题是这样的,我写的主页需要从数据库读取一些信息。
这些信息是在HomeServlet里读取完,通过Request.setAttribute()设置

然后在index.jsp里通过JSNT和EL技术去循环读取。
我在web.xml里欢迎页面设置为home--也就是HomeServlet的url

但是现在问题来了,我想实现的是如果我不小心输入index.jsp,他也会自动跳转到home处理。
现在没处理的话,直接输入Index.jsp是没有数据的,因为没有从数据库中读取。

我尝试着加了一些方法判断,不过好像有几次都成了死循环,结果比较悲剧。

求大虾给个思路,或者相关的文章,有代码也可以
...全文
85 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shupo 2011-09-07
  • 打赏
  • 举报
回复
学习一下
上路的白手 2011-09-07
  • 打赏
  • 举报
回复
其实这个也很好做啊,在你的配置文件里将路径配置一下 将你的index.jsp也配置到那个servlet的截取路径不就可以了吗?
magong 2011-09-07
  • 打赏
  • 举报
回复
是的,凡是不希望用户直接访问的页面一律放WEB-INF下。
ansn009 2011-09-07
  • 打赏
  • 举报
回复
OK...非常感谢8楼。那我有相当多的这种页面。难道全要放在web-inf里吗???
你要是这种问题,一般怎么处理的。
因为除了index.jsp页面,还有很多类似的页面,也有类似的问题。总感觉全放web-inf里不太好吧?
magong 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ansn009 的回复:]

3楼可能有点明白我想说什么

[/Quote]
我是明白。
你正在从纯JSP转向MVC。
原index.jsp一定要藏起来,放WEB-INF目录下,这样用户不能直接访问(也就避免了直接访问index.jsp的问题)。而且,Servlet中调整forward的目标URL依然能进入index.jsp
ansn009 2011-09-07
  • 打赏
  • 举报
回复
回6楼。。一般情况是这样子的
以前在jsp中嵌入java代码的时候,也无所谓,因为index.jsp可以从数据库读取数据

可是现在不经过HomeServlet处理index.jsp是没有数据的。
我稍微贴一下首页代码,各位应该看得懂的
jsp:include page="top.jsp"></jsp:include>
<div id="main" class="wrap">
<jsp:include page="leftside.jsp"></jsp:include>
<div class="main">
<div class="price-off">
<h2>商品列表</h2>
<ul class="product clearfix">
<c:forEach var="product" items="${productList}">
<li>
<dl>
<dt><a href="product?action=read&id=${product.id}" target="_blank"><img src="images/product/${product.fileName}"/></a></dt>
<dd class="title"><a href="product?action=read&id=${product.id}" target="_blank">${product.name}</a></dd>
<dd class="price">¥${product.price}</dd>
</dl>
</li>
</c:forEach>
</ul>
<div class="pager">
<ul class="clearfix">
<li><a href="home?pageIndex=1">首页</a></li>
<li><a href="home?pageIndex=${pageIndex-1}">上一页</a></li>
<c:forEach var="index" begin="1" end="${totalPage}">
<c:if test="${index==pageIndex}">
<li class="current">${index}</li>
</c:if>
<c:if test="${index!=pageIndex}">
<li><a href="home?pageIndex=${index}">${index}</a></li>
</c:if>
</c:forEach>
<li><a href="home?pageIndex=${pageIndex+1}">下一页</a></li>
<li><a href="home?pageIndex=${totalPage}">末页</a></li>
</ul>
</div>
</div>
<div class="side">
<div class="news-list">
<h4>新闻动态</h4>
<ul>
<c:forEach var="news" items="${newsList}">
<li><a href="news?action=read&id=${news.id }" target="_blank">${news.title }</a></li>
</c:forEach>
</ul>

</div>
</div>
<div class="spacer clear"></div>
</div>
<div class="clear"></div>
</div>
<jsp:include page="footer.jsp"></jsp:include>

如果我输入http://localhost:8090/EasyBuy/或者http://localhost:8090/EasyBuy/home,他会经过HomeServlet处理,然后转发至index.jsp,这样index.jsp显示的时候是有数据的
可是如果我现在直接输入http://localhost:8090/EasyBuy/index.jsp。。页面是出来了,不过没有数据
我的想法就是有没有办法处理下。
4楼的方法我再想想,感觉好像是可以,不过不是我想要的效果
walkman_22 2011-09-07
  • 打赏
  • 举报
回复
一般默认的都是进入index.jsp。不用设置什么~~
ansn009 2011-09-07
  • 打赏
  • 举报
回复
说的是有点乱。
主要是因为我有点HTML的思维,所以一时改不来。
3楼可能有点明白我想说什么

这样吧。
比如在HTML中,首页,我们一般输入......index.html
在学jsp的初期,我也是这样输入地址的......index.jsp

但是现在在学servlet,他是先经过servlet处理完,然后通过
request,setattribute("name",name);
然后转发至index.jsp,通过出来的。
可是如果我不小心输入http://localhost:8090/EasyBuy/index.jsp。的时候,他页面会出现,可是不会有数据

我想要的效果就是,如果不小心输入这个地址的时候,他也能像输入http://localhost:8090/EasyBuy/出数据
magong 2011-09-07
  • 打赏
  • 举报
回复
原index.jsp移动到WEB-INF目录下藏起来,最好。
magong 2011-09-07
  • 打赏
  • 举报
回复
将home Servlet也映射到/index.jsp上,如下配置:

<servlet>
<servlet-name>homeServlet</servlet-name>
<servlet-class>xxx.HomeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>homeServlet</servlet-name>
<url-pattern>/index.jsp</url-pattern>
</servlet-mapping>
安心逍遥 2011-09-07
  • 打赏
  • 举报
回复

没看懂你什么业务

前台要传什么,后台要做什么处理

不过,前后台都可以做验证啊

祝你好运
walkman_22 2011-09-07
  • 打赏
  • 举报
回复
没看懂你要做什么。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧