Перемещение пружины на пружину, контроллер загрузки не работает - PullRequest
0 голосов
/ 03 июня 2019

У меня есть приложение, построенное на Spring 4.3.20 и Hibernate 3.6, мы использовали SimpleUrlHandlerMapping в конфигурации XML для отображения контроллера, и оно работает нормально.

Я пытаюсь использовать пружинную загрузку 1.5.17. RELEASE для совместимости с текущей версией весны 4.3.20-RELEASE. Теперь, после решения всех проблем компиляции и развертывания, я не вижу, как мой существующий контроллер работает нормально с отображением в браузере / POST / GET. Всегда отображается ошибка 404.

Я проверил журналы во время развертывания и обнаружил, что сопоставление выполнено правильно, перейдите в журналы ниже:

2019-06-03 12:39:26.333  INFO 15630 --- [nio-8084-exec-9] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

Я также создал один отдельный контроллер с аннотацией (без SimpleUrlHandlerMapping), и его отображение выполняется правильно в соответствии с журналами, и он отлично работает

2019-06-03 12:32:10.437  INFO 26049 --- [nio-8084-exec-9] .w.s.m.a.DefaultAnnotationHandlerMapping : Mapped URL path [/testc] onto handler 'testController'
2019-06-03 12:32:10.437  INFO 26049 --- [nio-8084-exec-9] .w.s.m.a.DefaultAnnotationHandlerMapping : Mapped URL path [/testc.*] onto handler 'testController'
2019-06-03 12:32:10.437  INFO 26049 --- [nio-8084-exec-9] .w.s.m.a.DefaultAnnotationHandlerMapping : Mapped URL path [/testc/] onto handler 'testController'
2019-06-03 12:32:10.583  INFO 26049 --- [nio-8084-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/testc],methods=[GET]}" onto public java.lang.String com.krawler.spring.TestController.test()
2019-06-03 12:32:16.898  INFO 26049 --- [nio-8084-exec-9] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/testc],methods=[GET]}" onto public java.lang.String com.krawler.spring.TestController.test()
2019-06-04 16:55:12.448  INFO 13811 --- [nio-8084-exec-9] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/AuthHandler/*.do] onto handler 'authHandlercontroller'

Я пытался с @Controller с jsp страницей, и он работает нормально, но не с тем, где мы используем ModelAndView.

Класс контроллера

@Controller
@RequestMapping("testc")
public class TestController {

    @GetMapping
    public String test(){
        return "test";
    }
}

/ WEB-INF / JSP / test.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

AuthHandlreController

public ModelAndView verifyUserLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        JSONObject jobj = new JSONObject();
.....
        return new ModelAndView("jsonView_ex", "model", jobj.toString());
    }

Боб для jsonView_ex

<bean name="jsonView_ex" class="com.mycompany.views.JsonView_ex">
        <property name="contentType">
            <value>text/html; charset=ISO-8859-1</value>
        </property>
    </bean>

JsonView_ex.java

public class JsonView_ex extends AbstractView {

    protected void renderMergedOutputModel(Map map,
            HttpServletRequest request, HttpServletResponse response) throws Exception {
        String model = (String) map.get("model");

        try {
            JSONObject jobj = new JSONObject(model);
            if (jobj.has("msg")) {
                if (jobj.getString("msg").toLowerCase().contains("system failure:")) {
                    jobj.remove("msg");
                    jobj.put("msg", "Some problem occurred while performing the operation. Please try again later.");
                    model = jobj.toString();
                }
            }
        } catch (JSONException je) {
            model = (String) map.get("model");
        }
        // write the XML data to the response
        response.getOutputStream().write(model.getBytes());
        response.setContentType("text/html; charset=UTF-8");
    }
}

TestController работает нормально, а не AuthHandlerController и

Кажется, проблема только в виде, но не знаю, как ее решить.

1 Ответ

0 голосов
/ 04 июня 2019

Springboot имеет ограничения при использовании jsp в качестве распознавателя представлений при использовании jar в качестве упаковки.В вашем случае убедитесь, что вы генерируете файл war, используйте в POM следующее:

pom.xml

<packaging>war</packaging>

Поставьте вышеуказанный тег простониже тега <version> в главном pom. И также убедитесь, что ваши jsp-файлы находятся в папке src/main/webapp/WEB-INF/jsp или в основном под webapps.

Убедитесь, что в pom добавлены следующие зависимости для компиляции jsp:

<!-- JSTL -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>
<!-- To compile JSP files -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

, а также в application.properties или application.yml, в зависимости от того, что вы используете, положить:

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...