`
流年已逝_奋斗不止2013
  • 浏览: 2088 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

J2ee标签类实现用户登录验证和页面跳转

    博客分类:
  • J2ee
阅读更多

    在JavaWeb应用中,很多Jsp页面需要特定的用户权限才能浏览,比如需要用户登陆后才能访问某个homework.jsp,而如何不做任何拦截操作,用户可以在浏览器的URL中直接输入***:***/homework.jsp从而获得jsp页面资源,这是不能被允许的。

    针对这种情况,一种简单粗暴的方法就是在这类jsp的开头加入java脚本代码,对session进行检查。这样做可以生效,但代码复用性太差,同样功能的逻辑,如果有100个这样的jsp页面,就要写100遍,不便于维护。本文介绍如何使用java标签来实现jsp页面的请求拦截和用户验证。

    java中的标签类使用方法我就不详细介绍了,一般的普通标签逻辑,比如输出提示信息,简单的数据运算,这些操作使用SimpleTagSupport就可以实现了。但是对于类似于登陆验证这类在标签处理后需要返回处理jsp页面的逻辑,SimpleTagSupport就无法满足了,需要使用TagSupport。

    首先,新建一个CheckSessionHandler继承TagSupport。

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class CheckSessionHandler extends TagSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	
	@Override
	public int doStartTag() throws JspException { 
		int result=0;
		HttpSession session=pageContext.getSession();
		String loginInfo=(String)session.getAttribute("LoginInfo");
		if(loginInfo==null){
			result=SKIP_BODY;
			try {
				HttpServletResponse response=(HttpServletResponse)pageContext.getResponse();
				response.sendRedirect("/HomeworkWeb/");
			} catch (IOException e) {
			// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else{
			result=EVAL_BODY_INCLUDE;
		}
		return result; 
	}

}

    上面一段代码中,doStartTag方法,是服务器遇到标签开始项时就执行的方法,pageContext是TagSupport的实例变量,这个pageContext是调用该标签的jsp的上下文对象,可以被Handler继承直接使用,通过这个pageContext对象获取HttpSession和HttpServletResponse,对session做逻辑判断用户是否登陆过,然后使用response进行重定向。

 

     注意,这里最关键的一步在于result的赋值,如果result的值为SKIP_BODY,则方法返回jsp之后,服务器将跳过标签开始和标签结束部分的全部部分。这一步很重要,因为很多情况下jsp页面会使用javabean等操作,这些bean的赋值可能必须在对已登陆用户才有效,对于未登录用户,如果不跳过这些操作,服务器可能会报cannot find bean in scope等类似的错误,因此这里必须对result进行正确赋值。当用户已经登陆的情况下,result被赋值为EVAL_BODY_INCLUDE,则服务器将继续执行标签体重的内容。

     第二步,在WebContent/WEB-INF/tlds/MyTag.tld中添加该标签

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
	<tlib-version>1.2</tlib-version>
	<jsp-version>2.0</jsp-version>
	<short-name>MyTag</short-name>
	<tag>
		<name>checkSession</name>
		<tag-class>edu.nju.homework.tag.CheckSessionHandler</tag-class>
	</tag>
</taglib>

     第三步,在jsp页面中使用标签。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="MyTag" uri="/WEB-INF/tlds/MyTag.tld" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>我的作业列表</title>
</head>
<MyTag:checkSession>
<h1 style="position:relative;left:140px">您的作业列表</h1>
<jsp:useBean id="homeworkList" type="edu.nju.homework.bean.HomeworkList"  scope="session"></jsp:useBean>
<jsp:useBean id="homework" class="edu.nju.homework.bean.Homework" scope="page"></jsp:useBean> 
<TABLE width="60%" border="0" cellpadding="0" cellspacing="1">
	<tbody>
		<tr>
			<th>课程名称</th>
			<th>作业情况</th>
		</tr>
		<%
			for(int i=0;i<homeworkList.size();i++){
				pageContext.setAttribute("homework",homeworkList.getHomework(i));
		%>
		<tr>
			<td align="center"><jsp:getProperty name="homework" property="courseName"></jsp:getProperty></td>
			<td align="center"><jsp:getProperty name="homework" property="state"></jsp:getProperty></td>
		</tr>
		<%
			}
		%>
	</tbody>
</TABLE>
</MyTag:checkSession>

</html>

    以上步骤完成后,启动服务器,当用户未登陆且在浏览器中直接输入jsp页面的URL时,将直接跳转到Login页面要求用户登录。

    注:J2EE标签类TagSupport有其他多种用法,本文只是实验性的例子,详情请查询Java API

 

 

 

 

分享到:
评论

相关推荐

    基于Struts和Hibernate和Spring的J2EE架构研究

    - **ActionForward**:定义了Action处理完请求后页面跳转的行为。 - **Taglib**:自定义的JSP标签库,简化了JSP页面的编写。 ##### 1.2 对象关系映射工具Hibernate Hibernate是一个开源的ORM框架,用于简化Java...

    struts2实现的简单登陆验证模块

    2. 用户登录验证的业务逻辑实现。 3. Struts2的配置文件和结果类型。 4. Java环境下的Web开发,尤其是J2EE标准的应用。 5. 拦截器的概念及其在验证过程中的作用。 通过对这些知识点的理解和实践,开发者能够掌握...

    J2EE电子商务系统开发从入门到精通基于Struts和Hibernate技术实现

    - **2.4.2 ActionForward类**:ActionForward类用于定义Action执行后页面跳转的行为。 - **2.4.3 ActionMapping类**:ActionMapping类用于映射ActionServlet、ActionForm和Action之间的关系。 - **2.5 Struts模型...

    基于j2ee的个人博客系统毕业设计+源码

    5. **JDBC和数据库交互**:博客系统必然涉及到数据存储,通过JDBC(Java Database Connectivity)可以连接和操作数据库,如MySQL,实现用户的注册、登录、文章发布等功能。 6. **Hibernate ORM**:尽管标签没有明确...

    J2EE电子商务系统开发从入门到精通--基于Struts和Hibernate技术实现

    ### J2EE电子商务系统开发从入门到精通——基于Struts和Hibernate技术实现 #### J2EE概论 **1.1 简单双层架构到复杂多层架构** - **1.1.1 双层(C/S)软件架构设计** - 双层架构(客户端/服务器架构,Client/...

    J2EE电子商务系统开发从入门到精通

    - 实现员工的登录验证功能。 - **4.2.2 人事信息管理** - 管理员工的人事档案,包括个人信息、工资福利等。 - **4.2.3 新闻发布中心** - 发布公司内部新闻、公告等信息。 - **4.2.4 资产信息管理** - 管理公司的...

    j2ee struts 框架初级

    Action验证用户输入,如果登录成功,则跳转到success.jsp,否则返回登录页面显示错误信息。 通过学习和实践"j2ee struts 框架初级"的"firststruts2"项目,开发者能够掌握Struts2的基础架构,理解如何构建Action、...

    J2EE项目实训——Struts框架技术.rar

    从创建Action类,配置`struts-config.xml`,编写ActionForm,设计JSP页面,到利用拦截器和标签库,逐步搭建一个完整的Struts应用程序。这将帮助你提升在J2EE项目中的实际开发能力,更好地应对企业级开发挑战。

    J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现

    ### J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现 #### J2EE概论 - **双层架构与多层架构的区别**: - 双层架构通常指的是客户端/服务器(Client/Server, C/S)架构,这种架构下的应用程序在...

    J2EE Struts项目 网络在线考试系统

    1. 用户登录与权限管理:Struts1.2的Action类负责接收和处理用户请求,包括登录验证。系统可以设置不同角色的权限,例如,学生只能参加考试,而管理员则能添加试题和管理考试。 2. 考试创建与管理:利用Struts1.2的...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    因此,在具体设计实现该博客网站时,主要考虑了主流博客网站的几个主要功能:(1)博客的注册、登录验证功能(2) 网络用户通过关键字搜索博文功能(3) 最热门博客页面推荐浏览(4) 文章详细内容及相关评论显示(5) 博客...

    在J2EE项目中使用Struts对MVC模式的研究与实现

    Struts的配置文件(如struts.xml)用于定义控制器的逻辑流程,使得页面间的跳转和流程控制更加清晰明了,便于理解和维护。此外,Struts支持将业务逻辑封装在Action类中,这些类扮演控制器的角色,负责处理用户请求,...

    j2ee struct2 架构下 bookstore

    Struts2有集成Spring Security或Apache Shiro等安全框架的能力,可以实现登录验证、角色权限控制等功能,确保用户访问的安全性。 **5. 页面跳转与视图渲染** 在`bookstore`应用中,Struts2的Result类型(例如:...

    J2EE实训教程

    - **转发:** Servlet之间的转发可以在服务器端实现页面跳转,而无需重新发送HTTP请求。 - **重定向:** 重定向是指将当前请求转交给另一个资源处理,客户端浏览器会收到一个新的URL并重新发起请求。 #### 五、...

    J2EE综合性实验报告-学习系统

    在系统页面设计上,除了基本的登录界面和功能页面,还需要考虑用户体验,使界面简洁、实用且美观。例如,学生登录后应跳转至选课页面(xuanke.jsp),选课成功后显示在success.jsp,教师则能进行课程管理操作。 实验...

    基于J2EE的Ajax宝典.rar

    3. **导航和页面跳转**:通过Ajax实现无刷新的页面跳转,提高用户体验。 4. **实时通信**:结合WebSocket,J2EE可以为Ajax提供双向通信,实现实时数据推送,如股票行情、聊天室等功能。 5. **进度条显示**:在文件...

    java Struts J2EE MVC 外文翻译

    Struts 就是这样一种基于 Servlets 2.2 和 JSP 1.1 标签(符合 J2EE 规范)的 MVC 实现。即便你从未使用 Struts 构建系统,通过研究 Struts 也能为你的未来 Servlet 和 JSP 实现带来不少启示。 #### Model-View-...

Global site tag (gtag.js) - Google Analytics