【问题标题】:using httpsession for session management使用 httpsession 进行会话管理
【发布时间】:2013-12-18 10:16:35
【问题描述】:

面临在 servlet 程序中管理会话的问题。这是我的 servlet 代码。

//`SessionUsingHttpSession .java

package suprio.servlets.examples;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.catalina.Session;

/**
 * Servlet implementation class SessionUsingHttpSession
 */
public class SessionUsingHttpSession extends HttpServlet {
private static final long serialVersionUID = 1L;
   
/**
 * @see HttpServlet#HttpServlet()
 */
public SessionUsingHttpSession() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response)   throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.setContentType("<html/text");
    String name = request.getParameter("txtName4");
    String pass = request.getParameter("txtPassword4");
    if(pass.equals("12345"))
    {
        HttpSession session = request.getSession();
        session.setAttribute("user", name);
        //response.sendRedirect("SessionUsingHttpSessionRedirected");
        RequestDispatcher rd =       request.getRequestDispatcher("SessionUsingHttpSessionRedirected");
    }
}

}

以下代码是从 SessionUsingHttpSession.java 重定向而来的

//SessionUsingHttpSessionRedirected.java
package suprio.servlets.examples;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class SessionUsingHttpSessionRedirected
*/
public class SessionUsingHttpSessionRedirected extends HttpServlet {
private static final long serialVersionUID = 1L;
   
/**
 * @see HttpServlet#HttpServlet()
 */
public SessionUsingHttpSessionRedirected() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.setContentType("html/text");
    PrintWriter out = response.getWriter();
    HttpSession session = request.getSession();
    String user = (String) request.getAttribute("user");
    out.print("Hello"+user);
    
}

}

这是用于查看部分

// UsingHttpSession.html

<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="SessionUsingHttpSession">
Enter Name:<input type="text" name="txtName4"/><br/>
Password: <input type="text" name="txtPassword4"/><br/>
<input type="Submit" value="Enter">
</form>
</body>
</html>

当我尝试通过 apache tomcat 服务器运行它时,我的网络浏览器(mozila、chrome、IE)显示此消息:

如果我保存并打开它,它会给出“hello null”作为输出。现在我的问题是,为什么它会显示这样的消息,因为我只是想将此页面转发到另一个页面。

提前谢谢你。

【问题讨论】:

    标签: java servlets


    【解决方案1】:

    两个 servlet 中的内容类型错误。应该是text/html

    此外,您使用SessionUsingHttpSession servlet 只是为了重定向,那么根本不需要指定内容类型。

    【讨论】:

    • 但是还是不行,我改了程序@kaysush
    【解决方案2】:

    您的内容类型出现反转,您的内容类型为html/text,而不是text/html

    写完后刷新/关闭流也是一个好习惯。

    out.print("Hello"+user);
    out.flush();
    out.close();
    

    【讨论】:

    • 感谢 Kostyan 先生的评论,但我认为在我们使用任何输入/输出流时,flush() 和 close() 应该在此类程序中使用这些方法,我的意思是在文件处理中.我已经更改了我的程序,但网络浏览器的行为仍然相同。@kostyan
    猜你喜欢
    • 1970-01-01
    • 2016-02-07
    • 2012-12-15
    • 2016-04-26
    • 2014-09-21
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多