【问题标题】:Controller not firing on .jsp page hit MVC Spring JAVA控制器未在 .jsp 页面上触发命中 MVC Spring JAVA
【发布时间】:2014-08-11 17:10:19
【问题描述】:

当我的 web 项目中的 .jsp 页面被直接点击时,尝试让 Spring MVC 控制器触发。

调度程序 servlet 的 Web XML:

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

在调度程序配置中,我定义了以下 bean:

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

控制器类:

 package com.mydomain.controllers;

 import javax.servlet.http.HttpServletRequest;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.servlet.ModelAndView;
 import com.mydomain.security.Authorization;

 @Controller
 public class CustomerController {


@RequestMapping("/customer")
public String customer(HttpServletRequest request) {
    if (Authorization.SessionCheck(request))
        return "../customer/customer";
    else
        return "redirect:http://elsewhere.com"; 

}

  }

在根目录下,我在 /WebContent/customer/customer.jsp 中有一个 jsp 页面 如果在浏览器中点击http://myhost.com/MYAPP/customer,控制器就会很好地处理上面的客户方法。但是,如果我点击http://myhost.com/MYAPP/customer/customer.jsp,那么控制器永远不会触发,只会呈现 customer.jsp 页面。当 .jsp 页面被点击时,如何让控制器进行处理?

【问题讨论】:

    标签: java spring jsp spring-mvc controller


    【解决方案1】:

    但是,如果我点击http://myhost.com/MYAPP/customer/customer.jsp,那么 控制器永远不会触发

    你为什么期望它?您的@Controller 的处理程序方法映射到

    @RequestMapping("/customer")
    

    这就是它将处理的路径。如果您希望它处理其他路径,请添加另一个路径或更多处理程序方法。

    至于为什么要呈现 JSP,那是因为它位于您的 Web 应用程序的 WebContent 文件夹中。那里的任何文件都可以直接访问。

    【讨论】:

      【解决方案2】:
      1. 将您的 JSP 放在 WEB-INF 目录中 - 这将阻止用户直接访问 jsps。然后如果没有第 2 步,用户将得到 404/
      2. 您可以将 Controller 映射更新为 @RequestMapping("/customer*") 之类的东西 - 但要非常小心

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-12
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 2015-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多