Ошибка URL браузера в сопоставлении запроса Spring MVC - PullRequest
0 голосов
/ 26 ноября 2018

Пожалуйста, не отклоняйте этот вопрос, поскольку я прошел через многие связанные вопросы и не смог найти конкретную проблему, которую пытаюсь решить.Извините меня за любые недостатки в посте, так как я только начал публиковать вопросы.У меня проблема с отправкой формы URL-адресами или переходом с одной страницы на другую, что приводит к ошибке 404. Я использую сервер Glassfish 4.1.1.У меня есть страница приветствия, содержащая гиперссылку / форму по адресу:

`http://localhost:8080/2_ReadingFormData`.

Когда я пытаюсь перейти на другую страницу, вручную введя URL-адрес следующим образом, он работает:

`http://localhost:8080/2_ReadingFormData/showForm`

Но когдаЯ пытаюсь перейти на страницу, используя гиперссылку / форму, URL-адрес не включает каталог моего проекта, что приводит к ошибке 404:

`http://localhost:8080/showForm`

Я не смог найти причину, по которой это происходит.В некоторых случаях отправка формы, кажется, работает нормально.В этом конкретном примере форма работает, но гиперссылка не работает по причине, описанной выше.В чем причина этого странного поведения?

FormController.java

package spmvcform;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class FormController {

    @RequestMapping //or @RequestMapping("/")
    public String showMainPage()
    {
        return "mainpage";
    }

    @RequestMapping("/showForm")
    public String showForm()
    {
        return "myform";
    }

    @RequestMapping("/processForm")
    public String processForm()
    {
        return "helloworld";
    }

}

mainpage.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>This is the main page</h1>
        <a href="showForm">Next</a>
    </body>
</html>

myform.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Form Page</h1><br/>
        <form action="processForm" method="get">
            <input type="text" name="uname"
                   placeholder="what's your name?"/>

            <input type="submit" name="Next"/>

        </form>
    </body>
</html>

helloworld.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello World</title>
    </head>
    <body>
        <h1>Student name : ${param.uname}</h1>
    </body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>

</web-app>

dispatcher-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
            </props>
        </property>
    </bean>

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <!--
    The index controller.
    -->
    <bean name="indexController"
          class="org.springframework.web.servlet.mvc.ParameterizableViewController"
          p:viewName="index" />

</beans>

applicationContext.xml

<?xml version='1.0' encoding='UTF-8' ?>
<!-- was: <?xml version="1.0" encoding="UTF-8"?> -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/aop
                           http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
                           http://www.springframework.org/schema/tx 
                           http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc 
                           http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"
       xmlns:context="http://www.springframework.org/schema/context" 
       xmlns:mvc="http://www.springframework.org/schema/mvc">


    <!-- Add support for component scanning-->
    <context:component-scan base-package="spmvcform"/>

    <!-- Add support for conversion, formatting and validation support-->   
    <mvc:annotation-driven/>

</beans>

Я использую netbeans 8.2 с Glassfishсервер 4.1.1.

1 Ответ

0 голосов
/ 26 ноября 2018

Это происходит потому, что вы задаете относительный путь вместо абсолютного пути. Поэтому добавление косой черты перед showForm, например, <a href="/showForm">Next</a> должно работать нормально.

ИЛИ

Вы можете добавить контекстный путь, как показано ниже.

<a href="${pageContext.request.contextPath}/showForm">Next</a>

ИЛИ

поместите контекстный путь в одну переменную и используйте его по всей странице, как показано ниже.

// somewhere on the top of your JSP
<c:set var="contextPath" value="${pageContext.request.contextPath}"/>

...
<a href="${contextPath}/showForm">Next</a>

См. разница между относительными-path-и-абсолют-path-

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