Контроллер возвращает представление, но на входе я получаю текстовый ответ в формате html, и страница не загружается - PullRequest
0 голосов
/ 04 июня 2019

Я отправляю запросы на сервер.Контроллеры управляют ими и отправляют ответ с HTML-контентом, но этот контент не загружается как обычная JSP-страница.Я вижу ответ в Developer Tools в браузере (html-код и вижу его в окне предварительного просмотра), но страница не загружает данные из ответа.Он все еще остается открытым на странице, с которой я отправил ответ.Что я должен сделать для загрузки этой обычной страницы?

Контроллер:

java

@Controller
public class FormController {

    private static final Logger LOGGER = LogManager.getLogger();
    private static final ObjectMapper MAPPER = new ObjectMapper();

    @RequestMapping(value="/authorization", method=RequestMethod.POST)
    public ModelAndView authorization(HttpServletRequest request, HttpServletResponse response) {

        Map<String, String> userAuthForm;

        try {

            userAuthForm = MAPPER.readValue(request.getReader().lines().collect(Collectors.joining()),
                    new TypeReference<Map<String, String>>() {
                    });
            ModelAndView mv = new ModelAndView();
            mv.setViewName("page_of_user");
            mv.addObject("login", userAuthForm.get("login"));
            mv.addObject("password", userAuthForm.get("password"));
            response.addCookie(new Cookie("authtoken", "0000012T"));


            return mv;

        } catch (IOException e) {

            LOGGER.error("Error reading request data!");

            ModelAndView mv = new ModelAndView();
            mv.setViewName("/index");
            response.setStatus(401);
            return mv;

        }

    }
}

Конфигурация

@Configuration
@EnableWebMvc
@ComponentScan({"com.d1abl023.navy"})
public class NavyConfiguration implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}

JS-функция, которая отправляет запрос

function sendFormData(form) {

    var authData = {

        "login": form.login.value,
        "password": form.password.value

    };

    var requestString = JSON.stringify(authData);

    var request = new XMLHttpRequest();

    request.open("post", "authorization", true);
    request.send(requestString);
    return false;
}

JSP-страница, где вызывается функция JS

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>

<head>
    <title>NAVY</title>
    <link href="<c:url value='resources/css/index.css'/>" type="text/css" rel="stylesheet">
    <link href="<c:url value='resources/css/main.css'/>" type="text/css" rel="stylesheet">
</head>

<body>

<div id="header">
    HEADER
</div>

<div id="body">
    <div id="reg_auth_info">

        <div id="reg_auth_info_text">Register or authenticate!</div>

        <form id="auth_form" onsubmit='return sendFormData(this)'>

            <p>
                <label for="login" class="reg_form_labels">Login:</label>
                <input type="text" id="login" name="login" class="reg_form_fields" required>
            </p>
            <p>
                <label for="password" class="reg_form_labels">Password:</label>
                <input type="password" id="password" name="password" class="reg_form_fields" required>
            </p>

            <button type="submit" class="reg_form_button" form="auth_form">Log in</button>
            <br>
            <button type="button" class="reg_form_button" onclick="goToRegistration();">Registration</button>

        </form>
    </div>
</div>


<div id="footer">
    FOOTER
</div>


<script src="<c:url value='resources/js/index.js'/>" type="text/javascript"></script>

</body>
</html>

Я ожидаю, что будет загружена новая страница с требуемым содержимым, но в ответ будет получен только HTML-текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...