【问题标题】:404 error with simple jsp page简单的jsp页面出现404错误
【发布时间】:2015-08-21 07:03:51
【问题描述】:

我有一个看起来像新手的错误,但似乎我无法克服它。我正在学习 JSP 和 Spring,我的项目遇到了 404 错误。 我正在使用 tomcat 8.0 本地服务器。我的目标是在教程的帮助下从“http://localhost:8080/TestSpring/vues/bonjour.jsp”变为“http://localhost:8080/TestSpring/bonjour”,但这会导致 404。

“调度程序-servlet.xml”

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<context:component-scan base-package="be.knoware" />

<bean
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/vues/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>

<bean id="messageSource"
    class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:messages" />
    <property name="defaultEncoding" value="ISO-8859-1" />
</bean>

web.xml

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </context-param>

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

    <!-- Declaration de la servlet de Spring et de son mapping -->
    <servlet>
        <servlet-name>servlet-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

bonjour.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" isELIgnored="false"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title><spring:message code="titre.bonjour"/> ${personne}</title>
    </head>
    <body>
        <spring:message code="libelle.bonjour.lemonde" arguments="${personne}"/>
    </body>
</html>

BonjourController.java

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/bonjour")

public class BonjourController {

    @RequestMapping(method = RequestMethod.GET)
    public String afficherBonjour(final ModelMap pModel){
        pModel.addAttribute("personne","Jim");
        return "bonjour";
    }
}

如果它可能有帮助,这个项目。

提前致谢:)

【问题讨论】:

  • 你的应用部署成功了吗?
  • @Subodh 是的,我想是的(如果这就是部署 link 的意思),当我的服务器启动并且我尝试连接到 URL 时,会有控制台文本。 link
  • 在日志中会清楚地显示项目是否已部署
  • 所以我在tomcat目录下的日志文件是空的,但是由于我可以访问“localhost:8080/TestSpring/vues/bonjour.jsp”并且它显示了我猜它已经部署的信息。
  • 我知道你没有直接在 Tomcat 中部署你的项目,你是从某个 ide 运行它,所以 IDE 会显示你登录控制台

标签: java spring jsp spring-mvc


【解决方案1】:

如果有一些部署问题或服务器问题,您可以执行一些步骤

  • 清理并构建项目并将war文件复制到您的服务器中
  • 在更新 war 文件之前,您必须关闭 tomcat 或服务器。
  • 启动服务器并打开URL并检查war extract是否自动如果是则服务器没有问题。
  • 检查 URL 和日志文件以获得更好的保证。 乐于助人

【讨论】:

  • 多亏了你,我找到了如何检查是否已部署,它实际上已部署:)
【解决方案2】:

在基于 XML 的 MultiActionController 中,您必须配置方法名称解析器(InternalPathMethodNameResolver、PropertiesMethodNameResolver 或 ParameterMethodNameResolver)以将 URL 映射到特定的方法名称。

首先你可以尝试将你的Controller bean添加到dispatcher-servlet.xml;

<!-- Register the bean -->
<bean class="yourPackage.controller.BonjourController " />

如果它不起作用,请尝试 ViewResolvers。

【讨论】:

    【解决方案3】:

    我在 cmets 中注意到,如果您的应用程序部署正确与否,他们有一点疑问,因为您的 web.xml 看起来不那么有效。

    我) 这仅在您想将全局应用程序上下文传递给所有 servlet 时使用,使用此配置就像您加载 spring-context 两次一样。 你可以在here找到更多信息

     <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </context-param>
    

    因此,如果您不想传递全局 appContext ,请从您的 web.xml 中删除以下行

    <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
    

    ii)

    在 servlet 映射中将 url 模式从 / 更改为 /* 所以它会像:

     <servlet-mapping>
            <servlet-name>servlet-dispatcher</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    

    iii) 在您的 dispatcher-servlet.xml 添加控制器所在的包 导致它没有被spring处理

    <context:component-scan base-package="controller" />
    

    【讨论】:

      【解决方案4】:

      所以说到底是我误会了。事实上,我在 dispatcher-servlet.xml 中使用了错误的 base-package... 至少这篇文章教会了我一些 J2E 的好习惯以及如何 cfg tomcat !

      无论如何,谢谢你的时间:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 2017-10-06
        • 2015-07-10
        • 2020-09-09
        • 2020-07-23
        • 2017-01-23
        相关资源
        最近更新 更多