【问题标题】:Create a Session in Java Application在 Java 应用程序中创建会话
【发布时间】:2015-01-04 12:07:46
【问题描述】:

我正在尝试从某个网站获取 csv 文件,但它要求用户在下载之前先登录。

我尝试使用 Internet Explorer 登录并使用该会话进行下载,但没有成功。所以我猜我需要将用户数据发布到网络上,得到答案并下载文件。

如何使用 Java 创建会话并下载文件?

提前谢谢你。

【问题讨论】:

  • 网站是否提供API?
  • @Mr.Polywhirl 我现在正在调查。如果它有一个 API,它会有一个标准的方式让我访问文件吗? f.e.我需要给他们一个特定的“用户令牌”或类似的东西吗?
  • @Mr.Polywhirl 我稍后会更新我的问题。
  • @Mr.Polywhirl 该网站提供了一个 HTTP GET 来获取会话令牌,以后可以使用它。谢谢你的提示。另外,我可以在 Java 中改用 HTTP POST 吗?
  • 您是否尝试过按照教程进行操作? How To Send HTTP Request GET/POST In Java.

标签: java session login


【解决方案1】:

您需要使用javax.servlet.http 包。为了使用这个包,您需要下载一个 web servlet 容器,例如JettyTomcatWildFly。以下两个类创建和检索会话。您可以使用这些作为解决问题的指南。

如果您使用的是 Eclipse,则将 Web servlet 添加到您的项目构建路径是相当容易的。 Eclipse: How do I add the javax.servlet package to a project?

CreateLoginSession.java

import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class CreateLoginSession extends HttpServlet {
    private static final long serialVersionUID = -881190270020485083L;

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // Get the session if exists or create a new one.
        HttpSession session = request.getSession(true);

        // Set session attributes
        session.setAttribute("username", username);
        session.setAttribute("password", password);

        try {
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
            writer.printf("<html><body>Thank you, %s. You are now logged into the system.<br>", username);

            // Encodes the specified URL by including the session ID in it,
            // or, if encoding is not needed, returns the URL unchanged
            String newURL = response.encodeURL("/ServletSession/GetSession");

            // Return a <a> tag with the new url
            writer.printf("Click <a href=\"%s\">here</a> for another servlet</body></html>", newURL);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

GetLoginSession.java

import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class GetLoginSession extends HttpServlet {
    private static final long serialVersionUID = 632668633781294570L;

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        // Get the session if it exists
        HttpSession session = request.getSession(false);

        try {
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
            writer.println("<html><body>");

            // If you are not in a session - you are not logged in
            if (session == null) {
                writer.println("<p>You are not logged in</p>");
            } else {
                writer.println("Thank you, you are already logged in");
                writer.println("Here is the data in your session");

                Enumeration<String> attrs = session.getAttributeNames();

                while (attrs.hasMoreElements()) {
                    String name = attrs.nextElement();
                    Object value = session.getAttribute(name);
                    writer.printf("<p>name=\"%s\" value=\"%s\"</p>", name, value);
                }
            }
            // Write html for a new login
            writer.println("<p><a href=\"/ServletSession/login.html\">Return</a> to login page</p></body></html>");
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【讨论】:

  • 非常感谢您的回答。事实上,这将作为一个非 API 的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2013-01-20
相关资源
最近更新 更多