1.spring mvc框架搭建

需求:在浏览器输入一个请求login.do,跳转到登录成功界面。

第一步,创建web项目,导入jar包
注意:
第二步,在web.xml中配置spring的核心监听器和spring mvc的前端控制器
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--spring 的核心监听器
作用:在web容器(tomcat)启动的时候,创建spring的工厂类对象,把该对象绑定到web容器的上下文(环境)
中。
之前我们使用spring 框架,第一件事都是创建工厂类对象:
ApplicationContext context = new ClassPathXmlApplciationContext("applicationContext.xml");
我们现在使用的是web项目,需不需要创建工厂类对象了?需要创建。
什么时候创建工厂类对象。工厂类对象只需要创建一个就够了,在项目启动的时候创建比较合适。
-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!---
手动指定spring 的主配置文件的位置和名称,如果不指定该参数,则spring会默认从WEB-INF/applicationContext.xml
我们之前习惯把spring 的主配置文件放到src下面,所以一般会指定此项。
-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--配置spring mvc的前端控制器
作用:拦截指定的请求,交给spring mvc框架进行处理
-->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--指定spring mvc的主配置文件的位置和名称
如果不指定该参数,spring 会默认从WEB-INF/下加载 [servlet的name]-servlet.xml
针对这个例子,生成的配置文件名称就spring-mvc-servlet.xml
-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<!--拦截所有.do结尾的请求,交给spring mvc 处理,如果要拦截所有请求 可以写/*-->
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
第三步,创建spring 和spring mvc的主配置文件
spring的主配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
</beans>

spring mvc的主配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<!---配置spring mvc 处理器映射器
作用: 指定怎么才能找到spring mvc 的控制器Controller
Controller是spring mvc 的控制器 ,相当与之前的servlet的代码。
之前处理请求都是在servlet中,spring mvc处理请求在控制器里。项目会有很多控制器,到底要找哪一个控制器 处理
请求是
RequestMappingHandlerMapping这种实现定了以了 通过控制器方法或者类上面的@RequestMapping来找到具体
的控制器的方法。
-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
</bean>
<!--配置spring mvc的处理器适配器
作用:定义什么特征的java的类才算是一个合格的控制器。在spring mvc底层有很多的是适配器实现。
RequestMappingHandlerAdapter 定义了如果一个类加了一个@Controller的注解,他就算是一个合格的控制
-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
</bean>
<!--配置spring mvc 默认的jsp的视图解析器
在spring mvc中是可以返回多种视图(相当于之前srvlet中的jsp界面)
好比默认的jsp ,还可以是json ,还可以是一些模板文件。还可以返回excel,word,pdf等。
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置返回视图的前缀
requestDispatch.forward('/WEB-INF/jsp/index.jsp');
requestDispatch.forward('/WEB-INF/jsp/user.jsp');
...
requestDispatch.forward('/WEB-INF/jsp/xxx.jsp');
-->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!--配置返回视图的后缀-->
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
第四步,创建spring mvc的控制器类
/**
* spring mvc的控制器类
*/
@Controller
public class LoginController {
/**
* 访问登录请求 跳转到主界面
* @return
*/
//@RequestMapping定义请求的路径
@RequestMapping("/login")
public String login(){
System.out.println("欢迎登录");
//return的是一个视图名称
return "index";
}
}
第五步,在spring mvc主配置文件中扫描控制器所在的包
注意:

这里要注意:必须在spring mvc主配置文件中所有控制器包,不能在spring 主配置文件中扫描该包。service和dao
的包必须在spring 的主配置文件中扫描,不能在spring mvc主配置文件中扫描。 
第六步,创建jsp界面
第七步,测试
直接启动会报如下错:
 
是因为spring的jar包没有部署到tomcat中去,需要打开“Project structers”:

2.spring的原理 
运行流程:
请求login.do--->web.xml中前端控制器--->spring mvc 主配置文件--》处理器映射器--》处理器适配器=》控制器
==》jsp的视图解析器=》视图的解析==》视图的渲染==》给用户返回结果。

DispatcherServlet 前端控制器 总调度
HandlerMapping 处理器映射器 接口 可以有很多实现 每种实现描述怎么找到控制器的方法
HandlerAdapter 处理器适配器 接口 可以有什么多实现,每种实现定义了什么样特征的java类才算是一个合格的控
制器
ViewResolver 视图解析 接口 可以有很多实现 每种实现定义了返回什么样的视图,今天返回的是jsp,以后的话还
会返回json,文件上传解析器,excle 解析,freeemarker,word 等等 
3.spring mvc 简化配置 

Spring mvc的基本配置及工作原理的更多相关文章

  1. Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍

    Spring4.X + spring MVC + Mybatis3 零配置应用开发框架搭建详解(1) - 基本介绍 spring集成 mybatis Spring4.x零配置框架搭建 两年前一直在做后 ...

  2. spring MVC、mybatis配置读写分离

    spring MVC.mybatis配置读写分离 1.环境: 3台数据库机器,一个master,二台slave,分别为slave1,slave2 2.要实现的目标: ①使数据写入到master ②读数 ...

  3. Spring MVC拦截器配置

    Spring MVC拦截器配置 (1)自定义拦截器 package learnspringboot.xiao.other; import org.springframework.web.servlet ...

  4. Thymeleaf 3与Spring MVC 4 整合配置

    Thymeleaf 3与Spring MVC 4 整合配置 Maven 依赖配置 Spring 相关依赖就不说了 <dependency> <groupId>org.thyme ...

  5. spring mvc 结合 Hessian 配置

    spring mvc 结合 Hessian 配置 1.先在web.xml中配置 <!-- Hessian配置 --> <servlet> <servlet-name> ...

  6. Java spring mvc多数据源配置

    1.首先配置两个数据库<bean id="dataSourceA" class="org.apache.commons.dbcp.BasicDataSource&q ...

  7. Spring MVC错误页面配置

    当前SpringMVC非常流行,在大多数情况,我们都需要自定义一些错误页面(例如:401, 402, 403, 500...),以便更友好的提示.对于spring mvc,这些当然是支持自定义的,sp ...

  8. 01 - spring mvc 概述及配置DispatcherServlet

    1.Spring mvc 基于model2实现,整体框架流程如(图片来自百度): ①web容器接收到http请求,若匹配DispatcherServlet的请求映射路径(web.xml),则容器会交给 ...

  9. Spring高级话题-@Enable***注解的工作原理

    出自:http://blog.csdn.net/qq_26525215 @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 & ...

随机推荐

  1. Android电池信息获取

    Android 可以通过BroadcastReceiver来获取电池信息改变的广播(ACTION_BATTERY_CHANGED),从而获取到相关的电池信息. 电池信息,及其对应的相关常数(参考网址: ...

  2. java 第七周课后作业0417

    定义一个矩形类Rectangle:(知识点:对象的创建和使用)1 定义三个方法:getArea()求面积.getPer()求周长,showAll()分别在控制台输出长.宽.面积.周长.2 有2个属性: ...

  3. 用python画出全球疫情趋势变化图

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:谦睿科技 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...

  4. Laravel Passport token过期后判断refresh_token是否过期

    需求:前后端分离状态下,登录失效(token过期)后,前端需要知道下一步是跳转到登录页面还是使用refresh_token刷新token. 这就需要后端根据是否可以刷新token(refresh_to ...

  5. vue2.x学习笔记(十六)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12616543.html. 组件中的插槽 在2.6.0的版本中,vue为具名插槽和作用域插槽引入了一个新的统一的语法 ...

  6. Prometheus监控 Redis & Redis Cluster 说明

    说明 在前面的Prometheus + Grafana 部署说明之「安装」文章里,大致介绍说明了Prometheus和Grafana的一些安装使用,现在开始如何始部署Prometheus+Grafan ...

  7. linux CVE-2019-13272 本地特权漏洞

    漏洞描述 在5.1.17之前的Linux内核中,kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来 ...

  8. 【翻译】TensorFlow卷积神经网络识别CIFAR 10Convolutional Neural Network (CNN)| CIFAR 10 TensorFlow

    原网址:https://data-flair.training/blogs/cnn-tensorflow-cifar-10/ by DataFlair Team · Published May 21, ...

  9. [Asp.Net Core] Blazor Server Side 项目实践 - 切换页面时保留状态

    前言: 这是 项目实践系列 , 算是中高级系列博文, 用于为项目开发过程中不好解决的问题提出解决方案的. 不属于入门级系列. 解释起来也比较跳跃, 只讲重点. 因为有网友的项目需求, 所以提前把这些解 ...

  10. 1、flink介绍,反压原理

    一.flink介绍  Apache Flink是一个分布式大数据处理引擎,可对有界数据流和无界数据流进行有状态计算. 可部署在各种集群环境,对各种大小的数据规模进行快速计算. 1.1.有界数据流和无界 ...