SpringMVC入门学习(一)
SpringMVC入门学习(一)
SpringMVC是一个Java WEB框架,现在我们知道Spring了,那么,何为MVC呢?
MVC是一种设计模式,其分为3个方面
- model 模型:dao层和service层
- view 视图:例如jsp和Html
- controller 控制器
SpringMVC原理
SpringMVC工作的原理图如下【图来自于网络,侵删】:
 
过程如下:
- http请求:客户端提交请求到DispatcherServlet。 
- 寻找处理器:DispatcherServlet是一个Spring提供的前端控制器,所有请求都是他来发放的。但是它需要HandlerMapping定位到具体的Controller。 
- 调用处理器:在DispatcherServlet通过HandlerMapping找到控制器后,它就将http请求提交到Controller。 
- 调用模型处理业务:Controller执行相关的逻辑代码。 
- ModelAndView:在Controller执行完相关的处理后,返回ModelAndView。 
- 处理视图映射:ViewResolver是视图解析器,将一个逻辑上面的视图名称机械为一个真正的视图同时取出model。(ps:例如:将user解析为:/WEB-INF/jsp/user.jsp【下面的例子】) 
- 将模型数据传给View显示:将model数据放入view中。 
环境搭建配置
- 首先使用maven包快速构建web-app   - 项目结构图:   
- maven jar包导入: - <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>5.1.1.RELEASE</version>
 </dependency>
 
- 然后将web.xml文件进行更改,使用3.1的版本: - <?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_3_1.xsd"
 version="3.1">
 </web-app>
 
- 配置web.xml文件 - 首先,先配置前段控制器 - <!-- 配置 Spring MVC DispatchcerServlet 前端控制器
 这里写的这个名字是有讲究的,如果我们不去修改spring配置文件默认的位置,那么SpringMVC他会去WEB-INF下面找一个叫springmvc-servlet.xml的文件
 -->
 <servlet>
 <servlet-name>springmvc</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 <!--<init-param>-->
 <!--可以重新声明配置文件的名字-->
 <!--<param-name>namespace</param-name>-->
 <!--将名字变成mvc-->
 <!--<param-value>mvc</param-value>-->
 <!--</init-param>--> <init-param>
 <!--上下文配置的位置的制定-->
 <param-name>contextConfigLocation</param-name>
 <!--此时是在类路径下面spring文件夹去寻找,也就是resources/spring-->
 <param-value>classpath:spring/springmvc.xml</param-value>
 </init-param>
 </servlet>
 - 然后进行映射配置: - 在web.xml文件中,进行映射配置 - <!--servlet的映射配置-->
 <servlet-mapping>
 <!-- 将所有的请求都交给springmvc处理,即处理方式在springmvc.xm文 件中
 -->
 <servlet-name>springmvc</servlet-name>
 <!--这里统一写/-->
 <url-pattern>/</url-pattern>
 </servlet-mapping>
 - 关于 - url-pattern的写法问题- / 处理所有的请求,但是他不会像/*一样,将这个girl.jsp当成一个新的请求,而是直接将渲染结果给浏览器
- /* (永远不要这样写):请求/helloController过去的时候,他的视图名称是girl,girl.jsp页面,(出去的时候)它将其当成了一个叫做girl.jsp的请求,去尝试请求对应的controller
- *.do 例如:/helloController.do
 - 关于前段控制器的解释: - springMVC设置的理念是希望我们开发者远离原生的servletAPI【太繁琐了】,希望将操作尽量简化。它将很多东西责任进行了拆分。不希望我们将技术点绑定死,可以做到任意切换。其本身还是基于servlet设计的,分发的servlet。 
- 配置springmvc.xml文件 
 springmvc.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:aop="http://www.springframework.org/schema/aop"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> </beans>
 - 首先先配置视图解析器和控制器: - <!--配置一个视图解析器
 常用内部资源视图解析器
 这里面的意思是:加入此时viewName为hello,那么它会到WEB-INF/jsp/hello.jsp中去寻找
 -->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <!--1. 前缀-->
 <property name="prefix" value="/jsp/"/>
 <!--2. 后缀-->
 <property name="suffix" value=".jsp"/>
 </bean> <!-- 注解扫描 -->
 <context:component-scan base-package="com.weno.controller"/>
 
书写第一份代码
Controller的写法有两种:
- 接口式的写法:是一个传统式的写法,类implement一个接口,然后实现接口方法,在modle中填充元素,返回ModelAndView。- public class HelloController implements org.springframework.web.servlet.mvc.Controller {
 @Override
 public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception { ModelAndView mav = new ModelAndView();
 mav.addObject("hello","世界");
 // 寻找web-inf目录下的jsp/hello.jsp文件
 mav.setViewName("hello");
 return mav;
 }
 }
 - 当然这种方法还要在springmvc中配置bean。 - <!-- 此时name相当于URI -->
 <bean class="com.weno.controller.HelloController" name="/hello"/>
 
- 注解式写法:注解式写法要配置注册扫描【前面已经配置】。- 将前面的换一种写法: - @org.springframework.stereotype.Controller
 public class HelloController {
 //URI
 @RequestMapping("hello")
 public String hello(Model model){
 model.addAttribute("hello","世界");
 // 寻找web-inf目录下的jsp/hello.jsp文件
 return "hello";
 }
 }
 - jsp文件 - <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <html>
 <head>
 <title>Title</title>
 </head>
 <body>
 你好:${requestScope.hello} </body>
 </html>
 - 结果: 
  
简单的注意点
- @RequestMapping可以同时写在类的上面【模块】和方法的上面【业务】
@org.springframework.stereotype.Controller
 @RequestMapping("product")
 public class HelloController {
 @RequestMapping("add")
 public String add(Model model){ return "";
 }
 @RequestMapping("del")
 public String del(Model model){ return "";
 }
 }
 这时候就可以使用 /product/add完成add方法执行,/product/del完成del方法执行,这样更好的有利于模块化的执行。
SpringMVC入门学习(一)的更多相关文章
- SpringMVC入门学习(二)
		SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ... 
- SpringMVC入门学习三
		今天是Springmvc学习的第三天,今天我将主要介绍一下: 常用注解的使用 关于非post.get请求的处理 文件上传与下载 拦截器 常用注解的使用 老大在此 @Controller @Cont ... 
- SpringMVC入门学习案例笔记
		一.数据库环境用mysql,数据库建表语句如下: /* SQLyog v10.2 MySQL - 5.1.72-community : Database - mybatis ************* ... 
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)
		转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ... 
- 【SSM】学习笔记(二)——SpringMVC入门
		原视频链接:https://www.bilibili.com/video/BV1Fi4y1S7ix/?p=43&spm_id_from=pageDriver&vd_source=8ae ... 
- 零基础学习java------38---------spring中关于通知类型的补充,springmvc,springmvc入门程序,访问保护资源,参数的绑定(简单数据类型,POJO,包装类),返回数据类型,三大组件,注解
		一. 通知类型 spring aop通知(advice)分成五类: (1)前置通知[Before advice]:在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常. (2)正常返回通知 ... 
- Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制
		一.SpringMVC概述 SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装.SpringMVC是处于Web层的框架,所以其主要的作用就是用来 ... 
- SpringMVC入门第二天
		SpringMVC第二天 1. 回顾 1.Springmvc介绍? Springmvc是Spring公司 2.Springmvc入门程序 第一步:Web工程 第二步:导Jar包 第三步:web.x ... 
- dubbo入门学习笔记之入门demo(基于普通maven项目)
		注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ... 
随机推荐
- MongoDB 官网教程 下载 安装
			官网:https://www.mongodb.com/ Doc:https://docs.mongodb.com/ Manual:https://docs.mongodb.com/manual/ 安装 ... 
- tomcat源码分析-初始化过程
			digester 说明: https://www.cnblogs.com/devilwind/p/8192304.html 
- Alpha项目冲刺
			一.团队成员 学号 姓名 211606361 何承华(队长) 211606356 陈宇 211606360 丁培辉 211606333 温志铭 211606343 杨宇潇 211606391 张主强 ... 
- 【转】linux 查看进程启动路径
			在linux下查看进程大家都会想到用 ps -ef|grep XXX可是看到的不是全路径,怎么看全路径呢?每个进程启动之后在 /proc下面有一个于pid对应的路径例如:ps -ef|grep pyt ... 
- Spring的介绍与搭建
			一.Spring的介绍 二.Spring的搭建 (1)导包 (2)创建一个对象 (3)书写配置注册对象到容器 (4)代码测试 
- 知名公司的GitHub地址
			GoogleGoogle[https://github.com/google]( https://github.com/google) Google Sampleshttps://github.com ... 
- mysql常用连接查询
			连接数据库PDO $user = "root"; //数据库连接账号 $pass = "root"; //数据库连接密码 $dbname = "tes ... 
- MySQL insert语句锁分析
			最近对insert的锁操作比较费解,所以自己动手,一看究竟.主要是通过一下三个sql来看一下执行中的sql的到底使用了什么锁. select * from information_schema.INN ... 
- asp.net对接拼多多
			asp.net对接拼多多视频地址:https://www.bilibili.com/video/av43512047/?p=7 
- this练习题
			1 function fn2(){ console.log(this.n) var n='n' this.n=10 console.log(n) } var obj={fn2:fn2, n:1} fn ... 
 
			
		 
 
