【问题标题】:Redirecting to the root URL in servlet重定向到 servlet 中的根 URL
【发布时间】:2017-12-30 22:20:57
【问题描述】:

您好,我使用 servlet 做了简单的 Web 应用程序,根据可用的会话提供登录和欢迎页面。我附上了下面的代码,

每当用户键入 URL http://localhost:8888/ 时,他必须转到 dashboard servlet(如 web.xml 中所述)

dashboard servlet检查会话的地方

如果会话可用,那么我将提供welcome.html 页面, 否则我重定向到login servlet

login servlet

GET 方法, 如果用户有会话我重定向到dashboard servlet 否则我会转发welcome.html 页面

用户输入信息后,会将信息发布到login servlet(即POST)

POST 方法, 我将从请求中获取用户名和密码,我将检查值为adminpassword

如果是真的创建一个会话并将用户重定向到dashboard servlet 否则我会将用户重定向到login servlet(GET 方法)

web 应用程序应该只需要这 2 个 URL,

(1)http://localhost:8888/ (2)http://localhost:8888/login

用户不应该知道我提供给他们的页面类型(html 或 jsp),但我只需要提供 HTML 页面(这是我的要求)

当我启动应用程序引擎时,首先请求发送到仪表板,然后它被重定向到login servlet,但随后它再次为仪表板制作循环,

我使用System.out.println() 来跟踪我的输出的控件

The admin console is running at http://localhost:8888/_ah/admin
Jul 25, 2017 11:12:55 AM com.google.appengine.tools.development.DevAppServerImpl doStart
INFO: Dev App Server is now running
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,
login servlet get method
request no session
-->dashboard servlet
get method
no session,

问题:

如何解决这个问题?

如果我将 web.xml 中的 url 模式更改为 <url-pattern>/index</url-pattern> 并在 servlet 中重定向到 / 我更改为 /index 对于 dashboard servlet 它工作正常,但我该如何利用servlet 的“/”

我已经附上了下面的源代码,

仪表板小服务程序

包小服务程序;

import java.io.IOException;

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

@SuppressWarnings("serial")
public class DashboardServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-->dashboard servlet");
        System.out.println("get method");
        HttpSession session = req.getSession(false);
        if (session != null) {          
            System.out.println("session is available");
            req.getRequestDispatcher("/WEB-INF/welcome.html").forward(req, resp);
        } else {
            System.out.println("no session,");
            resp.sendRedirect("/login");
        }
    }
}

登录 Servlet

package servlet;

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

@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("-->>>login servlet post method");
        String name = req.getParameter("username");
        String password = req.getParameter("password");
        if (name.equals("admin") && password.equals("password")) {
            HttpSession session = req.getSession();
            session.setAttribute("sessionUserName", name);
            resp.sendRedirect("/");

        } else {
            resp.sendRedirect("/login");
        }
    }

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        System.out.println("login servlet get method");
        HttpSession session = req.getSession(false);
        if (session != null) {
            System.out.println("request with session");
            resp.sendRedirect("/");
        } else {
            System.out.println("request no session");
            req.getRequestDispatcher("/WEB-INF/login.html").forward(req, resp);
        }

    }
}

web.xml

<web-app>
    <servlet>
        <servlet-name>Login</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Login</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>Dashboard</servlet-name>
        <servlet-class>servlet.DashboardServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Dashboard</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application></application>
    <version>1</version>
    <threadsafe>true</threadsafe>
    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />
    </system-properties>
    <sessions-enabled>true</sessions-enabled>
</appengine-web-app>

login.html

<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
    <form action="/login" method="post">
        User name :<input type='text' name='username'>Password :<input
            type='password' name='password'><input type='submit'
            value='Submit'>
    </form>
</body>
</html>

welcome.html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>welcome here
</body>
</html>

谢谢,

【问题讨论】:

    标签: java html google-app-engine servlets url-redirection


    【解决方案1】:

    您不应该只检查会话是否为空。您应该将像“logged_in”这样的值作为属性放入会话中。然后,控制它以决定路由的位置。

    更新:

    作为一种快速的解决方案,在 LoginServlet 中将 doGet 路由到 doPost 并更改 doPost,如下所示:

       public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            System.out.println("login servlet get method");
            HttpSession session = req.getSession(false);
            if (session != null && session.getAttribute("sessionUserName")!=null) {
                System.out.println("request with session");
                resp.sendRedirect("/");
            } else {
    
                String name = req.getParameter("username");
                String password = req.getParameter("password");
                if (name.equals("admin") && password.equals("password")) {
                    session = req.getSession();
                    session.setAttribute("sessionUserName", name);
                    resp.sendRedirect("/");
    
                } else {
                   System.out.println("request no session");
                    req.getRequestDispatcher("/WEB-INF/login.html").forward(req, resp);
                }
    
            }
    
        }
    

    【讨论】:

    • 是的,即使我尝试使用会话属性,在 if 条件 (if (session != null &amp;&amp; session.getAttribute("sessionUserName").equals("admin")) ) 下它给出相同的结果@yılmaz
    • @Prakash 如果问题已解决,请将其标记为已解决。
    • 问题行是req.getRequestDispatcher("/WEB-INF/login.html").forward(req, resp);,这是在LoginServlet的doGet()中,而且问题也没有解决,@yılmaz
    • 每当控件到达该行时,它就会形成一个循环,我已经在上面(在我的问题中)证明了这一点,我只是使用System.out.println() 来跟踪它。 @yılmaz
    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多