package bbs.tag;
import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import hnkjxy.bbs.dao.DaoFactory;
import hnkjxy.bbs.dao.UserDao;
import hnkjxy.bbs.entity.*;
/**
* BBS头部信息呈现标签处理程序类
* @author William
*
*/
public class HeaderTag extends TagSupport {
//注册用户URL
private String registerURL="reg.jsp";
//登录用户URL
private String loginURL="login.jsp";
/* 标签结束处理程序。进行用户是否登录判别,以及显示登录信息的处理
*
* @see javax.servlet.jsp.tagext.TagSupport#doEndTag()
*/
@Override
public int doEndTag() throws JspException {
//创建页面的输出流
JspWriter out = this.pageContext.getOut();
//取系统会话对象
HttpSession session = this.pageContext.
getSession();
//获取上下文对象
ServletContext context =
session.getServletContext();
//取在线人数值
Integer counter = (Integer)context.
getAttribute("onlineUser");
//输出的缓存区
StringBuffer sb = new StringBuffer();
//输出页面Logo
sb.append("<div> <img src='image/logo.gif'> </div> ");
//从会话对象中取登录的用户信息
User user = (User)session.getAttribute("curUser");
//判断用户是否登录
if(null==user){
//判断Cookie中是否登录身份信息
//获取请求对象
ServletRequest request = this.pageContext.getRequest();
//取浏览器中的Cookie集合
Cookie[] cookies = ((HttpServletRequest)request).getCookies();
//遍历cookie查询用户身份信息
for(Cookie c :cookies){
//判断cookie中是否存在用户身份信息
if("curUser".equals(c.getName())){
//得到记住的用户编号
String uid = c.getValue();
//创建用户表访问接口
UserDao udao = DaoFactory.getUserDao();
//根据用户编号读取用户信息
user = udao.findUser(Integer.parseInt(uid));
//实现自动登录功能
session.setAttribute("curUser", user);
break;
}
}
}
//在对Cookie扫描后仍然没有登录的处理
if(user==null){
//用户未登录的处理
sb.append("<DIV class=\"h\">");
String tmp= String.format("您尚未 <a href=\"%s\">登录</a> |",
this.loginURL);
sb.append(tmp);
tmp = String.format(" <A href=\"%s\">注册</A>|",
this.registerURL);
sb.append(tmp);
//呈现在线用户人数
sb.append("在线用户人数:" + String.valueOf(counter));
sb.append("</div>");
}else{
//用户已登录处理
sb.append("<DIV class=\"h\">");
String tmp = String.format("%s,您好! |",
user.getUName());
sb.append(tmp);
tmp = " <A href=\"LogoutServlet\">注销</A>|";
sb.append(tmp);
//呈现在线用户人数
sb.append("在线用户人数:" + String.valueOf(counter));
sb.append("</div>");
}
//输出到页面中
try {
out.println(sb.toString());
out.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return this.EVAL_PAGE;
}
/*
* 标签开始时处理方法
* @see javax.servlet.jsp.tagext.TagSupport#doStartTag()
*/
@Override
public int doStartTag() throws JspException {
return this.SKIP_BODY;
}
public String getRegisterURL() {
return registerURL;
}
public void setRegisterURL(String registerURL) {
this.registerURL = registerURL;
}
public String getLoginURL() {
return loginURL;
}
public void setLoginURL(String loginURL) {
this.loginURL = loginURL;
}
}
Javaweb做的bbs论坛
需积分: 31 74 浏览量
2018-01-08
21:18:36
上传
评论 1
收藏 853KB RAR 举报
墩宝
- 粉丝: 3
- 资源: 7
最新资源
- 2022NOC软件创意编程赛项真题python小学高年级-决赛(有解析)
- mathml转换latex需要的xsl文件
- 2022NOC软件创意编程赛项真题图形化小学高年级-决赛赛(有解析)
- gbase驱动下载gbase-connector-java-8.3.81.53驱动下载
- 2022NOC软件创意编程赛项真题图形化小学低年级-决赛赛(有解析)
- InsightFace从青铜到王者,超大规模人脸识别的优雅解法
- python后端开发spider框架详解
- 基于 STM32 与 ESP8266 的智能家居系统源码.zip
- 毕业设计:基于SSM的mysql-个性化点餐配送系统(源码 + 数据库 + 说明文档)
- 基于matlab的鱼苗计数识别(GUI界面).zip代码57
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈