【问题标题】:Http Status 404: Servlet ViewResolverHttp 状态 404:Servlet ViewResolver
【发布时间】:2020-02-23 17:22:47
【问题描述】:

我正在创建一个 Spring-boot 应用程序来使用 hibernate 执行 crud 操作。

我在 WEB-INF 的 spring 中的 appservlet 中提到了 web-xml 中的 Dispatcher servlet,名称为 servlet-context。 这是我的 web.xml 配置

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- Processes application requests -->
    <servlet>
        <servlet-name>appServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>appServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

我已经在 dispatcher-servlet 中提到了所有的 beans,view-resolver

这里是servlet

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <!-- DispatcherServlet Context: defines this servlet's request-processing 
        infrastructure -->

    <!-- Enables the Spring MVC @Controller programming model -->
    <annotation-driven />

    <!-- Handles HTTP GET requests for /resources/** by efficiently serving 
        up static resources in the ${webappRoot}/resources directory -->
    <resources mapping="/resources/**" location="/resources/" />

    <!-- Resolves views selected for rendering by @Controllers to .jsp resources 
        in the /WEB-INF/views directory -->
    <beans:bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
    </beans:bean>

    <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <beans:property name="url"
            value="jdbc:mysql://localhost:3306/db1" />
        <beans:property name="username" value="root" />
        <beans:property name="password" value="neonowl" />
    </beans:bean>

    <!-- Hibernate 4 SessionFactory Bean definition -->
    <beans:bean id="hibernate4AnnotatedSessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="annotatedClasses">
            <beans:list>
                <beans:value>com.journaldev.spring.model.Person</beans:value>
            </beans:list>
        </beans:property>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect
                </beans:prop>
                <beans:prop key="hibernate.show_sql">true</beans:prop>
            </beans:props>
        </beans:property>
    </beans:bean>

    <beans:bean id="personDAO" class="com.journaldev.spring.dao.PersonDAOImpl">
        <beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
    </beans:bean>
    <beans:bean id="personService" class="com.journaldev.spring.service.PersonServiceImpl">
        <beans:property name="personDAO" ref="personDAO"></beans:property>
    </beans:bean>
    <context:component-scan base-package="com.journaldev.spring" />

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <beans:property name="sessionFactory" ref="hibernate4AnnotatedSessionFactory" />
    </beans:bean>


</beans:beans>

我的 jsp 页面“person.jsp”位于 WEB-INF 内的视图文件夹中。现在,当我在服务器上运行应用程序时,我得到 Http 状态 404 消息/项目名称/ 描述:源服务器没有找到目标资源的当前表示,或者不愿意透露存在。

请帮忙调试一下。

【问题讨论】:

  • 你能分享application.properties和你的控制器代码吗?
  • 可以添加控制器代码吗?
  • 告诉我们更多,你提到了 person.jsp(你调用的 url 是什么)。请分享 /projectname 的堆栈跟踪错误

标签: spring spring-mvc


【解决方案1】:

从这个baeldung tutorial,我们有以下信息:

Spring MVC 架构在内部使用 ViewResolvers 来处理视图,这使您能够在浏览器中呈现模型。

ViewResolver 将视图名称映射到实际视图。

Spring 框架附带了很多视图解析器,例如InternalResourceViewResolver、XmlViewResolver、ResourceBundleViewResolver

关于您的问题:

您需要一个 ViewResolver bean 出现在您的应用程序上下文中并通过以下方式注册它:

@Bean
 public ViewResolver configureViewResolver() {
     InternalResourceViewResolver viewResolve = new InternalResourceViewResolver();
     viewResolve.setPrefix("/WEB-INF/jsp/");
     viewResolve.setSuffix(".jsp");
 
     return viewResolve;
 }

并尊重 ViewResolver 将内部资源映射到外部 URL 的模式(有据可查的 here

【讨论】:

  • 请注意,这也可以在application.properties文件中完成...
  • 为什么我需要一个配置类,我已经在 spring-servlet 中为视图解析器制作了 bean
  • 这只是一个帮助你理解的例子。请记住,每个答案都需要提供答案的用户付出努力和时间,这样.community 才会发展壮大
猜你喜欢
  • 2015-10-09
  • 2012-10-07
  • 2014-05-10
  • 1970-01-01
  • 2019-07-30
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
相关资源
最近更新 更多