GVKun编程网logo

JSP中的session.getAttribute()提供空值(jsp session.getattribute)

23

在本文中,我们将为您详细介绍JSP中的session.getAttribute的相关知识,并且为您解答关于提供空值的疑问,此外,我们还会提供一些关于3.11、@SessionAttribute和@Re

在本文中,我们将为您详细介绍JSP中的session.getAttribute的相关知识,并且为您解答关于提供空值的疑问,此外,我们还会提供一些关于3.11、@SessionAttribute 和 @RequestAttribute、Java getAttribute()和getParameter()之间的区别、JSP Response.getAttributeNames()方法:获取session对象的所有属性名称、JSP Response.removeAttribute()方法:移除指定的session属性的有用信息。

本文目录一览:

JSP中的session.getAttribute()提供空值(jsp session.getattribute)

JSP中的session.getAttribute()提供空值(jsp session.getattribute)

这是我在JSP中的HTML代码

<select name="urlsel" id="selurl"><option value="eng" name="eng"/><option value="mat" name="mat"/><option value="sci" name="sci"/></select><input type="submit" value="submit option" onsubmit="return validate()"/><%  String opt=session.getAttribute("urlsel");    System.out.println("\n selected optiion is:+opt)%>

上面的JSP代码为 opt* 赋予了 值。我在JSP中尝试过仍为 null
request.getParameter("urlsel"); ***

我想要选择的选项值答案 session.getAttribute("urlsel");

我怎么才能得到它?我想要在我的servlet和servlet中使用session.getAttribute("urlsel");
但却为null的该值。

请帮我。

答案1

小编典典

为了从 会话请求中 获取属性,在执行此操作之前,必须在代码中的某个位置设置/添加属性(即 设置属性, 然后才能获取它们)。

因此,简短的答案是: 在您的情况下 ,请使用而不是getAttribute(String name)会话请求 对象上使用request.getParameter(String name)


您要在此处完成的工作是检索使用HTML表单传递的 参数 。为了做到这一点,使用getParameter(Stringname)方法如下:

String selectValue = request.getParameter("urlsel")

传统上,使用HTTP形式传递的值是在Servlet中检索的 ,然后您可以对它们进行任何处理。

正如我在您的示例中看到的那样,您正在使用这种 PHP 方法。尽管这不是Java
Web应用程序开发中最常用的方法,但是您可以使用表达式语言从_参数_隐式对象中检索在JSP中使用HTML表单传递的
参数(应避免在JSP中使用scriptlet)。


简单的例子

这是一个JSP页面的简单示例,展示了如何检索使用同一页面中的HTML 表单 元素提交的参数(如您的示例):

test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html><head>    <title>Test Page</title>    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body>    <h1>Test Page</h1>    <form action="" method="post">        <p>Choose some course</p>        <select name="course">            <option value="English" name="eng">English</option>            <option value="Math" name="mat">Math</option>            <option value="Computer Science" name="sci">Computer Science</option>        </select>        <p><input type="submit" value="Pass data" /></p>    </form>    <hr />    <h2>Testing passed parameters</h2>    <p>Passed "course" parameter = <span>${param.course}</span></p></body></html>

请注意 EL :的用法${param.course},其中“ param
”是隐式对象之一的名称,而“
course ”是 select 元素的名称,其值是通过提交HTML表单传递的。


聚苯乙烯

您可能会发现阅读一些有关servlet和JSP的教程很有用。这是一个受欢迎的教程,提供了很好的解释和易于理解的示例:

3.11、@SessionAttribute 和 @RequestAttribute

3.11、@SessionAttribute 和 @RequestAttribute

  本篇示例见这个项目的 mvc 分支下的 SesAndReqAttrController.java


① 使用@SessionAttribute来访问预先存在的全局会话属性

  如果你需要访问预先存在的、以全局方式管理的会话属性的话,比如在控制器之外(比如通过过滤器)可能或不可能存在在一个方法参数上使用注解@SessionAttribute

    /**
     * 在处理请求 /helloWorld/jump 的时候,会在会话中添加一个 sessionStr 属性。
     * <p/>
     * 这里可以通过@SessionAttribute 获取到
     */
    @RequestMapping("/sesAttr")
    public String handleSessionAttr(@SessionAttribute(value = "sessionStr") String sessionStr, Model model)
    {
        System.out.println("--> sessionStr : " + sessionStr);
        model.addAttribute("sth", sessionStr);
        return "/examples/targets/test1";
    }

  为了使用这些需要添加或移除会话属性的情况,考虑注入org.springframework.web.context.request.WebRequestjavax.servlet.http.HttpSession到一个控制器方法中。

  对于暂存在会话中的用作控制器工作流一部分的模型属性,要像“使用 @SessionAttributes 存储模型属性到请求共享的HTTP会话”一节中描述的那样使用SessionAttributes。

② 使用@RequestAttribute访问请求属性

  就像@SessionAttribute一样,注解@RequestAttribute可以被用于访问由过滤器或拦截器创建的、预先存在的请求属性:

    @RequestMapping("/reqAttr")
    public String handle(@RequestAttribute("reqStr") String str, Model model)
    {
        System.out.println("--> reqStr : " + str);
        model.addAttribute("sth", str);
        return "/examples/targets/test1";
    }

  可以使用下面的过滤器进行测试:

@WebFilter(filterName = "myFilter", description = "测试过滤器", urlPatterns = { "/*" })
public class MyFilter implements Filter
{
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {}
    
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
    {
        System.out.println("--> MyFilter Do.");
        request.setAttribute("reqStr", "万万没想到,啦啦啦啦啦!");
        
        chain.doFilter(request, response);
        
    }
    
    @Override
    public void destroy()
    {}
    
}

Java getAttribute()和getParameter()之间的区别

Java getAttribute()和getParameter()之间的区别

如何解决Java getAttribute()和getParameter()之间的区别?

getParameter()返回http请求参数。那些是从客户端传递到服务器的。例如http://example.com/servlet?parameter=1。只能退货String

getAttribute()仅用于服务器端使用-你在请求中填充可以在同一请求中使用的属性。例如,你在Servlet中设置了一个属性,并从JSP中读取了该属性。可以用于任何对象,而不仅仅是字符串。

解决方法

getAttribute()和类getParameter()内的方法有什么区别HttpServletRequest

JSP Response.getAttributeNames()方法:获取session对象的所有属性名称

JSP Response.getAttributeNames()方法:获取session对象的所有属性名称

该方法用于获取 session 对象中存储的每一个属性对象的名称,其结果为一个枚举类的对象。

语法:

getAttributeNames()

返回值:保存 session 对象的所有属性名称的枚举对象。

示例

获取 session 对象的所有属性名称,关键代码如下:
<%
  session.setAttribute("user","lzw");
  session.setAttribute("age","27");
  session.setAttribute("addr","Jilin");
  Enumeration names = session.getAttributeNames();
  while(names.hasMoreElements()){
    out.println(names.nextElement()+"<br>");
  }
%>

JSP Response.removeAttribute()方法:移除指定的session属性

JSP Response.removeAttribute()方法:移除指定的session属性

该方法用于删除指定的 session 属性。

语法:

removeAttribute(String name)

参数说明:
  • name:要移除的属性的名称。

示例

移除 session 中的属性,关键代码如下:
<%
  session.removeAttribute("user");
%>

今天关于JSP中的session.getAttribute提供空值的分享就到这里,希望大家有所收获,若想了解更多关于3.11、@SessionAttribute 和 @RequestAttribute、Java getAttribute()和getParameter()之间的区别、JSP Response.getAttributeNames()方法:获取session对象的所有属性名称、JSP Response.removeAttribute()方法:移除指定的session属性等相关知识,可以在本站进行查询。

本文标签: