JSP无法访问Spring中的控制器,它总是显示404?

时间:2017-08-31 15:24:32

标签: spring spring-mvc

我是Spring MVC的新手,之前可能会问这个问题,但两天后我找不到准确的答案。我几乎绝望了。

我的期望是当我点击 Homepage.jsp, it can redirect to login.jsp. But the fact is that I can display Homepage.jsp correctly when I run the project. When I click on , it shows 404 error. Here in the following you can see configuration:

My project structure:时 的web.xml

    <welcome-file-list>
  <welcome-file>HomePage.jsp</welcome-file>
  </welcome-file-list>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <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>

调度-servlet.xml中

<context:component-scan base-package="com.KameraVision.controller" />
<mvc:default-servlet-handler/>
<bean 
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/jsp</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
</bean>
<bean id="datasource"  
class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
    <property name="driverClassName" value="org.postgresql.Driver" />  
    <property name="url" 
value="jdbc:postgresql://localhost:5432/KameraVision"/>        
    <property name="username" value="postgres"/>  
    <property name="password" value="md5c4cbdf09352c99860fc9ba841f41af83" />  
</bean>   
<bean 
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
     <props>
        <prop key="/hello">loginController</prop>          
     </props>
  </property>
</bean>
<bean id="loginController" 
class="com.KameraVision.controller.LoginController" />
</beans>

Homepage.jsp         

  • LOGIN
  • LoginController.java

     import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.AbstractController;
    
    
    public class LoginController extends AbstractController {
    
        @Override
        @RequestMapping(value="hello")
         protected ModelAndView handleRequestInternal(HttpServletRequest request,
              HttpServletResponse response) throws Exception {
              ModelAndView model = new ModelAndView("login");
              model.addObject("message", "Welcome!");
              return model;
           }
    }
    

    2 个答案:

    答案 0 :(得分:0)

    删除INSERT INTO table1(phoneNumber) SELECT CASE calltype WHEN 1 THEN finallycalledpartyno WHEN 2 THEN callingpartyno END FROM table2 注释,我不相信它与RequestMapping一起使用,因此可能会导致问题。

    另外考虑使用Spring Security,因为这会为您处理任何需要授权的资源的登录重定向。

    https://docs.spring.io/spring-security/site/docs/current/guides/html5/

    答案 1 :(得分:0)

    <强> 1。更改InternalResourceViewResolver(确保前缀为:/ WEB-INF / jsp /与&#34; /&#34;在jsp末尾)文件夹:

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

    控制器

    2.1带有@Controller注释的选项1(从xml中删除SimpleUrlHandlerMapping):

    @Controller
    public class LoginController {
    
    
        @RequestMapping(value="/hello")
         protected ModelAndView myHelloRequest()  {
              ModelAndView model = new ModelAndView("hello");
              model.addObject("message", "Welcome!");
              return model;
           }
    }
    

    2.2选项2:SimpleUrlHandlerMapping

    public class LoginController extends AbstractController {
    
        @Override //it is not necesary to define a RequestMapping here because your are using SimpleUrlHandlerMapping
         protected ModelAndView handleRequestInternal(HttpServletRequest request,
              HttpServletResponse response) throws Exception {
              ModelAndView model = new ModelAndView("hello");
              model.addObject("message", "Welcome!");
              return model;
           }
    }
    

    第3。这是非常重要的!!最后确保您的hello.jsp文件夹

    中有/WEB-INF/jsp/