1、回顾MVC

1.1、MVC

  1. MVC概念:它是一种软件设计规范。可以将业务、逻辑等分离。最典型的就是以前学过的 JSP(Servlet) + Servlet + JavaBean 的模式。

    • 模型(dao/service)
    • 视图(jsp/html)
    • 控制器(servlet):
  2. 转发和重定向。(转发地址不会变,重定向会)
  3. 我们一般在bean层里面,很多时候不仅仅只是建一些对应的表的实体类,还需要建立很多其他的“简化版”实体类,这里的也有细分规范。
    1. pojo:表对应的实体类。
    2. vo:视图层所需要的实体类。
    3. dto:数据传输时候的对象。
    4. ……
  4. Model1:在早期的web开发中,通常采用的就是Model,这样开发相当于jsp直接立刻提交到服务器后台,中间不用Servlet。发的发展历史如下:
    • Model1:视图层+模型层。
    • Model2:视图层+控制层+模型层。
  5. 常见的MVC框架:
    • Struts
    • SpringMVC
    • ASP.NET MVC
    • 前端的 Vue等,由MVC还演化成的还有MVVM等
    • ……

2、初识SpringMVC

2.1、SpringMVC简介

  1. 简介:SpringMVC是Spring FrameWork的一部分,是基于Java实现的MVC轻量级Web框架。

  2. SpringMVC特点:

    • 轻量、简单易学。

    • 搞笑,基于请求响应的MVC框架。

    • 与Spring无缝结合。这样我们可以将SpringMVC所有要用到的类都注册到Spring中。非常方便。

    • 约定大于配置。简单来说就是规范性很好。

    • 功能强大:支持RESTful(地址栏不用问号传参)、数据验证、格式化、本地化等。

    • 使用的人多

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DZJohPw-1643095416682)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1641255045570.png)]

  3. 中心控制器:Spring的web框架是围绕DispatcherServlet设计,DispatcherServlet的作用是将请求分发到不同服务器。从Spring2.5开始,使用Java5或以上的版本可以基于注解开发。

  4. 原理:SpringMVC想很多其他的框架一样,以请求为驱动,围绕一个Servlet分派请求以及提供其他功能,DispatcherServlet实际是是一个Servlet(它继承于HttpServlet基类)

    ​ 当发起请求被前置拦截器拦截到请求,根据请求参数生成代理参数,找到请求对应的实际控制器,控制器处理请求,创建数据库、访问数据库,将响应模型给中心控制器,控制器使用模型与视图渲染视图结果将结果返回给中心控制,在将结果返回给请求者。

    ​ 原理图:

    ​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dr5eoATj-1643095416684)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1641255871965.png)]

    1. 基本的环境搭建好。

    2. 配置web.xml文件,注册DispatcherServlet。

      <?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_4_0.xsd"version="4.0"><!--1、配置DispatcherServlet :这是SpringMVC的核心;叫请求分发器或者叫前端控制器 --><servlet><servlet-name>springmvc</servlet-name><!--这和原来的Servlet一样,只是  DispatcherServlet 类不是我们写的,是Spring帮我们写好了--><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatcherServlet必须要绑定SpringMVC的配置文件,关联一个springMVC配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><!--启动级别   1:表示和服务器一起启动--><load-on-startup>1</load-on-startup></servlet><!-- 在SpringMVC中,    路径中 /   和   /* 的区别“/”  是只会匹配所有的请求,不会去匹配jsp页面“/*”  是只会匹配所有的请求,包括jsp页面--><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
      </web-app>
      
    3. 配置SpringMVC配置文件(主要是为了配置 处理器映射器、适配器和视图解析器)

      <!--配置处理器映射器--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/><!--配置适配器--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/><!--视图解析器 :模板引擎--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--前缀--><property name="prefix" value="/WEB-INF/jsp/"/><!--后缀--><property name="suffix" value=".jsp"/></bean>
      
    4. 配置Controller

      package com.chuchen.controller;import org.springframework.web.servlet.ModelAndView;
      import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;public class HelloController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView();//业务代码String res = "Hello SpringMVC";mv.addObject("msg",res);//视图跳转代码mv.setViewName("test");return mv;}
      }
      
    5. 具体的底层原理我这没办法写,可以多看看代码,其他的资料。

  5. 注解开发(其实上面的xml配置方法只是为了看原理,真正的开发中不会那么写,但是到时候面试肯定只要是问你原理)

    1. 引入相关依赖或插件以及注意资源文件过滤问题

    2. 配置web.xml,注意:web.xml必须是最新版本 这都是一样的,不用改。

    3. 创建Controller

      package com.chuchen.controller;import org.springframework.stereotype.Controller;
      import org.springframework.ui.Model;
      import org.springframework.web.bind.annotation.RequestMapping;@Controller
      @RequestMapping("/hello")
      public class HelloController{//localhost:8080/hello/h1@RequestMapping("/h1")public String hello(Model model){//封装数据model.addAttribute("msg","Hello SpringMVN");return "hello";  //会自动被视图解析器处理}
      }
      
    4. 注意点:

      • 通常,我们只需要手动配置视图解析器,而处理器映射器和处理器是配置只需要开启注解驱动即可,从而大量的节省了xml的配置。

3、Controller及RestFul风格

3.1、控制器Controller

  1. 控制器复杂提供访问应用程序的行为,通常通过定义接口或注解两种方式实现。

  2. 控制器负责解析用户的请求并将其转换为一种模型。

  3. 在SpringMVC中,一个控制器类可以包含多个方法。

  4. 在SpringMVC中,对于Controller的配置方式有很多种。

    1. 实现Controller接口,该接口下只有一个方法。实现了该接口就代表它是一个控制器,返回ModelAndView。

      //通过实现Controller接口实现
      public class ControllerTestOne implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {ModelAndView mv = new ModelAndView();mv.addObject("msg","ControllerTestOne");mv.setViewName("test");return mv;}
      }
      

      这种控制器只能一个接口写一个方法,当有多个请求的时候就要写很多类,所以不推荐使用。

    2. 用Spring中的 @controller 注解将其注入到Spring中

      1. 要先开启注解扫描。

        <!--自动扫描包,这是由IOC统一管理-->
        <context:component-scan base-package="com.chuchen.controller"/>
        
      2. 编写一个控制器

        @Controller  //代表将会被Spring接管
        public class ControllerTestTwo {@RequestMapping("t2")public String test1(Model model){model.addAttribute("msg","ControllerTestTwo");return "test";}
        }
        
      3. @RequestMapping注解可以写在类上,也可以写在方法上,写在类上和方法上相当于是父子关系,如果要作为一个控制器,那么方法上一定要有这个注解,类上可以没有。

3.2、ResfFul风格

  1. 概念:ResFul就是一个资源定位以及资源操作风格,不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更加简洁,更有层次,更易于实现缓存等机制。

  2. 功能:

    • 资源:互联网所有的事物都可以被抽取为对象。
    • 资源操作:使用POST、DELETE、PUT、GET使用不同的资源进行操作。
    • 分别对应增加、修改、删除、查询。
  3. 方法:在所要传递的参数上加上 @PathVariable 注解就行,让方法参数的值对应绑定到URL模板变量上。然后参数上也要加上对应的注解,其中还可以用其他的注解来限制提交方式

    @Controller
    public class RestFulControllerTest {//    @RequestMapping(value = "/add/{a}/{b}")//这类注解还可以限定请求方式@PostMapping(value = "/add/{a}/{b}")public String test(@PathVariable String a,@PathVariable int b, Model model){//原来的访问方式  localhost:8080/04/add?a=1&b=2String res = a+b;//RestFul: localhost:8080/add/a/bmodel.addAttribute("msg","结果为:"+res);return "test";}
    }
    
  4. 好处

    • 安全,这样不会暴露服务器的部分代码。
    • 简洁。
    • 高效,这支持缓存。

4、结果跳转方式

设置 ModelAndView 对象,根据view的名称,和视图解析器跳转到指定页面。

页面:{视图解析器前缀} + viewName + {视图解析器后缀}

请求转发和从重定向其实也是可以将视图解析器删掉,直接在后面写死,当然了,不建议这么做。

4.1、请求转发

前面说的默认都是请求转发。

4.2、重定向

在有视图解析器的前提下,在返回的地址前面加上一个redirect:就行;

@Controller
public class ModelTest {@RequestMapping("/m1/t1")public String test1(HttpServletRequest request, HttpServletResponse response){return "redirect:/index.jsp";}
}

5、数据处理

5.1、提交的名称与参数名一致

一致的话可以直接提交,它会自动匹配。

5.2、提交的名称和参数名不一致

给参数前面加上一个注解就行,其实一般,最好不管参数名是不是前端提交的一样,最好都要加上这个注解@RequestParam

@Controller
@RequestMapping("/user")
public class UserControllerTest {@PostMapping("/t1")public String test1(@RequestParam("name") String name, Model model){//接受前端参数System.out.println("接受到的前端参数为:"+name);//将结果返回前端model.addAttribute("msg",name);//视图跳转return "test";}
}

5.3、提交的是一个对象

其实也通过参数来提交的

5.4、乱码的解决

在Spring中,一般都是用过滤器解决乱码。

6、JSON

在现在的前后端分离阶段,后端部署提供接口提供数据,那么前端也要可以独立部署,这才能真正的做到前后端分离。

那么前端也是一样,要做到真正的前后端分离,负责渲染后端数据以及提供数据。

那么真正的为了解决前后端的数据传输统一的问题,也就是当前后端是不同人开发,都要有统一约定。这是后就要用到JSON了。

6.1、JSON概念

  1. 特点:

    • JSON是一种JavaScript的轻量级数据交换格式,目前使用的特别广泛。
    • 使用完全独立于编程语言的文本格式来存储数据。
    • 简洁和清晰的层次结构使得JSON成为理想的交换语言。
    • 易于阅读和编写,同时也便于机器理解生成,从而提升它的传输效率。
  2. 格式:

    • JSON对象的保存格式是键值对,数据间用逗号隔开
    • 花括号用来保存对象。
    • 方括号保存数组。
  3. JSON和JavaScript对象的区别:JSON是JavaScript对象的字符串表示法,它使用文本表示一个JS的对象信息,本质是一个字符串。

    var obj = {a:"hello",b:"word"};  //这就表示一个JavaScript对象,注意键名也是可以用引号包裹的
    var json = '{a:"hello",b:"word"}'; //这就是一个JSON对象,本质就是一个字符串。
    
  4. JSON和JavaScript对象之间的转换

    • 实现JavaScript对象转化为JSON字符串,使用JSON.stringify() 方法

      var json = JSON.stringify({a:"hello",b:"word"});
      //结果是:'{a:"hello",b:"word"}'
      
    • 实现JSON字符串转化为JavaScript对象,使用JSON.parse() 方法

      var obj = JSON.parse('{a:"hello",b:"word"}');
      //这个的结果就是: obj = {a:"hello",b:"word"};
      

6.2、Controller返回JSON数据

  • Jackson应该是目前比较好用的JSON解析工具了,当然还有阿里巴巴的fastjson等等。
  1. 要使用Jackson,首先要导入它的jar包。

  2. 然后jackson有一个ObjectMapper对象,这个对象可以进行转换,另外注意编码问题

     @Controller
    public class UserController {//可以在这个注解上加上这个属性来设置编码,但是不建议用,一般都用在配置文件里面配置//@RequestMapping(value = "/j1",produces = "application/json;charset=utf-8")@RequestMapping(value = "/j1")@ResponseBody  //加上这个注解就不会走视图解析器 ,会直接返回以一个字符串public String test1() throws JsonProcessingException {//jackson有一个ObjectMapper对象ObjectMapper mapper = new ObjectMapper();//创建一个对象User user = new User("孔繁帮",3,"男");return mapper.writeValueAsString(user);}
    }
    
  3. 统一设置Jackson编码

    <!--json乱码 统一设置编码--><mvc:annotation-driven><mvc:message-converters register-defaults="true"><bean class="org.springframework.http.converter.StringHttpMessageConverter"><constructor-arg value="utf-8"/></bean><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean"><property name="failOnEmptyBeans" value="false"/></bean></property></bean></mvc:message-converters></mvc:annotation-driven>
    
  4. 注意可以设置输出格式

    @ResponseBody  //加上这个注解就不会走视图解析器 ,会直接返回以一个字符串
    public String test3() throws JsonProcessingException {Date date = new Date();//jackson有一个ObjectMapper对象ObjectMapper mapper = new ObjectMapper();//创建一个对象//时间解析后的时间默认是时间戳  Timestamp,可以通过时间戳来设置//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//String format = sdf.format(date);//也可以使用ObjectMapper来格式化输出mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);return mapper.writeValueAsString(format);
    }
    
  5. 注意:@RestController(这个注解加在类的上面) //这个注解是不让这个类里面的方法只是返回字符串,不走视图解析器。

  6. 为了方便可以写一个JSON的工具类

    public class JsonUtil {public static String getJson(Object o){return getJson(o,"yyyy-MM-dd HH:mm:ss");}public static String getJson(Object o,String dataFormat) {ObjectMapper mapper = new ObjectMapper();//时间解析后的时间默认是时间戳  Timestamp,可以通过时间戳来设置SimpleDateFormat sdf = new SimpleDateFormat(dataFormat);mapper.setDateFormat(sdf);try {return mapper.writeValueAsString(o);} catch (JsonProcessingException e) {e.printStackTrace();}return null;}
    }
    

6.3、Fastjson的使用

这是阿里巴巴开发的一个JSON的工具包,和上面的一个概念,这个了解就行

它主要有三个工具类:

  • JSONObject :代表json对象
  • JSONArray:代表json数组对象
  • JSON:代表JSONObject和JSONArray之间的转化

用法主要看代码

7、Ajax的使用

7.1、简介

  • Ajax = Asynchronous JavaScript and XML(异步的JavaScript和xml)。
  • Ajax是在无需重新加载整个网页的情况下,能够更新部分网页技术。
  • Ajax不是一种编程语言,而是一种用于创建更好以及交互性更强的Web应用程序技能。
  • 简单来说就还是局部刷新页面。
  • 这个主要看代码笔记。

比如登陆例子的核心代码:

function a1() {$.post({url: "${pageContext.request.contextPath}/a3",data: {"name":$("#name").val()},success:function (date){console.log(date);if(date === "Ok"){$("#userInfo").css("color","green").html(date);}else {$("#userInfo").css("color","red").html(date);}}});
}
function a2(){$.post({url: "${pageContext.request.contextPath}/a3",data: {"pwd":$("#pwd").val()},success:function (date){if(date === "Ok"){$("#pwdInfo").css("color","green").html(date);}else {$("#pwdInfo").css("color","red").html(date);}}});
}
@RequestMapping("a3")
public String a3(String name,String pwd){String msg = "";if(name != null){//模拟数据库if("admin".equals(name)){msg = "Ok";}else {msg = "用户名有误";}}if(pwd != null){if("123456".equals(pwd)){msg = "Ok";}else {msg = "密码有误";}}return msg;
}

以前还觉得很难,其实现在理解了也很简单

8、 拦截器

8.1、拦截器和过滤器的区别

猪獒区别是 : 拦截器是AOP思想的具体应用

  1. 过滤器:

    • 是Servlet的一部分,在任何的java web都可以使用。
    • 在 url-pattern 中配置之 */之后,所有的要访问的资源都会先经过它。
  2. 拦截器:
    • 是SpringMVC框架自己的,只有使用了SpringMVC框架之后才能使用。
    • 拦截器只能拦截访问的控制方法,如果访问的是jsp/html/image/js是不会进行拦截的。

8.2、自定义拦截器

  1. 要实现拦截器,必须要继承HandlerInterceptor 接口。

    public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("处理器前");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("处理器前");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("清理");}
    }
    
  2. 配置拦截器

    <!--拦截器配置-->
    <mvc:interceptors><mvc:interceptor><!--包括这个请求下的所有请求--><mvc:mapping path="/**"/><bean class="com.chuchen.config.MyInterceptor"/></mvc:interceptor>
    </mvc:interceptors>
    

9、文件上传

9.1、上传

一样的,要上传文件,前端表单必须要设置enctype属性。这样它才能以流形(二进制)式上传。

SpringMVC为文件上传提供了专门的支持,这种支持是用 **MultipartResolver **实现的所以要先导入插件。

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version>
</dependency>

主要用到的类是下面的这个,要提前注入好,注意,这个注入的id不能改,只能是这个。

<!--文件上传的配置--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--请求编码的格式,,必须和jsp里面的pageEncoding一样,以至于读取正确的表单内容--><property name="defaultEncoding" value="utf-8"/><!--上传文件的大小上限,这里是 10M--><property name="maxUploadSize" value="10485760"/><property name="maxInMemorySize" value="40960"/></bean>

具体实现

//@RequestParam("file")  :将name = file 控件得到的文件封装成 CommonsMultipartFile 对象//批量上传CommonsMultipartFile则为数组@RequestMapping("uploadOne")public String uploadFileOne(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {//获取文件名String uploadFileName = file.getOriginalFilename();//如果文件为空,直接返回到首页if("".equals(uploadFileName)){return "redirect:/index.jsp";}System.out.println("上传文件名为:"+uploadFileName);//上传文件保存String path = request.getServletContext().getRealPath("/upload");File realPath = new File(path);//如果不存在这个目录,则创建一个if(!realPath.exists()){realPath.mkdir();}System.out.println("文件上传保存地址为:"+realPath);InputStream is = file.getInputStream();assert uploadFileName != null;OutputStream os = new FileOutputStream(new File(realPath,uploadFileName));//读取写出int len = 0;byte[] buffer = new byte[1024];while ((len=is.read(buffer)) != -1){os.write(buffer,0,len);os.flush();}os.close();is.close();return "redirect:/index.jsp";}//方法二,这个相当于把文件的操作也给我们封装好了@RequestMapping("uploadTwo")public String uploadFileTwo(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request) throws IOException {//上传文件路径保存设置String path = request.getServletContext().getRealPath("/upload");File readPath = new File(path);if(!readPath.exists()){readPath.mkdir();}System.out.println("上传文件地址"+readPath);//通过CommonsMultipartFile方法直接写入文件file.transferTo(new File(readPath + "/" + file.getOriginalFilename()));return "redirect:/index.jsp";}

9.2、下载

文件的下载其实刚好和文件的下载相反,这就不多说了,具体看代码。

@RequestMapping("download")public String  downLoad(HttpServletResponse response,HttpServletRequest request) throws IOException {//要下载的文件地址String path = request.getServletContext().getRealPath("upload");String fileName = "鞠婧祎.jpg";//设置响应头response.reset(); //设置页面不缓存,清空页面response.setCharacterEncoding("utf-8");response.setContentType("multipart/form-data"); //二进制传输数据//设置响应头response.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode(fileName, StandardCharsets.UTF_8));File file = new File(path,fileName);//读取文件--输入流InputStream input = new FileInputStream(file);//写文件OutputStream out = response.getOutputStream();byte[] buff = new byte[1024];int index;//执行写出操作while ((index = input.read(buff)) != -1){out.write(buff,0,index);out.flush();}out.close();input.close();return null;}
rEncoding("utf-8");response.setContentType("multipart/form-data"); //二进制传输数据//设置响应头response.setHeader("Content-Disposition","attachment;fileName="+ URLEncoder.encode(fileName, StandardCharsets.UTF_8));File file = new File(path,fileName);//读取文件--输入流InputStream input = new FileInputStream(file);//写文件OutputStream out = response.getOutputStream();byte[] buff = new byte[1024];int index;//执行写出操作while ((index = input.read(buff)) != -1){out.write(buff,0,index);out.flush();}out.close();input.close();return null;}

SpringMVC总结笔记相关推荐

  1. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)--依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  2. SpringMVC:学习笔记(10)——整合Ckeditor且实现图片上传

    SpringMVC:学习笔记(10)--整合Ckeditor且实现图片上传 配置CKEDITOR 精简文件 解压之后可以看到ckeditor/lang下面有很多语言的js,如果不需要那么多种语言的,可 ...

  3. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmv ...

  4. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  5. SpringMVC:学习笔记(5)——数据绑定及表单标签

    SpringMVC--数据绑定及表单标签 理解数据绑定 为什么要使用数据绑定 基于HTTP特性,所有的用户输入的请求参数类型都是String,比如下面表单: 按照我们以往所学,如果要获取请求的所有参数 ...

  6. springmvc学习笔记(17)-上传图片

    2019独角兽企业重金招聘Python工程师标准>>> springmvc学习笔记(17)-上传图片 标签: springmvc [TOC] 本文展示如何在springmvc中上传图 ...

  7. SpringMVC学习笔记(二)常用注解

    SpringMVC学习笔记(二)常用注解 1.RequestParam 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必 ...

  8. springmvc学习笔记--ueditor和springmvc的集成

    springmvc学习笔记--ueditor和springmvc的集成 前言: 在web开发中, 富文本的编辑器真心很重要. 有电商店铺的打理, 新闻稿/博客文章/论坛帖子的编辑等等, 这种所见即所的 ...

  9. SpringMVC学习笔记

    文章目录 SpringMVC学习笔记 Spring MVC 什么是 MVC 设计模式? Spring MVC 的核心组件 Spring MVC 的工作流程 如何使用? Spring MVC 注解 Sp ...

  10. SpringMVC学习笔记整理

    SpringMVC学习笔记 以下是我整理的SpringMVC学习笔记: 导入jar包 一:springmvc工作流程. ①.     servlet容器初始化一个request请求 ②.     Di ...

最新文章

  1. mysql缺少函数_零散的MySQL基础总是记不住?看这一篇就够了!
  2. java jpanel 间距_Java的 . 调整JPanel上的问题大小
  3. RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)
  4. python3.7官网中文官网_通用操作系统服务
  5. std::make_shared<T>/std::make_unique<T>与std::shared_ptr<T>/std::unique_ptr<T>的区别与联系
  6. 阿里云大数据利器Maxcompute-使用mapjoin优化查询
  7. 【转】windows 7系统安装与配置Tomcat服务器环境
  8. VirtualBox配置
  9. 问你觉得iOS7为什么要扁平化,扁平化和之前的比有什么优势
  10. Juniper SRX防火墙流量处理流程图(详细)
  11. 插值方法 matlab 实验,matlab计算方法实验报告3(插值问题).doc
  12. my97前端日期插件使用示例
  13. 数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
  14. 三国演义网页游戏私服架设教程
  15. linux关闭3389端口,如何修改云服务器(Windows、Linux)的默认3389远程端口?
  16. ArcGIS基于爬虫数据绘制人口分布密度图
  17. AutoCAD:The miracle created by Autodesk
  18. 数据结构第二版(朱昌杰版)习题2答案
  19. Pixhawk原生固件PX4之驱动ID
  20. 关于LoRa模块你需要知道的一切

热门文章

  1. 计算机组成原理笔记(8)---机器指令、寻址方式
  2. 078 周期函数定积分性质及定积分三大性质总结
  3. 单相/三相桥相/线电压基波幅值总结
  4. Spring+SpringMVC+MyBatis明日方舟版人员信息管理系统前端页面代码前后端交互+SSM框架 管理员登录 游客登录 普通用户登录 人员的增删改查 信息更新 图片上传 分页查询)
  5. Cass10.1独立地物简码识别功能
  6. 手机拍摄证件照有什么诀窍
  7. 语c语言用语大全,C语言常用语总结.doc
  8. Windows Git 多用户多仓库配置
  9. c语言之良好的编程习惯(四)
  10. 本地安装brat标注平台