2017-11-24 4 views
0

Im Erstellen einer Anwendung und ich durch die Anmeldung von Benutzern, ich versuche, dass, wenn sie die Seite Redirect auf eine andere Seite anmelden, ich versuche, dies mit response.sendRedirect tun, aber das ist funktioniert nicht, es zeigt nur den Code des HTML im Konsolenprotokoll. Ich möchte wissen, warum dies geschieht MethodeServlet Methoden nicht umleiten Seite

Anmeldung Klasse Post ist:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 
     HttpSession session = request.getSession(); 
     JSONObject reqBody = new JSONObject(request.getReader().lines().collect(Collectors.joining(System.lineSeparator()))); 
     JSONObject json = new JSONObject(); 
     Database db = new Database("postgresql", "localhost", "5432", "Reader", "postgres", "kush"); 
     if(session.isNew()) { 
      if(db.checkUser(reqBody.getString("email"), reqBody.getString("pass")) == true) { 
       json.put("status", "new session, welcome back"); 
       storeValue(reqBody.getString("email"), reqBody.getString("pass"), reqBody.getBoolean("admin"), session); 
       response.sendRedirect(request.getContextPath() + "/loggedin.html"); 
      } else { 
       json.put("status", "username or password incorrect"); 
       session.invalidate(); 
      } 
     } else { 
      json.put("status", "session updated"); 
      storeValue(reqBody.getString("email"), reqBody.getString("pass"), reqBody.getBoolean("admin"), session); 
     } 
     out.println(json.toString()); 
    } 

ich versucht habe

response.sendRedirect("loggedin.html"); 

oder

response.setStatus(response.SC_MOVED_TEMPORARILY); 
response.setHeader("Location", "loggedin.html"); 

oder

ServletContext sc = getServletContext(); 
sc.getRequestDispatcher("/loggedin.html").forward(request, response); 
zu verwenden

Mein web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app> 

    <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> 

<servlet> 
    <servlet-name>page</servlet-name> 
    <jsp-file>/loggedin.html</jsp-file> 
</servlet> 
<servlet-mapping> 
    <servlet-name>page</servlet-name> 
    <url-pattern>/Reader/loggedin.html</url-pattern> 
</servlet-mapping> 
</web-app> 

Im die Methoden GET und POST mit xml http Anfrage

loggedin.html

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>Login successful</title> 
</head> 
<body> 
<h1>Welcome</h1> 
</body> 
</html> 

index.html Aufruf:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="ISO-8859-1"> 
<title>Reader | Project</title> 
<script src = 'js/XHR.js'><</script> 
</head> 

<p><input id="email" type="text" name="em"></p> 
<p><input id="password" type="password" name="pw"></p> 
<p> 
<p> Admin user? 
<select id="admin"> 
    <option value="true">Si</option> 
    <option value="false">No</option> 
</select> 
</p> 

<button onclick='sendValue()'>Send</button> 
<button onclick='getValue()'>Get</button> 
<button onclick='deleteValue()'>Delete</button> 
<body> 
<script> 
var wrapper = new XHR(); 
function element(id) { 
    return document.getElementById(id); 
} 

function sendValue() { 
    var email = element('email').value; 
    var password = element('password').value; 
    var is_admin = element('admin').value; 
    wrapper.post('./Login',{email:email, pass:password, admin:is_admin},{'Content-Type':'application/x-www-form-urlencoded'}) 

} 

function getValue() { 
    wrapper.get('./Login',{},{'Content-Type':'application/x-www-form-urlencoded'}) 
} 

function deleteValue() { 
    wrapper.get('./Logout',{},{'Content-Type':'application/x-www-form-urlencoded'}) 
} 

</script> 
</body> 
</html> 

XHR.js

function XHR() { 

    var jsonToParams = json => { 
     var res = ""; 
     for (var attr in json) { 
      if (res === "") { 
       res = attr + "=" + json[attr]; 
      } else { 
       res += "&" + attr + "=" + json[attr]; 
      } 
     } 
     return res; 
    }; 

    this.send = function(method, url, params, headers) { 
     return new Promise(function(fullfill, reject) { 
      var wrapper = new XMLHttpRequest(); 
      wrapper.open(method, url); 
      wrapper.onload = function() { 
       if (this.status == 200) { 
        fullfill(wrapper.responseText); 
       } else { 
        reject({ status: this.status, statusText: wrapper.statusText }); 
       } 
      }; 

      for (var header in headers) { 
       wrapper.setRequestHeader(header, headers[header]); 
      } 

      if (method === 'POST') { 
       wrapper.send(JSON.stringify(params)); 
      } else { 
       wrapper.send(); 
      } 
     }); 
    } 

    this.get = function(url, params, headers) { 
     params=typeof params==="string" ? params : jsonToParams(params); 
     url += "?" + params; 
     this.send('GET', url, params, headers) 
      .then(function(data) { 
       console.log(data) 
      }) 
      .catch(function(error) { 
       console.log(error); 
      }) 
    } 

    this.post = function(url, params, headers) { 
     this.send('POST', url, params, headers) 
      .then(function(data) { 
       console.log(data); 
      }) 
      .catch(function(error) { 
       console.log(error); 
      }) 
    } 
} 
+0

Wie Typ Seite hast du verwendet? JSP? – jhonatan2760

+0

@ Jhonatan2760 Ich verwendete HTML – Cesar

+0

versuchen, JSP zu verwenden. Ich weiß nicht, ob Redirect funktioniert nur auf einfache HTML-Seite – jhonatan2760

Antwort

1

Dies könnte für Sie arbeiten :)

<form action="loggedin.html"> 
    <input type="submit"/> 
</form>