MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑、数据、显示分离的方法组织代码,MVC主要做用是下降了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。固然不一样的MVC存在差别。css
在web早期的开发中,一般采用的都是Model1。Model1中,如图所示主要分为两层,视图层和模型层。Model2把一个项目分红三部分,包括视图、控制、模型。这样不只提升的代码的复用率与项目的扩展性,且大大下降了项目的维护成本。Model 1模式的实现比较简单,适用于快速开发小规模项目,Model1中JSP页面身兼View和Controller两种角色,将控制逻辑和表现逻辑混杂在一块儿,从而致使代码的重用性很是低,增长了应用的扩展性和维护的难度。Model2消除了Model1的缺点。html
Model1前端
Model2vue
常见的服务器端MVC框架有:Struts、Spring MVC、ASP.NET MVC、Zend Framework、JSF;常见前端MVC框架:angularjs、reactjs、vue.js;由MVC演化出了另一些模式如:MVP、MVVM。java
Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。Spring MVC的特色:
一、轻量
二、高效
三、与Spring兼容性好
四、功能强大
RESTful、数据验证、格式化、绑定机制、本地化、主题等
五、简洁灵活mysql
Spring的web框架围绕DispatcherServlet设计。 DispatcherServlet的做用是将请求分发到不一样的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户能够采用基于注解的controller声明方式。官网上说Spring的web模块提供了大量独特的功能,包括:
清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等。 每个角色均可以由一个专门的对象来实现。 react
强大而直接的配置方式:将框架类和应用程序类都能做为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器(validator)的引用。 linux
可适配、非侵入:能够根据不一样的应用场景,选择合适的控制器子类 (simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (好比Action/ActionForm)继承。git
可重用的业务代码:可使用现有的业务对象做为命令或表单对象,而不须要去扩展某个特定框架的基类。angularjs
可定制的绑定(binding) 和验证(validation):好比将类型不匹配做为应用级的验证错误, 这能够保存错误的值。再好比本地化的日期和数字绑定等等。在其余某些框架中,你只能使用字符串表单对象, 须要手动解析它并转换到业务对象。
可定制的handler mapping和view resolution:Spring提供从最简单的URL映射, 到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。
灵活的model转换:在Springweb框架中,使用基于Map的 键/值对来达到轻易地与各类视图技术的集成。
可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不须要额外的中间层)等等。
简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme) 之类的许多功能。它提供在标记方面的最大灵活性。
JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写 表单更加容易。
Spring Bean的生命周期能够被限制在当前的HTTP Request或者HTTP Session。 准确的说,这并不是Spring MVC框架自己特性,而应归属于Sping MVC使用的WebApplicationContext容器。
http://7xvpsh.com1.z0.glb.clouddn.com/ Spring MVC翻译
http://spring.cndocs.tk/ Spring翻译
http://blog.csdn.net/tangtong1/article/details/51326887 Spring 1-6章
https://github.com/linesh-simplicity/translation-spring-mvc-4-documentation 翻译列表
https://docs.spring.io/spring-framework/docs/4.2.4.RELEASE/spring-framework-reference/html/mvc.html 官方帮助
在IntelliJ IDEA中新建Maven项目,选择“File->New->Project”,建立一个简单项目,不选择模板。
选择“Maven”,不须要使用内置结构(模板)
填写包名与项目名:
选择项目位置,尽可能不要有中文、空格或特殊字符,点击完成:
完成后点击“Enable-Auto import”
前面咱们建立好了一个普通的Java项目,如今须要将普通项目转换成Web项目
选择“Web Application”
点击OK后项目就变成Web项目了,且根据Maven风格建立了不一样类型的文件夹
若是使用内置架构建立则须要手动添加不一样的文件夹类型
点击右侧下拉列表,选择编辑配置文件
在配置窗口中点中左上角的“加号”->Tomcat Server->"Local"
命名
添加部署包
设置项目的虚拟目录名称(Application context应用上下文)
选择修改项目后服务器动做
修改index.jsp文件后运行项目
启动项目后的运行结果:
注意这里的tomcat的日志与eclipse整合后是不同的,分开在多个窗口中输出。
点击“VCS”->"Enable Version Control Integration",将项目集成到版本控制器中
选择版本控制器类型为Git
提交项目到本地仓库
选择要提交的文件并填写好日志信息:
管理远程仓库地址
点击加号添加
添加成功后
提交到远程仓库
点击push
提交成功
查看结果
一、修改pom.xml文件、添加jar包的依赖,主要有:Spring框架核心库、Spring MVC、JSTL等,具体信息以下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zhangguo</groupId> <artifactId>springmvc08</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.0.RELEASE</spring.version> </properties> <!--项目依赖 --> <dependencies> <!--单元测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency> <!--j2ee相关包 servlet、jsp、jstl--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--mysql驱动包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency> <!--spring相关包--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!--其余须要的包--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> </dependencies> <build> <finalName>maven-springmvc</finalName> <resources> <!--表示把java目录下的有关xml文件,properties文件编译/打包的时候放在resource目录下--> <resource> <directory>${basedir}/src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> </resource> <resource> <directory>${basedir}/src/main/resources</directory> </resource> </resources> <plugins> <!--servlet容器 jetty插件--> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.3.10.v20160621</version> </plugin> </plugins> </build> </project>
若是须要其它的包能够去中心仓库搜索
若是下载太慢能够将maven的远程中心仓库的地址换成国内仓库。
默认会自动下载jar包,第一次下载会较慢,之后从本地引用就会快不少
当依赖成功时,会加载的jar包以下:
将maven依赖的包添加到项目中,发布时一块儿打包
点击项目结构(ctrl+shift+alt+s)
点击“Artifacts”->"Output Layout"->双击要输出的包
成功添加后在lib目录下就能够看到输出的包了
Spring MVC框架像许多其余MVC框架同样, 请求驱动,围绕一个中心Servlet分派请求及提供其余功能,DispatcherServlet是一个实际的Servlet (它继承自HttpServlet 基类)。以下图所示当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,建立数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
修改web.xml文件注册该Servlet,修改后的web.xml文件以下:
<?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"> <!--welcome pages--> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--配置springmvc DispatcherServlet--> <servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!--Sources标注的文件夹下须要新建一个spring文件夹--> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>springMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
在src/main/resources源代码目录下添加spring目录与spring-mvc.xml配置文件,配置的形式与Spring容器配置基本相似,为了支持基于注解的IOC,设置了自动扫描包的功能,具体配置信息以下:
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!--启用spring的一些annotation --> <context:annotation-config/> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.zhangguo.springmvc08.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> <!--HandlerMapping 无需配置,springmvc能够默认启动--> <!--静态资源映射--> <mvc:default-servlet-handler/> <!--若是发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,若是不是静态资源的请求,才由DispatcherServlet继续处--> <!--本项目把静态资源放在了WEB-INF的statics目录下,资源映射以下--> <!--<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>--> <!--<mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>--> <!--<mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/>--> <!--可是项目部署到linux下发现WEB-INF的静态资源会出现没法解析的状况,可是本地tomcat访问正常,所以建议仍是直接把静态资源放在webapp的statics下,映射配置以下--> <!--<mvc:resources mapping="/css/**" location="/statics/css/"/>--> <!--<mvc:resources mapping="/js/**" location="/statics/js/"/>--> <!--<mvc:resources mapping="/image/**" location="/statics/images/"/>--> <!-- 配置注解驱动 能够将request参数与绑定到controller参数上 --> <mvc:annotation-driven/> <!-- 对模型视图名称的解析,即在模型视图名称添加先后缀(若是最后一个仍是表示文件夹,则最后的斜杠不要漏了) 使用JSP--> <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- --> <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/views/"/><!--设置JSP文件的目录位置--> <property name="suffix" value=".jsp"/> </bean> <!-- springmvc文件上传须要配置的节点--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="20971500"/> <property name="defaultEncoding" value="UTF-8"/> <property name="resolveLazily" value="true"/> </bean> </beans>
在视图解析中咱们把全部的视图都存放在/WEB-INF/目录下,这样是为了视图安全,由于这个目录客户端不能直接访问。
在src/main/java源代码目录下建立包com.zhangguo.springmvc08.controller,在包下建立一个普通的类:HomeController,具体代码以下:
package com.zhangguo.springmvc08.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller //声明为控制器 @RequestMapping(path = "/home") //请求映射 public class HomeController { @RequestMapping(path = "/index") //请求映射 public String index(Model model){ model.addAttribute("message","Hello Spring MVC!"); return "home/index"; } }
注解为@Controller是为了让Spring IOC容器初始化时自动扫描到;@RequestMapping是为了映射请求路径,这里由于类与方法上都有映射因此访问时应该是/home/index;方法中声明Model类型的参数是为了把Action中的数据带到视图中;方法返回的结果是视图的名称index。
在WEB-INF/view目录中建立视图,视图将从Action中带回的信息展现,具体内容以下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <h2> ${message} </h2> </body> </html>
启动Tomcat运行项目,请注意查看启动信息,若是有异常应该先解决异常信息,运行成功后的结果以下所示:
使用Spring MVC实现一个简单的用户管理示例,项目结构以下
运行结果:
用户实体类user.java
package com.zhangguo.springmvc08.entity; /*** * 用户 */ public class User { public User(int id, String name, String address, String phone) { this.id = id; this.name = name; this.address = address; this.phone = phone; } public User() { } /** * 编号 */ private int id; /** * 姓名 */ private String name; /** * 地址 */ private String address; /** * 电话 */ private String phone; public int getId() { return id; } public void setId(int id) { this.id = id; } /** * 姓名 */ public String getName() { return name; } /** * 姓名 */ public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
用户数据访问接口 IUserDAO
package com.zhangguo.springmvc08.dao; import com.zhangguo.springmvc08.entity.User; import java.util.List; /** * 用户数据访问接口 */ public interface IUserDAO { /**得到全部*/ List<User> getAll(); /**根据用户编号得到用户对象*/ User getUserById(int id); /**新增*/ boolean add(User user); /**删除*/ boolean delete(int id); /**更新*/ boolean update(User user); }
UserDAO.java
package com.zhangguo.springmvc08.dao; import com.zhangguo.springmvc08.entity.User; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.List; /** * 用户数据访问对象 */ @Repository public class UserDAO implements IUserDAO { private static List<User> users = new ArrayList<User>(); static { users.add(new User(1, "刘德华", "中国香港", "13767890098")); users.add(new User(2, "张学友", "中国广东", "18989890767")); users.add(new User(3, "张国立", "中国北京", "13345672345")); users.add(new User(4, "张靓因", "中国上海", "15890908679")); users.add(new User(5, "齐萍萍", "中国珠海", "13246712235")); } /** * 得到全部 */ public List<User> getAll() { return users; } /** * 单个用户 */ public User getUserById(int id) { for (User user : users) { if (user.getId() == id) { return user; } } return null; } /** * 添加 */ public boolean add(User user) { if(user.getId()<=0) { user.setId(users.get(users.size()-1).getId()+1); } users.add(user); return true; } /** * 删除 */ public boolean delete(int id) { users.remove(getUserById(id)); return true; } /** * 更新 */ public boolean update(User user) { User oldUser = getUserById(user.getId()); oldUser.setName(user.getName()); oldUser.setAddress(user.getAddress()); oldUser.setPhone(user.getPhone()); return true; } }
用户业务类UserService.java
package com.zhangguo.springmvc08.service; import com.zhangguo.springmvc08.dao.IUserDAO; import com.zhangguo.springmvc08.dao.UserDAO; import com.zhangguo.springmvc08.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /**用户业务*/ @Service public class UserService { @Autowired IUserDAO userdao; public List<User> queryAllUsers(){ return userdao.getAll(); } public User getUserById(int id){ return userdao.getUserById(id); } public boolean deleteUser(int id){ return userdao.delete(id); } public boolean addUser(User user){ return userdao.add(user); } public boolean editUser(User user){ return userdao.update(user); } }
用户控制器UserController.java
package com.zhangguo.springmvc08.controller; import com.zhangguo.springmvc08.entity.User; import com.zhangguo.springmvc08.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller //声明为控制器 @RequestMapping(path = "/user") //请求映射 public class UserController { @Autowired UserService userService; @RequestMapping(path = "/index") //请求映射 public String index(Model model){ model.addAttribute("list",userService.queryAllUsers()); return "user/index"; } @RequestMapping("/delete/{id}") public String delete(@PathVariable int id){ userService.deleteUser(id); return "redirect:/user/index"; } @RequestMapping("/add") public String add(){ return "user/add"; } @RequestMapping(value = "/add",method = RequestMethod.POST) public String add(User user){ userService.addUser(user); return "redirect:/user/index"; } @RequestMapping("/edit/{id}") public String edit(@PathVariable int id,Model model){ model.addAttribute("user",userService.getUserById(id)); return "user/edit"; } @RequestMapping(value = "/edit",method = RequestMethod.POST) public String edit(User user){ userService.editUser(user); return "redirect:/user/index"; } }
列表:user/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>用户管理</title> </head> <body> <h2> 用户管理 </h2> <table width="100%" border="1"> <tr> <th>编号</th> <th>姓名</th> <th>地址</th> <th>电话</th> <th>操做</th> </tr> <c:forEach items="${list}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.address}</td> <td>${user.phone}</td> <td> <a href="delete/${user.id}" class="del">删除</a> | <a href="edit/${user.id}">修改</a></td> </tr> </c:forEach> </table> <p> <a href="add">新增</a> </p> <script> var items = document.querySelectorAll(".del"); for (var i = 0; i < items.length; i++) { items[i].onclick = function () { return confirm("您确认要删除吗?"); } } </script> </body> </html>
新增:user/add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>用户管理</title> </head> <body> <h2> 添加用户 </h2> <form method="post" action="add"> <fieldset> <legend>用户信息</legend> <p> <label for="name">姓名:</label> <input name="name" id="name" type="text" required="required" maxlength="32"/> </p> <p> <label for="address">地址:</label> <input name="address" id="address" type="text" required="required" maxlength="128"/> </p> <p> <label for="phone">电话:</label> <input name="phone" id="phone" type="text" required="required" maxlength="11"/> </p> <p> <button>提交</button> </p> </fieldset> </form> <a href="index">列表</a> </body> </html>
编辑:user/edit.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>用户管理</title> </head> <body> <h2> 修改用户 </h2> <form method="post" action="../edit"> <fieldset> <legend>用户信息</legend> <p> <label for="id">编号:</label> <input name="id" id="id" type="text" required="required" readonly="readonly" maxlength="32" value="${user.id}"/> </p> <p> <label for="name">姓名:</label> <input name="name" id="name" type="text" required="required" maxlength="32" value="${user.name}"/> </p> <p> <label for="address">地址:</label> <input name="address" id="address" type="text" required="required" maxlength="128" value="${user.address}"/> </p> <p> <label for="phone">电话:</label> <input name="phone" id="phone" type="text" required="required" maxlength="11" value="${user.phone}"/> </p> <p> <button>提交</button> </p> </fieldset> </form> <a href="index">列表</a> </body> </html>
resources/spring/spring-mvc.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd"> <!--启用spring的一些annotation --> <context:annotation-config/> <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> <context:component-scan base-package="com.zhangguo.springmvc08"> </context:component-scan> <!--HandlerMapping 无需配置,springmvc能够默认启动--> <!--静态资源映射--> <mvc:default-servlet-handler/> <!--若是发现是静态资源的请求,就将该请求转由Web应用服务器默认的Servlet处理,若是不是静态资源的请求,才由DispatcherServlet继续处--> <!--本项目把静态资源放在了WEB-INF的statics目录下,资源映射以下--> <!--<mvc:resources mapping="/css/**" location="/WEB-INF/statics/css/"/>--> <!--<mvc:resources mapping="/js/**" location="/WEB-INF/statics/js/"/>--> <!--<mvc:resources mapping="/image/**" location="/WEB-INF/statics/image/"/>--> <!--可是项目部署到linux下发现WEB-INF的静态资源会出现没法解析的状况,可是本地tomcat访问正常,所以建议仍是直接把静态资源放在webapp的statics下,映射配置以下--> <!--<mvc:resources mapping="/css/**" location="/statics/css/"/>--> <!--<mvc:resources mapping="/js/**" location="/statics/js/"/>--> <!--<mvc:resources mapping="/image/**" location="/statics/images/"/>--> <!-- 配置注解驱动 能够将request参数与绑定到controller参数上 --> <mvc:annotation-driven/> <!-- 对模型视图名称的解析,即在模型视图名称添加先后缀(若是最后一个仍是表示文件夹,则最后的斜杠不要漏了) 使用JSP--> <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- --> <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/views/"/><!--设置JSP文件的目录位置--> <property name="suffix" value=".jsp"/> </bean> <!-- springmvc文件上传须要配置的节点--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="20971500"/> <property name="defaultEncoding" value="UTF-8"/> <property name="resolveLazily" value="true"/> </bean> </beans>
https://git.coding.net/zhangguo5/SpringMVC08.git
https://www.bilibili.com/video/av16991874/
6.一、请使用Spring MVC在页面上显示当前日期
6.二、请使用Spring MVC完成以下功能(三选一),能够不使用数据库,直接使用集合就能够了