猿问

Java Servlet 标头隐式对象

我一直在使用 Java servlet 并注意到以下代码中的一个特殊问题:


protected void doPost(HttpServletRequest request, HttpServletResponse 

    response) throws ServletException, IOException {


    response.setContentType("text/html");


    String url = "/Display.jsp";


    CSVFileOperations csvfo = new CSVFileOperations();


    String header = csvfo.getHeaders().remove();

    System.out.println(header);


    request.setAttribute("header", header);


    request.getServletContext().getRequestDispatcher(url).forward(request, 

    response);

特别是,这一行:


request.setAttribute("header", header);


我将字符串标识符和变量名设置为相同。当我通过 调用我的 .jsp 文件中的这个变量时${header},我得到以下输出:


{accept-language=en-US, ua-cpu=AMD64, 

cookie=JSESSIONID=1E0C2784352A46D6EFDE0F8A522F4, host=localhost:8080, 

connection=Keep-Alive, cache-control=no-cache, accept-encoding=gzip, 

deflate, accept=image/gif, image/jpeg, image/pjpeg, application/x-ms- 

application, application/xaml+xml, application/x-ms-xbap, */*, user- 

agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like 

Gecko}

但是,当我将字符串标识符从更改为"header"并"head"在 ${head}.jsp 页面中调用时,我得到了预期的输出。


我的问题是,这是怎么回事?


婷婷同学_
浏览 121回答 1
1回答

呼唤远方

JSP 定义了一些隐式对象,以允许 JSP 访问 Servlet 代码具有的相同信息。这些隐式对象在页面范围内分配,因此它们取代了任何同名的请求属性。解决方案:不要使用与隐式对象名称匹配的请求属性名称。使用 限定访问权限,即在您的 JSP 中requestScope使用。${requestScope.header}我推荐选项 1。JSP 表达式语言定义了一组隐式对象:pageContext:JSP 页面的上下文。提供对各种对象的访问,包括:servletContext:JSP 页面的 servlet 和同一应用程序中包含的任何 Web 组件的上下文。请参阅访问 Web 上下文。session:客户端的会话对象。请参阅维护客户端状态。request:触发JSP页面执行的请求。请参阅从请求中获取信息。response:JSP页面返回的响应。请参阅构建响应。此外,还有几个隐式对象可用,可以轻松访问以下对象:param: 将请求参数名称映射到单个值paramValues:将请求参数名称映射到值数组header:将请求标头名称映射到单个值headerValues:将请求标头名称映射到值数组cookie: 将 cookie 名称映射到单个 cookieinitParam:将上下文初始化参数名称映射到单个值最后,有些对象允许访问使用范围对象中描述的各种范围变量。pageScope:将页面范围的变量名称映射到它们的值requestScope:将请求范围的变量名称映射到它们的值sessionScope:将会话范围的变量名称映射到它们的值applicationScope:将应用程序范围的变量名称映射到它们的值
随时随地看视频慕课网APP

相关分类

Java
我要回答