当前位置: 首页 > ds >正文

JSP自定义标签开发(五)——标签类获取 request 、 session

标签类中要是能够取到 request 和 session 这样的对象,对于一个web开发员来说,那是一件多么幸福的事情啊!懂得了这个知识,标签开发与servlet结合开发将变得随心所欲。

实例:

package com.wsy.baobaotao.front.tags;import java.util.List;import javax.servlet.ServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;import org.springframework.util.StringUtils;import com.wsy.baobaotao.base.cons.CommonConstant;
import com.wsy.baobaotao.front.entity.User;public class PermissionTag extends TagSupport {private static final long serialVersionUID = 1L;private String authType;@Overridepublic int doStartTag() throws JspException {
<span style="color:#ff0000;"><strong>		HttpSession session = pageContext.getSession();ServletRequest request = pageContext.getRequest();</strong></span>User u = (User) session.getAttribute(CommonConstant.USER_CONTEXT);System.out.println("/==================================/");System.out.println(u);boolean flag = hasPermission(authType, u);if (flag) {return EVAL_BODY_INCLUDE;}return SKIP_BODY;}private static boolean hasPermission(String authType, User u){boolean hasPermission_flag = false;if(StringUtils.isEmpty(authType) || u == null){return false;}//String[] userPermisssions = {"admin", "manager", "user"};List<String> userAurthTypes = u.getAuthTypes();String[] permisssions = authType.split(",");boolean flag = false;for (String ua : userAurthTypes) {for (String p : permisssions) {if(ua.equals(p)){hasPermission_flag = true;flag = true;break;}}// end inner for loopif(flag){break;}}// end outer for loopreturn hasPermission_flag;}public String getAuthType() {return authType;}public void setAuthType(String authType) {this.authType = authType;}}
因为 继承了 TagSupport 类,所以就能够使用 pageContext 对象


借鉴了一些内容:

来源: http://blog.sina.com.cn/s/blog_6b1c9ed50100ll5q.html


pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它,所以知道request对象、response对象的人比较多,知道pageContext对象的人就比较少了。它是javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。实际上,pageContext对象提供了对JSP页面所有的对象及命名空间的访问,正如前面所介绍的一样,使用pageContext对象可以访问application对象、exception对象,还有session对象等。pageContext对象的方法可以访问除本身以外的8个JSP内部对象,还可以直接访问绑定在application对象、page对象、request对象、session对象上的Java对象。pageContext对象相当于JSP程序中所有对象功能的集成者。不过,这里存在着一个问题,既然可以直接访问JSP内部对象,为什么还要多此一举,通过pageContext对象来访问它们呢?这也正是pageContext对象应用较少的原因。话虽这样说,pageContext对象总是JSP中9个内置对象不可或缺的一部分,读者还是需要掌握它的用法的。

在JSP程序中,我们可以使用pageContext来代表pageContext对象:

 <%
pageContext.Method();
%>

pageContext对象的主要用法如下。

1)getOut()

该方法返回一个JspWriter类的实例对象,也就是JSP内置对象--out对象,可以往客户端写入输入流。它的使用方法如下::

 <%
JspWriter myout=pageContext.getOut();
myout.println("myout write: hello world"+"<br>");
out.println("out write: hello world");
%>

2)getSession()

该方法的返回值是一个HttpSession接口的实例对象,即JSP内置对象--session对象,可以保存不同用户的信息。它的使用方法如下:

<%
String username1="george";
String password1="george";
HttpSession mySession= pageContext. getSession();
mySession.putValue("username",username1);
mySession.putValue("password", password1);
%>

3)getPage()

该方法的返回值是一个java.lang.Object对象,也就是JSP内置对象--page对象。它的使用方法如下:

<%
Object mypage=pageContext.getPage();
out.println(mypage.toString());
%>

4)getResponse()

该方法的返回对象是javax.servlet.ServletResponse,也就是JSP内置对象--response对象,主要用于控制HTTP连接。它的使用方法如下:

<%
ServletResponse myresponse=pageContext.getResponse();
out.println(myresponse.getCharacterEncoding());
%>

5)getRequest()

该方法的返回对象是javax.servlet.ServletRequest,也就是JSP内置对象--request对象,主要用于获取客户端的信息。它的使用方法如下:

<%
ServletRequest myrequest=pageContext.getRequest();
out.println(myrequest.getRemoteHost());
String username2="robin";
String password2="robin";
    myrequest.setAttribute("username",username2);
myrequest.setAttribute("password", password2);
%>

6)getException()

该方法的返回值是当前页的exception对象。它的使用方法如下:

<%
Exception myexception=pageContext. getException();
out.println(myexception.getMessage());
%>

上面的代码片段最好在错误处理程序中使用,也就是page编译指令的isErrorPage属性为true的页面中。

7)getServletConfig()

该方法可以返回当前的config对象,用于获取JSP/Servlet程序的初始参数。它的使用方法如下:

<%
ServletConfig myconfig=pageContext.getServletConfig();
%>

8)getServletContext()

该方法的返回值是一个ServletConfig接口的实例对象,也就是JSP内置对象--application对象的副本。它的使用方法如下:

<%
ServletContext myapplication=pageContext.getServletContext();
out.println(myapplication.getServerInfo());
String username3="java";
String password3="java";
    myapplication.setAttribute("username",username3);
myapplication.setAttribute("password", password3);
%>

9)setAttribute(String name, Object o, int scope)

pageContext对象的setAttribute()方法可以将参数或者Java对象绑定到application对象、session对象、request对象或者page对象上,这里的scope参数可以取以下的值。

pageContext.PAGE_SCOPE

pageContext.REQUEST_SCOPE

pageContext.SESSION_SCOPE

pageContext.APPLICATION_SCOPE

当scope参数的值为pageContext.SESSION_SCOPE时,调用PageContext对象的setAttribute()方法和调用session对象的putValue()方法是等效的,都是将某个参数或者Java对象和当前的session绑定起来。如果scope参数的值为如果scope参数的值为pageContext.APPLICATION_SCOPE,那么调用PageContext对象的setAttribute()方法和调用application对象的setAttribute()方法是等效的。如果scope参数是其他的值,原理也是一样的,我们就不多说了。它的使用方法如下:

<%
pageContext.setAttribute("username","george",
pageContext.APPLICATION_SCOPE);
pageContext.setAttribute("username","robin",pageContext.
SESSION_SCOPE);
%>
还有一些其他的方法,读者可查找相关资料学习。


http://www.xdnf.cn/news/11089.html

相关文章:

  • 思科模拟器-交换机与路由器的配置
  • MS08-067 漏洞利用与安全加固,高级网络安全程序员必会
  • Delphi中ExtractFilePath()及其相近函数用法
  • 【Typst】2.Typst标记语法和基础样式
  • easylogger的移植使用
  • Java高级 | 【实验一】Spring Boot安装及测试 最新
  • STM32单片机编程中标志变量的思想无处不在
  • pip安装python第三方库报错
  • 【python 中的Session 爬取数据案例实践——突发事件预警信息发布网数据抓取】
  • 使用 Python 制作 GIF 动图,并打包为 EXE 可执行程序
  • Ubuntu系统安装与配置NTP时间同步服务
  • 【Harmony OS】作业五 数据存储
  • leetcode题解98:验证二叉搜索树。(中序遍历!!!BST要点!)
  • RHEL7安装教程
  • 黑马程序员TypeScript课程笔记2(11-20)
  • 供应链攻击难以防范 供应商成“安全漏洞”
  • C# CallerMemberName特性
  • JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
  • MicroROS简述
  • 中和农信如何破解小微农户融资难题
  • 【笔记】用命令手动下载并安装 tokenizers 库.whl文件(Python 3.12+)
  • CppCon 2014 学习:Return values take a ”closure” walk
  • 笔记︱数据科学领域因果推断案例集锦(第三弹)
  • 电商仓储出入库操作指引
  • 在 Dify 项目中的 Celery:异步任务的实现与集成
  • LabelMe安装踩坑
  • 异常检测 VS 监督学习
  • 谷歌地图高清卫星地图软件(Google Earth)v6.0.3.2197 中文版 - 前端工具导航
  • CppCon 2014 学习: Less Code = More Software
  • 深度学习入门——基于多层感知机的MNIST手写数字识别