【问题标题】:session.getAttribute from servlet and display in htmlsession.getAttribute 来自 servlet 并以 html 显示
【发布时间】:2014-12-26 17:40:38
【问题描述】:

我有一个登录 servlet,它从登录 html 文件中获取值并立即重定向到 sessiondemo.html。

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

  public class logIn extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse res)
                      throws ServletException, IOException {

      res.setContentType("text/html");
      PrintWriter out = res.getWriter();
      HttpSession session = req.getSession(true);

      //getting the value(s) from HTML
      String fname = req.getParameter("fname");
      String lname = req.getParameter("lname");
      String email = req.getParameter("email");
      String address = req.getParameter("address");

      //Storing the values in Session
      session.setAttribute("FirstName", fname );
      session.setAttribute("LastName", lname );
      session.setAttribute("Email", email);
      session.setAttribute("address", address);

      res.sendRedirect("http://localhost:8080/apps/sessiondemo.html");
      out.close(); 
    }
  }

我想不通的是,我想在 sessiondemo html 中显示名字和姓氏。我知道代码必须写在 seesiondemo html 中,但它不起作用。

这是我尝试过的:

<% session.getAttribute("FirstName", fname);
        out.println("You are logged in as" + fname + "!");%>

XML 文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>
  <description>Test examples</description>
  <display-name>My Servlets</display-name>

 <servlet>
  <servlet-name>GET</servlet-name>
  <servlet-class>GET</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>GET</servlet-name>
  <url-pattern>/GET</url-pattern>
</servlet-mapping>

 <servlet>
  <servlet-name>POST</servlet-name>
  <servlet-class>POST</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>POST</servlet-name>
  <url-pattern>/POST</url-pattern>
</servlet-mapping>

 <servlet>
  <servlet-name>Cart</servlet-name>
  <servlet-class>Cart</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>Cart</servlet-name>
  <url-pattern>/Cart</url-pattern>
</servlet-mapping>

<servlet>
  <servlet-name>logIn</servlet-name>
  <servlet-class>logIn</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>logIn</servlet-name>
  <url-pattern>/logIn</url-pattern>
</servlet-mapping>


</web-app>

【问题讨论】:

  • 你为什么尝试那个HttpSession#getAttribute(...) 的声明是什么?它接受多少个参数?
  • 我只是试了一下,如果你知道如何在 html 中显示名字,请帮帮我?
  • 这表明你还没有完成研究。 HttpSession#getAttribute(String) 只接受一个参数,一个 String 值,而不是两个。
  • 你把scriptlet放在哪里了?在.html 文件中?
  • 我已将 session.getattribute 放入我希望它显示的 html 中

标签: java html session servlets login


【解决方案1】:

不使用 localhost ,用 ip 替换 eg: 'http://localhost:8080/apps/sessiondemo.html 'replace 'http://127.0.0.1:8080/apps/sessiondemo.html' 再试一次。

【讨论】:

    【解决方案2】:

    Forget about scriptlets, avoid its usage。请改用Expression language

    <div id="divUser">
        Welcome ${FirstName} ${LastName}
    </div>
    

    这里,${FirstName} 将替换为名称为 "FirstName" 的属性存储在以下范围之一中:

    • 页面范围
    • 请求范围
    • 会话范围
    • 应用范围

    这只有在 JSP 中使用时才有效。 HTML 是静态的,因此应用服务器不会对其进行编译或评估,因此您不会得到任何结果。

    更多信息:

    您还应该指定至少使用 Servlets 2.4 来启用表达式语言。目前,Servlet 是 3.1 版,但您可以在 Jetty 9+ 安装中使用 Servlet 3.0。更改您的 web.xml 文件以在顶部添加以下语句:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
          version="3.0"> 
    
        <description>Test examples</description>
        <display-name>My Servlets</display-name>
    
        <!-- rest of the content of your web.xml -->
    
    </web-app>
    

    您可以在此处查看 jetty servlet 版本兼容性:Jetty Version Comparison Table

    【讨论】:

    • @Reda93 你为什么首先使用纯 html?这是你所有问题的根源。
    • @Reda93 您正在重定向到 sessiondemo.html。它应该是 sessiondemo.jsp。 JSP 是动态 HTML。
    • 所以如果我将 sessiondemo.html 更改为 sessiondemo.jsp,它会工作吗?
    • @Reda93 是的,更改文件的扩展名和从 html 重定向到 jsp 的代码,它将起作用。再说一遍,不要使用 scriptlet。
    • 好吧,我改了,但是没有取值,只是显示了 Welcome ${FirstName} ${LastName}
    【解决方案3】:

    对于会话尝试使用这个...

    <% request.getSession().getAttribute("FirstName") %>
    

    【讨论】:

    • 我应该在会话中工作,所以如果你知道如何在会话中做,请告诉我?
    • 我只尝试了 FirstName 但没有奏效,所以我只是试了一下,我知道它只需要一个参数并且我知道它是错误的,而不是告诉我它的错误,请至少告诉我我如何解决它?
    猜你喜欢
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多