一、SpringMVC 简介

1.SpringMVC 中重要组件

1.1 DispatcherServlet: 前端控制器,接收所有请求(如果配置/不包含jsp)
1.2 HandlerMapping: 解析请求格式的.判断希望要执行哪个具体的方法.
1.3 HandlerAdapter: 负责调用具体的方法.
1.4 ViewResovler:视图解析器.解析结果,准备跳转到具体的物理视图

2.SpringMVC 运行原理图

3.Spring 容器和SpringMVC 容器的关系
3.1 代码


3.2 Spring 容器和 SpringMVC 容器是 父子容器.
3.2.1 SpringMVC 容器中能够调用 Spring 容器的所有内容.
3.2.2 图示

二、SpringMVC 环境搭建

在下面的链接中下载,里面包含jar包、doc文档以及source源码

Spring MVC 所需jar包 - 官方地址

1. 导入jar

2. 在web.xml 中配置前端控制器DispatcherServlet
2.1 如果不配置<init-param> 会在/WEB-INF/<servlet-name>-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><!-- 配置前端控制器 --><servlet><servlet-name>abc</servlet-name><!-- servlet分发器 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化参数名 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 自启动 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>abc</servlet-name><!-- '/'表示除了jsp都拦截 --><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

3. 在 src 下新建 springmvc.xml
3.1 引入xmlns: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"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描注解 --><context:component-scanbase-package="cn.hanquan.controller"></context:component-scan><!-- 注解驱动,相当于配置了以下两个类 --><!-- org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping --><!-- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter --><mvc:annotation-driven></mvc:annotation-driven><!-- 放行静态资源 --><!-- 访问示例:http://localhost:8080/springmvc_test/test/jquery.js --><mvc:resources location="/js/" mapping="/test/**"></mvc:resources><mvc:resources location="/js/" mapping="/js/**"></mvc:resources><mvc:resources location="/css/" mapping="/css/**"></mvc:resources><mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
</beans>

4. 编写控制器类

@Controller
public class DemoController {// DemoController被SpringMVC管理,是单例,但是线程是安全的(只要不在@RequestMapping里面操作全局变量)。// 线程安全是指:在多线程访问的情况下,如果每一个线程访问得到的值是相同的,则称线程是安全的。@RequestMapping(value = "demo1")public String demo(People people) {// 参数可以同时写people, name, age// Spring是你只要敢写,它就会给你赋值。// 也可以写HttpServletRequest、HttpSessionSystem.out.println("In DemoController, run demo");System.out.println("In DemoController, people = " + people);return "main";// 因为添加了自定义视图解析器,所以不需要添加.jsp后缀和绝对路径的/前缀}@RequestMapping(value = "demo2")public String demo2(@RequestParam(value = "name", defaultValue = "游客") String name1,@RequestParam(value = "age", defaultValue = "66") int age1) {// 此处使用注解添加默认值,避免因int类型无法赋值为Null导致的异常;或者还有一种方式是使用Integer对象,可以赋值为Null// required: true 和 defaultValue 不要一起使用,否则始终具有默认值,required检验恒通过,没有意义。System.out.println("In DemoController demo2, name1 = " + name1 + ", age1 = " + age1);return "main2";}

三、字符编码过滤器

1.在 web.xml 中配置 Filter

 <!-- 字符编码过滤器 --><!-- 配置文件无关顺序问题,加载时就被实例化,等待tomcat回调 --><filter><filter-name>encoding</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></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>

四、传参

1. 把内容写到方法(HandlerMethod)参数中,SpringMVC 只要有这个内容,就会注入内容.(Spring是你只要敢写,它就会给你赋值)

2. 基本数据类型参数
2.1 默认保证参数名称和请求中传递的参数名相同

@Controller
public class DemoController {@RequestMapping("demo")
public String demo(String name,int age){@RequestMapping(value = "demo2")public String demo2(String name,int age) {System.out.println("In DemoController demo2, name = " + name + ", age = " + age);return "main2";}

2.2 如果请求参数名和方法参数名不对应使用@RequestParam()赋值
2.3 如果方法参数是基本数据类型( 不是封装类) ,可以通过 @RequestParam 设置默认值.
2.3.1 defaultValue防止没有参数时500

 @RequestMapping(value = "demo2")public String demo2(@RequestParam(value = "name", defaultValue = "游客") String name1,@RequestParam(value = "age", defaultValue = "66") int age1) {// 此处使用注解添加默认值,避免因int类型无法赋值为Null导致的异常;或者还有一种方式是使用Integer对象,可以赋值为Null// required: true 和 defaultValue 不要一起使用,否则始终具有默认值,required检验恒通过,没有意义。System.out.println("In DemoController demo2, name1 = " + name1 + ", age1 = " + age1);return "main2";}

2.4 如果强制要求必须有某个参数

 @RequestMapping("demo2")public String demo2(@RequestParam(required = true) String name) {System.out.println("name 是SQL 的查询条件,必须要传递name 参数" + name);return "main.jsp";}

3. HandlerMethod 中参数是对象类型
3.1 请求参数名和对象中属性名对应(get/set 方法)

@RequestMapping("demo4")public String demo4(People peo){return "main.jsp";
}

4. 请求参数中包含多个同名参数的获取方式
4.1 复选框传递的参数就是多个同名参数

 // 在请求参数中传递集合对象类型参数@RequestMapping(value = "demo3")public String demo3(@RequestParam("hobby") List<String> hobyList) {System.out.println("In DemoController demo3, hobyList = " + hobyList);return "main2";}

5. 请求参数中对象.属性格式
5.1 jsp 中代码

 <br>以下测试复杂类型参数(对象属性调用)的使用<form action="demo4" method="post"><br>name:<input type="text" name="peo.name"/><br>age:<input type="text" name="peo.age"/><br><input type="submit" name="提交"/></form>

5.2 新建一个类DemoPeople
5.2.1 对象名和参数中点前面名称对应

package cn.hanquan.pojo;public class DemoPeople {private People peo;public People getPeo() {return peo;}public void setPeo(People peo) {this.peo = peo;}@Overridepublic String toString() {return "DemoPeople [peo=" + peo + "]";}
}

5.3 控制器

 @RequestMapping(value = "demo4")public String demo4(DemoPeople demoPeople) { // 经测试,此处也可用DemoPeopleListSystem.out.println("In DemoController demo4, demoPeople = " + demoPeople);return "main2";}

6. 在请求参数中传递集合对象类型参数
6.1 jsp 中格式

 <br>以下测试复杂类型参数(对象列表属性调用)的使用<form action="demo5" method="post"><br>peo[0].name:<input type="text" name="peo[0].name"/><br>peo[0].age:<input type="text" name="peo[0].age"/><br>peo[1].name:<input type="text" name="peo[1].name"/><br>peo[1].age:<input type="text" name="peo[1].age"/><br><input type="submit" name="提交"/></form>

6.2 新建类 DemoPeopleList

package cn.hanquan.pojo;import java.util.List;public class DemoPeopleList {private List<People> peo;public List<People> getPeo() {return peo;}public void setPeo(List<People> peo) {this.peo = peo;}@Overridepublic String toString() {return "DemoPeopleList [peo=" + peo + "]";}
}

6.3 控制器

 @RequestMapping(value = "demo5")public String demo5(DemoPeopleList demoPeopleList) {System.out.println("In DemoController demo5, demoPeopleList = " + demoPeopleList);return "main2";}

7. restful 传值方式.
7.1 简化 jsp 中参数编写格式
7.2 在 jsp 中设定特定的格式

     <br>原始url传值:<a href="demo6?name=testname&age=123">跳转至:demo6?name=testname&age=123</a>        <br>restful类型参数:<a href="demo7/testname/123">跳转至:demo7/testname/123</a>

7.3 在控制器中
7.3.1 在 @RequestMapping 中一定要和请求格式对应
7.3.2 {名称} 中名称自定义名称
7.3.3 @PathVariable 获取@RequestMapping 中内容,默认按照
方法参数名称去寻找.

 // 普通url传值@RequestMapping(value = "demo6")public String demo6(String name, int age) {System.out.println("In DemoController demo6, name = " + name + ", age=" + age);return "main2";}// restful传值方式,可以简化jsp中参数编写格式@RequestMapping(value = "demo7/{name1}/{age1}") // 相当于虚拟路径public String demo7(@PathVariable(value = "name1") String name, @PathVariable(value = "age1") int age) {System.out.println("In DemoController demo7, name = " + name + ", age=" + age);return "main2";}

五、跳转方式

1. 默认跳转方式请求转发.

2. 设置返回值字符串内容
2.1 添加redirect:资源路径,重定向
2.2 添加forward:资源路径或省略forward:,请求转发

 // 请求转发和重定向// 默认使用请求转发方式,也可以指定请求转发,使用forward:@RequestMapping(value = "demo9")public String demo9() {System.out.println("demo9:以请求转发的方式跳转页面");return "main2";}// 重定向使用redirect:@RequestMapping(value = "demo10")public String demo10() {System.out.println("demo10:以重定向的方式跳转页面");return "redirect:main2.jsp";}

六、视图解析器

1. SpringMVC 会提供默认视图解析器.
2. 在springmvc.xml中,自定义视图解析器

 <!-- 自定义视图解析器 --><!-- 当跳转语句添加前缀(比如forward:)时,自定义视图解析器无效,走默认视图解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 添加前缀后,写相对路径不用加/ --><property name="prefix" value="/"></property><!-- 后缀没配,与不写相同,可以配成jsp --><property name="suffix" value=".jsp"></property></bean>

3. 如果希望不执行自定义视图解析器, 在方法返回值前面添加
forward:redirect:

 // 自定义视图解析器@RequestMapping(value = "demo11")public String demo11() {System.out.println("demo11");return "redirect:demo12";}@RequestMapping(value = "demo12")public String demo12() {System.out.println("demo12");return "main2";}

七、@ResponseBody

1. 在方法上只有@RequestMapping 时,无论方法返回值是什么认为需要跳转

2. 在方法上添加@ResponseBody(恒不跳转)
2.1 如果返回值满足key-value 形式(对象或map)
2.1.1 把响应头设置为application/json;charset=utf-8
2.1.2 把转换后的内容输出流的形式响应给客户端.
2.2 如果返回值不满足key-value,例如返回值为String
2.2.1 把相应头设置为text/html
2.2.2 把方法返回值以流的形式直接输出.
2.2.3 如果返回值包含中文,出现中文乱码
2.2.3.1 produces 表示响应头中Content-Type 取值.

 // ResponseBody做了两件事情:// 1、依赖jackson包,把满足key-value形式的对象返回值转换成json字符串// 2、设置响应头的类型为application/json;charset=utf-8// 3、把转换后的内容以流形式输出到客户端,恒不跳转。// 如果不添加@ResponseBody,无论方法返回值是什么,@RequestMapping都会自动跳转到返回值的内容@RequestMapping(value = "demo13")@ResponseBodypublic People demo13() {System.out.println("demo13");People p = new People();p.setAge(12);p.setName("张三");return p;}// 如果无法转成json,ResponseBody会直接以string形式返回,类型为text/html// 如果返回值包含中文,需要手动设置响应头字符编码,来避免中文乱码问题。produces表示响应头中Content-Type取值@RequestMapping(value = "demo14", produces = "text/html;charset=utf-8")@ResponseBodypublic String demo14() {System.out.println("demo14");return "如果jackson无法转成json,直接以string形式返回";}

demo13运行效果:

demo14运行效果:

3. 底层使用Jackson 进行json 转换,在项目中一定要导入jackson 的jar

需要导入的jar包如下图:

可以从下面的链接中下载:

【mvn repository】所需jackson jar包地址 - 从Maven仓库中下载

3.1 spring4.1.6jackson 不支持较高版本, jackson 2.7 无效.


附:源代码 + 运行效果


环境:Eclipse

1、整体目录结构

2、代码

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                       http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><!-- 配置前端控制器 --><servlet><servlet-name>abc</servlet-name><!-- servlet分发器 --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化参数名 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 自启动 --><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>abc</servlet-name><!-- '/'表示除了jsp都拦截 --><url-pattern>/</url-pattern></servlet-mapping><!-- 字符编码过滤器 --><!-- 无关顺序问题,加载时就被实例化,等待tomcat回调 --><filter><filter-name>encoding</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></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 扫描注解 --><context:component-scanbase-package="cn.hanquan.controller"></context:component-scan><!-- 注解驱动,相当于配置了以下两个类 --><!-- org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping --><!-- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter --><mvc:annotation-driven></mvc:annotation-driven><!-- 放行静态资源 --><!-- 访问示例:http://localhost:8080/springmvc_test/test/jquery.js --><mvc:resources location="/js/" mapping="/test/**"></mvc:resources><mvc:resources location="/js/" mapping="/js/**"></mvc:resources><mvc:resources location="/css/" mapping="/css/**"></mvc:resources><mvc:resources location="/images/" mapping="/images/**"></mvc:resources><!-- 自定义视图解析器 --><!-- 当跳转语句添加前缀(比如forward:)时,自定义视图解析器无效,走默认视图解析器 --><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><!-- 添加前缀后,写相对路径不用加/ --><property name="prefix" value="/"></property><!-- 后缀没配,与不写相同,可以配成jsp --><property name="suffix" value=".jsp"></property></bean>
</beans>

DemoController.java

package cn.hanquan.controller;import java.awt.PageAttributes.MediaType;
import java.util.List;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import cn.hanquan.pojo.DemoPeople;
import cn.hanquan.pojo.DemoPeopleList;
import cn.hanquan.pojo.People;@Controller
public class DemoController {// DemoController被SpringMVC管理,是单例,但是线程是安全的(只要不在@RequestMapping里面操作全局变量)。// 线程安全是指:在多线程访问的情况下,如果每一个线程访问得到的值是相同的,则称线程是安全的。@RequestMapping(value = "demo1")public String demo(People people) {// 参数可以同时写people, name, age// Spring是你只要敢写,它就会给你赋值。// 也可以写HttpServletRequest、HttpSessionSystem.out.println("In DemoController, run demo");System.out.println("In DemoController, people = " + people);return "main";// 因为添加了自定义视图解析器,所以不需要添加.jsp后缀和绝对路径的/前缀}@RequestMapping(value = "demo2")public String demo2(@RequestParam(value = "name", defaultValue = "游客") String name1,@RequestParam(value = "age", defaultValue = "66") int age1) {// 此处使用注解添加默认值,避免因int类型无法赋值为Null导致的异常;或者还有一种方式是使用Integer对象,可以赋值为Null// required: true 和 defaultValue 不要一起使用,否则始终具有默认值,required检验恒通过,没有意义。System.out.println("In DemoController demo2, name1 = " + name1 + ", age1 = " + age1);return "main2";}// 在请求参数中传递集合对象类型参数@RequestMapping(value = "demo3")public String demo3(@RequestParam("hobby") List<String> hobyList) {System.out.println("In DemoController demo3, hobyList = " + hobyList);return "main2";}@RequestMapping(value = "demo4")public String demo4(DemoPeople demoPeople) { // 经测试,此处也可用DemoPeopleListSystem.out.println("In DemoController demo4, demoPeople = " + demoPeople);return "main2";}@RequestMapping(value = "demo5")public String demo5(DemoPeopleList demoPeopleList) {System.out.println("In DemoController demo5, demoPeopleList = " + demoPeopleList);return "main2";}// 普通url传值@RequestMapping(value = "demo6")public String demo6(String name, int age) {System.out.println("In DemoController demo6, name = " + name + ", age=" + age);return "main2";}// restful传值方式,可以简化jsp中参数编写格式@RequestMapping(value = "demo7/{name1}/{age1}") // 相当于虚拟路径public String demo7(@PathVariable(value = "name1") String name, @PathVariable(value = "age1") int age) {System.out.println("In DemoController demo7, name = " + name + ", age=" + age);return "main2";}// 请求转发和重定向// 默认使用请求转发方式,也可以指定请求转发,使用forward:@RequestMapping(value = "demo9")public String demo9() {System.out.println("demo9:以请求转发的方式跳转页面");return "main2";}// 重定向使用redirect:@RequestMapping(value = "demo10")public String demo10() {System.out.println("demo10:以重定向的方式跳转页面");return "redirect:main2.jsp";}// 自定义视图解析器@RequestMapping(value = "demo11")public String demo11() {System.out.println("demo11");return "redirect:demo12";}@RequestMapping(value = "demo12")public String demo12() {System.out.println("demo12");return "main2";}// ResponseBody做了两件事情:// 1、依赖jackson包,把满足key-value形式的对象返回值转换成json字符串// 2、设置响应头的类型为application/json;charset=utf-8// 3、把转换后的内容以流形式输出到客户端,恒不跳转。// 如果不添加@ResponseBody,无论方法返回值是什么,@RequestMapping都会自动跳转到返回值的内容@RequestMapping(value = "demo13")@ResponseBodypublic People demo13() {System.out.println("demo13");People p = new People();p.setAge(12);p.setName("张三");return p;}// 如果无法转成json,ResponseBody会直接以string形式返回,类型为text/html// 如果返回值包含中文,需要手动设置响应头字符编码,来避免中文乱码问题。produces表示响应头中Content-Type取值@RequestMapping(value = "demo14", produces = "text/html;charset=utf-8")@ResponseBodypublic String demo14() {System.out.println("demo14");return "如果jackson无法转成json,直接以string形式返回";}
}

People.java

package cn.hanquan.pojo;public class People {public String name;public int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "People [name=" + name + ", age=" + age + "]";}
}

DemoPeople.java

package cn.hanquan.pojo;public class DemoPeople {private People peo;public People getPeo() {return peo;}public void setPeo(People peo) {this.peo = peo;}@Overridepublic String toString() {return "DemoPeople [peo=" + peo + "]";}}

DemoPeopleList.java

package cn.hanquan.pojo;import java.util.List;public class DemoPeopleList {private List<People> peo;public List<People> getPeo() {return peo;}public void setPeo(List<People> peo) {this.peo = peo;}@Overridepublic String toString() {return "DemoPeopleList [peo=" + peo + "]";}
}

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>测试Spring</title>
</head>
<body><h2>Spring各种类型参数的接收</h2><hr><form action="demo1" method="post"><br>以下age项不能为空<br>name:<input type="text" name="name"/><br>age:<input type="text" name="age"/><br><input type="submit" name="提交"/></form><hr><br>以下可不填直接提交,自动传入默认值<form action="demo2" method="post"><br>name:<input type="text" name="name"/><br>age:<input type="text" name="age"/><br><input type="submit" name="提交"/></form><hr><br>以下测试List类型参数的使用<form action="demo3" method="post"><br>name:<input type="text" name="name"/><br>age:<input type="text" name="age"/><br>hobbby:<br>学习<input type="checkbox" name="hobby" value="学习"/><br>写代码<input type="checkbox" name="hobby" value="写代码"/><br>看视频<input type="checkbox" name="hobby" value="看视频"/><br>看笔记<input type="checkbox" name="hobby" value="看笔记"/><br><input type="submit" name="提交"/></form><hr><br>以下测试复杂类型参数(对象属性调用)的使用<form action="demo4" method="post"><br>name:<input type="text" name="peo.name"/><br>age:<input type="text" name="peo.age"/><br><input type="submit" name="提交"/></form><hr><br>以下测试复杂类型参数(对象列表属性调用)的使用<form action="demo5" method="post"><br>peo[0].name:<input type="text" name="peo[0].name"/><br>peo[0].age:<input type="text" name="peo[0].age"/><br>peo[1].name:<input type="text" name="peo[1].name"/><br>peo[1].age:<input type="text" name="peo[1].age"/><br><input type="submit" name="提交"/></form><hr><br>测试url传值<br>原始url传值:<a href="demo6?name=testname&age=123">跳转至:demo6?name=testname&age=123</a>       <br>restful类型参数:<a href="demo7/testname/123">跳转至:demo7/testname/123</a>      <hr><br>测试请求转发和重定向<br><a href="demo9">请求转发跳转</a>       <br><a href="demo10">重定向跳转</a>     </body>
</html>

【SpringMVC入门】SpringMVC环境搭建、接收参数的几种方式、视图解析器、@ResponseBody相关推荐

  1. 【SpringMVC框架】springmvc入门程序-环境搭建

    入门程序 1.需求 以案例作为驱动. springmvc和mybaits使用一个案例(商品订单管理). 回顾一下表单各项关联关系 见图数据模型 功能需求:商品列表查询 2.环境准备 数据库环境:mys ...

  2. SpringMVC 视图解析器

    1.视图解析器 会 根据 把控制器返回的逻辑视图名 确定 渲染模型的视图文件的物理位置. Spring MVC的一个重要特性:将控制器中处理请求的逻辑 和 视图中渲染实现 解耦. 控制器方法和视图实现 ...

  3. SpringMVC全注解环境搭建

    源代码: 链接:https://pan.baidu.com/s/1Lxb-riH–YQNIy3c0i8pFA 提取码:y3aq 文档地址:https://shphuang_aliyun.gitee.i ...

  4. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...

  5. SpringMVC获取参数的几种方式

    SpringMVC获取参数的几种方式 前言: 年末了,忙了一年了却发现系统的整理的东西很少,一些基础的东西都未做整理,这里就将它随便整理一下,增加一些印象,当然在网上看到一些好的资料也会整理下来以备后 ...

  6. MSP432入门——编译环境搭建

    0x00.章索引 MSP432入门--编译环境搭建 0x01.目录 节目录 0x00.章索引 0x01.目录 0x02.概述 0x03.正式开始前... 非专业"教程" Simpl ...

  7. Bootstrap4+MySQL前后端综合实训-Day02-AM【Bootstrap4(入门、环境搭建、文字排版、颜色、表格、图片、进度条、折叠、输入框组、模态框)、Font Awesome字体图标】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 Typora语法 Day01-知识回顾 1.前端部分 flex布局 2.Bootstr ...

  8. nginx学习笔记-01nginx入门,环境搭建,常见命令

    nginx学习笔记-01nginx入门,环境搭建,常见命令 文章目录 nginx学习笔记-01nginx入门,环境搭建,常见命令 1.nginx的基本概念 2.nginx的安装,常用命令和配置文件 3 ...

  9. Java入门及环境搭建idea安装和简单使用

    Java入门及环境搭建 什么是Java Java Java是一门新的语言特点是: 语法有点像c 没有指针 没有内存管理 真正的可移植性,编写一次,到处运行. 面向对象 类型安全 高质量的类库 - Ja ...

最新文章

  1. 可以检验计算机配置的游戏软件,检测游戏配置的软件-有没有自己检验电脑配置是否符合游戏要求配置 – 手机爱问...
  2. GitHub发布开源项目指南,以帮助更多开发者参与开源
  3. FreeRtos学习笔记(11)查找就绪任务中优先级最高任务原理刨析
  4. 使用隐式Intent打开系统浏览器的百度网页
  5. LeetCode LCP 22. 黑白方格画
  6. mysql主从复制原理分析
  7. 紫皮java_java如果已知一个日期为2007/3/8,求10天后是哪一天,367天后呢
  8. 前端中台化,把格局做大:Node.js与测试服务探索
  9. nginx 启动、重启、关闭
  10. 计算机三级网络技术考过指南 【历年考点汇总】
  11. android+字体+动画效果怎么做的,字体动画效果怎么做?原来这么简单!
  12. Cubase10自编曲平台,享受音乐带来的快乐!
  13. matlab uint8 小数,matlabuint8什么意思
  14. PPT插入幻灯片编号却没有出现页码的解决方法
  15. echarts 路径图
  16. 有人想让汽车无人化,但有人想让汽车飞起来
  17. Koch科赫雪花的实现
  18. linux 7 删除mtab内容,centos7之文件搜索及sed文本处理
  19. Win7下安装Qt3D库
  20. 【建议收藏】黑客基础必学命令行!

热门文章

  1. POJ - 1734 Sightseeing trip(最小环+输出路径)
  2. sockaddr与sockaddr_in的区别
  3. Websniff -aspx网页嗅探工具及使用说明
  4. 几个预编译指令的用法
  5. 【白话科普】网站图片不显示,背后的原因你都清楚吗
  6. 第43讲:灵活好用的 Spider 的用法
  7. 一个奇葩的网络问题,把技术砖家搞蒙了
  8. 呃... 写满数据的硬盘是否比空硬盘重?
  9. 我在攻读计算机视觉和机器学习硕士学位时学到了什么
  10. 音视频技术开发周刊 87期