在春天,URL映射在web.xml中不起作用

时间:2016-06-14 15:20:44

标签: spring spring-mvc

  1. 包含名称控制器,其中包含WelcomeController
  2. WEB-INF中的文件夹视图,其中视图文件是指html和static jsp
  3. 查看welcome.jsp
  4. 在WebContent web.xml和welcome-servlet.xml中有
  5. 当我映射 / 但是当我更改了url-pattern时,它就不能正常工作,例如/ user / *以下网址仅适用于/

      

    http://localhost:3000/SpringPractice/user/welcome

    错误是

      

    警告:找不到带URI的HTTP请求的映射   带有名称的DispatcherServlet中的[/ SpringPractice / user / welcome]   '欢迎'

    如果我设置为/,它正在工作。 即使我检查控制器没有错误,因为如果没有找到映射,则它不适用于/ pattern。

    WEB.XML

    <servlet>
        <servlet-name>welcome</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>welcome</servlet-name>
        <url-pattern>/user/*</url-pattern>
      </servlet-mapping>
    

    WelcomeController.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
    public class WelcomeController {
    
        @RequestMapping(method=RequestMethod.GET,value="/user/welcome")
        public String GET(ModelMap model){
            //second is the message name
            //3rd is the message
            model.addAttribute("message","GET Method");
            return "welcome";       //we'll always return the name of the view here welcome.jsp e.g. welcome
        }
    
        @RequestMapping(method=RequestMethod.POST,value="/user/welcome")
        public String POST(ModelMap model){
            model.addAttribute("message","POST Method");
            return "welcome";
        }
    }
    

    欢迎-servlet.xml中

    <beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans     
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
       <context:component-scan base-package="controller" />
    
       <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/view/" />
          <property name="suffix" value=".jsp" />
       </bean>
    
    </beans>
    

1 个答案:

答案 0 :(得分:1)

如果您希望servlet以root身份映射到SpringPractice,则需要修改您的web.xml

将您的web.xml更改为:

<servlet-mapping>
    <servlet-name>welcome</servlet-name>
    <url-pattern>/SpringPractice/*</url-pattern>
</servlet-mapping>

您也可能使用错误的端口。 Tomcat(我假设你在这里使用)默认使用端口 8080

网址:http://localhost:8080/SpringPractice/user/welcome

现在应该可以正常工作

以下不需要,可能会有所帮助

此外,如果您愿意,可以在班级使用@RequestMapping

@Controller
@RequstMapping(value="/user/welcome")
public class WelcomeController {

    @RequestMapping(method=RequestMethod.GET, value="")
    public String GET(ModelMap model){
        //second is the message name
        //3rd is the message
        model.addAttribute("message","GET Method");
        return "welcome";       //we'll always return the name of the view here welcome.jsp e.g. welcome
    }

    @RequestMapping(method=RequestMethod.POST, value="")
    public String POST(ModelMap model){
        model.addAttribute("message","POST Method");
        return "welcome";
    }
}

通过将RequestMapping(value="/user/welcome")添加到控制器类的顶部,其下的所有映射都将使用它作为基础。如果您知道某个控制器将处理来自“www.MyCoolSite.com/user/welcome”的所有请求,那就太好了

我希望这会有所帮助。