Więc tutaj jest problem Mam formularz połączenia wysyłający żądanie postu do serwletu. aplet ten przekazuje żądanie do różnych stron po wykonaniu pewnych testów (hasło, weryfikacja e-mail użytkownika). Jedynym problemem jest to, że podczas przeglądania mojego żądania POST
otrzymuję prawidłową stronę, ale strona nie wyświetla się w mojej przeglądarce internetowej. Dlaczego?
Oto mój kod.
zaloguj się do serwletu
package AHSServlets;
import java.io.IOException;
import objMetier.signInForm;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import AHSbeans.User;
@WebServlet(
name = "signInServ",
urlPatterns = {"/"}
)
public class signInServ extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
this.getServletContext().getRequestDispatcher("/signIn.jsp").forward(request, response);;
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
signInForm connect = new signInForm();
User user = connect.validateSignIn(request);
HttpSession session = request.getSession();
if (user != null) {
request.setAttribute("connect", connect);
session.setAttribute("sessionUser", user);
this.getServletContext().getRequestDispatcher("/restrict_client/client.jsp").forward(request, response);
}
else
{
request.setAttribute("connect", connect);
this.getServletContext().getRequestDispatcher("/signIn.jsp").forward(request, response);
}
}
}
zalogowanie.jsp
<%@ page pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js" integrity="sha256-QRJz3b0/ZZC4ilKmBRRjY0MgnVhQ+RR1tpWLYaRRjSo=" crossorigin="anonymous"></script>
</head>
<body ng-App="AHS" ng-controller="myCtrl">
<form ng-submit="submitForm()">
<div>
<input type="text" ng-model="userObj.mail" placeholder="email"/>
</div>
<div>
<input type="password" ng-model="userObj.password" placeholder="password">
</div>
<div>
<button type="submit">Connect</button>
</div>
</form>
<div>
<span>${connect.error}</span>
</div>
<script type="text/javascript">
var app = angular.module("AHS", []);
app.controller("myCtrl", function ($scope, $http, $httpParamSerializerJQLike){
$scope.userObj = {
mail: "",
password: "",
}
$scope.submitForm = function() {
$http({
method : 'POST',
url : '/', // use relative
data: $httpParamSerializerJQLike($scope.userObj),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8;'
}
});
};
});
</script>
</body>
</html>
Klasa logowania
package objMetier;
import javax.servlet.http.HttpServletRequest;
import AHSbeans.User;
public class signInForm {
private String EMAIL_FIELD = "email";
private String PASSWORD_FIELD = "password";
private String error = "Default";
public String getError()
{
return (this.error);
}
public User validateSignIn(HttpServletRequest request){
if(request.getParameter("password").isEmpty())
{
this.error = "wrong password";
return (null);
}
User user = new User();
user.setEmail("test@hotmail.com");
this.error = "connected";
return (user);
}
}
Jak widać w signIn.jsp
mam ${connect.error}
pokazywać mi komunikat o błędzie. Powtarzam się, ale widzę ten komunikat wyświetlany za pomocą debugera, ale nie w mojej przeglądarce internetowej. Więc to, co się dzieje, to po POST
pozostaje na ścieżce strony internetowej i otrzymuję kod HTML tylko w odpowiedzi.
EDYTUJ
Oto zrzut ekranu
Każda pomoc jest bardzo ceniona.
1 odpowiedź
Ok, więc nie znam się na angular, ale po prostu patrzę na w3 dla ajax , musisz obsłużyć odpowiedź mniej więcej tak:
Dodaj id do swojego elementu span (usuń z niego ${connect.error}
):
<span id="somediv"></span>
Dodaj wtedy sukces:
<script type="text/javascript">
var app = angular.module("AHS", []);
app.controller("myCtrl", function ($scope, $http, $httpParamSerializerJQLike){
$scope.userObj = {
mail: "",
password: "",
}
$scope.submitForm = function() {
$http({
method : 'POST',
url : '/', // use relative
data: $httpParamSerializerJQLike($scope.userObj),
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8;'
}
}).then(function mySuccess(response) {
//handle response here
console.log(response.data);
document.getElementById("somediv").innerHTML = response.data;
});
};
});
</script>
Następnie dla twojego serwletu:
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
signInForm connect = new signInForm();
User user = connect.validateSignIn(request);
HttpSession session = request.getSession();
if (user != null) {
// request.setAttribute("connect", connect); //what the hell is connect supposed to be here?
session.setAttribute("sessionUser", user);
// this.getServletContext().getRequestDispatcher("/restrict_client/client.jsp").forward(request, response); //you do not do this in ajax requests.
}else{
//request.setAttribute("connect", connect);
//this.getServletContext().getRequestDispatcher("/signIn.jsp").forward(request, response);
}
response.setContentType("text/plain"); // Set content type
response.setCharacterEncoding("UTF-8");
response.getWriter().write("hello world"); // Write response body.
}
EDYTUJ:
Odpowiedź tutaj jest świetna do nauki o ajax i serwletach:
Jak korzystać z Servletów i Ajaxu?
Podobne pytania
Powiązane pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].