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入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...
随机推荐
- Linux学习笔记:常用软件
Linux系统下常用软件(针对CentOS,其他系统类似) lrzsz 可用于上传和下载,安装 yum -y install lrzsz ,使用 上传 rz 下载 sz mysql 安装 yum -y ...
- atom编辑器使用“apm install”无法响应的解决方案
工具:shadowsocks 利用ss建立代理服务,之后apm --help,得到apm的配置命令: apm - Atom Package Manager powered by https://ato ...
- 主键生成策略sequence
http://blog.csdn.net/shanhuhau/article/details/24978253 表示:如果不写序列名,会走默认的序列 若写,则seq_表名_属性名
- tomcat 配置图片服务器
在后台和前端交互时,遇到了后台存储的图片,前端根据地址无法访问,使用Tomcat搭建图片服务器 1.找到tomcat下的server.xml文件 2.配置文件下加入service节点(在原有的serv ...
- 1-学习tecplot360
FETRIANGLE(3节点三角形), FEQUADRILATERAL(4节点四边形),FETETRAHEDRON(4节点四面体), FEBRICK(8节点六面体) 参考:https://wenku. ...
- bzoj3929(sam)
因为题目中树的特殊性暴力dfs建sam就好了.然后sam有一个有意思的性质是一个点代表的子串个数等于mx[i]-mx[fail[i]],至于为什么,我不会严谨的证明,但想想还是可以的,就是当前串的所有 ...
- 4.BeanPostProcessor 后处理Bean
Bean种类 普通bean:之前操作的都是普通bean.<bean id="" class="A"> ,spring直接创建A实例,并返回 Fac ...
- 微信公众号UX分析—— 学生作业小结
1. 不足: 1. 权威性:个人帐号,显得不够正式. 2. 排版问题: + 没有必要的外接端口,界面设计极度缺少排版.哪怕是个人公众号都不至于如此,更何况这是一个学校的教务平台. 3. 反应不及时或无 ...
- Media Queries 媒体查询常见设备断点
按需调整断点 一.谷歌后摘抄的一部分媒体查询 /*#region SmartPhones */ /* SmartPhones */@media only screen and (min-device- ...
- Mybatis中输入输出映射和动态Sql
一.输入映射 我们通过配置parameterType的值来指定输入参数的类型,这些类型可以是简单数据类型.POJO.HashMap等数据类型 1.简单类型 2.POJO包装类型 ①这是单表查询的时候传 ...
