本篇博客知识点:
1.介绍SpringMVC的核心类
2.SpringMVC对前端请求的处理过程
3.实际项目核心部分代码演示
SpringMVC几个核心类:
控制器核心类:相当于前面学的struts.xml
org.springframework.web.servlet.DispatcherServlet - 配置web.xml
加载配置文件核心类:
org.springframework.web.context.ContextLoaderListener – spring的配置文件
处理url影射核心类:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping-根据bean的名称请求一个bean. spring的配置文件 - /abc
处理视图资源核心类:
org.springframework.web.servlet.view.ResourceBundleViewResolver
return hello – 决定返回的字符串由哪一个页面来显示。
处理注解URL核心类:
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping - 用于识别@RequestMapping注解。
使用了上面的类,Controller还是需要配置的。
<context:component-scan package=“cn.hncu”/>用于替代上面的类。
方法动态调用核心类
org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver
SpringMVC对前端请求的处理过程
实际项目核心部分代码演示
1.先准备好所有需要的包~
2.核心的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<!-- 添加Spring的容器和配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:beans.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>hncu</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 自定义配置"配置文件"的位置与名称,若没有配置该初始化参数,
则是默认文件名:servletName+ "-servlet.xml" -->
<init-param>
<param-name>namespace</param-name>
<param-value>hncu-servlet</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hncu</servlet-name>
<url-pattern>/sp/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
hncu-servlet.xml
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 重定向向不需要绑定视图 -->
<bean name="/hello" class="cn.hncu.one.HelloWorldController" ></bean>
<!-- 转发则需要"绑定视图解析的狠心类 " -->
<bean name="/hello2" class="cn.hncu.two.HelloWorldController2"></bean>
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="basenames">
<list>
<!-- 默认查询classpath: hncu.properties -->
<value>hncu</value>
</list>
</property>
<!-- 配置默认父View,当某一个结果资源在hncu.properties中没有指定View时,就用默认父View作为它的View -->
<property name="defaultParentView" value="hncu"></property>
</bean>
beans.xml
<!-- 把Spring容器和SpringMVC容器加到一起,多方法挂了所以加了这个 -->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- 在SpringMVC中启用Spring框架的核心类(ContextLoaderListerner) -->
<bean name="/multi" class="cn.hncu.three.MultiController">
<!-- 内部胚子一个帮助方法名字解析的核心类 -->
<property name="methodNameResolver">
<!-- 方法名字解析的核心类 -->
<bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 未给方法名字就设定默认方法名字 -->
<property name="defaultMethodName" value="execute"></property>
<!-- 参数名:与前端method相对应 -->
<property name="paramName" value="method"></property>
</bean>
</property>
</bean>
<!-- 基于注解的访问方式~~~ -->
<!-- 把用注解方式访问的bean放进来 ,另种方式-->
<!--方式一:自动扫描 下面这个类师核心扫描bean 帮你加到容器中 -->
<context:component-scan base-package="cn.hncu.annno"/>
<!-- 方式二:手动添加 -->
<!--
<bean class="cn.hncu.annno.AnnoOneController"></bean>
<bean class="cn.hncu.annno.AnnoTwoController"></bean>
-->
<!-- 用于识别注解bean 的核心类 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean>
</beans>
带注解方法写的实例
//下面这一行是表示 请求访问要加的前缀
@RequestMapping(value="/an")
@Controller
public class AnnoTwoController {
@RequestMapping(value="/anno_two")
public String aa(){
System.out.println("注解anno_two");
return "anno_two";
}
}
对应的前端请求
<a href="sp/an/anno_two">anno_one</a>