SpringMVC 控制器类名处理映射

学习参考自易百教程

ControllerClassNameHandlerMapping类是基于特定的控制器类名的处理程序映射类,通过它的配置,便可以将url中与控制器类名相同的所有增长匹配请求交给该控制器进行处理。例如,当定义一个HelloController控制器时(通过继承AbstractController,实现handleRequestInternal方法,而不是添加注解),该类方法中将映射到URL:"/hello*" ,如:

http://localhost:8080/项目名/hello

http://localhost:8080/项目名/hello.jsp

http://localhost:8080/项目名/hello123abc

但大写/Hello 会匹配失败。最终的响应映射路径将是/hello.jsp而不是最短匹配,如:helloabc.jsp将显示404,但方法体内容已被执行。实现例子如下:

1、项目目录

2、controller

package com.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;


public class HelloController extends AbstractController{
	
	protected ModelAndView handleRequestInternal(HttpServletRequest request,
			HttpServletResponse response)throws Exception{
		ModelAndView model=new ModelAndView("hello");
		model.addObject("message","Hello World!");
		return model;
	}
}

3、spring-servlet.xml

<?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:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">  
       
     <!--  <context:component-scan base-package="com.controller" /> -->
      
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      	<property name="prefix" value="/WEB-INF/jsp/"></property>
      	<property name="suffix" value=".jsp"></property>
      </bean>
      
      <!-- 	启用控制器类名处理url访问映射 -->
      <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
      
      <bean class="com.controller.HelloController"/>
      <bean class="com.controller.WelcomeController"/>
       
</beans>

4、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>springMVC_controllerNameMapping</display-name>
  
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

5、hello.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'hello.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h2>This is hello page. ${message}<br></h2>
  </body>
</html>

结果

如果将hello.jsp改名为helloa.jsp,将出现404,但执行了HelloConroller中的打印输出

猜你喜欢

转载自blog.csdn.net/zero_130/article/details/81366056