SpringMVC入门学习(一)
2018-11-12 06:52:59来源:博客园 阅读 ()
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方法执行,这样更好的有利于模块化的执行。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:java----类拾遗
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- java学习之第一天 2020-06-11
- Java学习之第二天 2020-06-11
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Ap 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash