您的位置:首页 > Web前端 > JavaScript

jsp中未登录用户也可以浏览页面的功能实现代码

2012-09-24 20:10 751 查看
<%!
int count=0;
%>
<%

User userr= (User) session.getAttribute("user");

if(userr==null&&count==0){
count++;
this.getServletConfig().getServletContext().getRequestDispatcher("/servlet/FindBoardList").forward(request,response);

}
else{
count--;
ArrayList<Index>boardList=(ArrayList<Index>)session.getAttribute("boardListIndex");
BoardDaoImpl boardDao=new BoardDaoImpl();
for(int i=0;i<boardList.size();i++){

if(boardDao.isParentBoard(boardList.get(i).getBoardName())){%>

<tr class="tr3">
<td colspan="4">
<%=boardList.get(i).getBoardName() %>
</td>
</tr>

<% } else
if( boardList.get(i).getBoardName().equals(boardList.get(i-1).getBoardName())){
continue;

}else

{%>
<tr class="tr3">
<td width="5%">
 
</td>
<th align="left">
<img src="/bbs/image/board.gif">
<a href="/bbs/servlet/FindTopicList?boardid=<%=boardList.get(i).getBoardid() %>"><%=boardList.get(i).getBoardName() %></a>
</th>
<td align="center">
<%=boardList.get(i).getReply_count() %>
</td>
<th>
<span><a href="/bbs/servlet/FindReplyList?topicid=<%=boardList.get(i).getTopicid() %>&title=<%=boardList.get(i).getTitle() %>&boardname=<%=boardList.get(i).getBoardName() %>"><%=boardList.get(i).getTitle() %></a></span>
<br />
<span><%=boardList.get(i).getUsername() %></span> <span class="gray">[ <%=boardList.get(i).getPublishTime() %>]</span>
</th>
</tr>

<% }%>

<%

}

%>
<%} %>

最关键的地方是使用成员变量,count实现第一次登陆的登陆控制,当第一次登陆是user为空并且count=0;获得index页面的实体对象,实现循环有servlet再次跳转到当前页面,但是count的值为1执行else部分在else部分中首先将count的值置为0再次回归到0这样在其他客户端未登录情况下浏览时user为null并且成员变量count==0这样就可以再次获得index.jsp页面的实体对象,保证实体对象不为空。实现多客户端未登录情况下可以同时浏览页面。

这种在仅为判断一次的条件下使用的方法用在if else中时很常用的方法,一种自处理方式,对自己对共有属性的修改在判断完成后自动消除掉这种影响,如同wait()和signal()方法实现同步是一样的原理

servlet的生命周期决定在第一次初始化servlet后所有客户端对servlet中成员变量的修改都是在公共 属性上的修改,相互影响,所以这种方式是不推荐的,但是如果采用自处理的实现方式是可以的。servlet的所有成员变量标志其状态,所有客户端对成员变量的修改都会永远作用在servlet上并影响其他客户端的访问, 处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: