码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC+SSM框架

时间:2021-01-25 11:04:12      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:key   简单   dao   实现   扩展   序列化   obj   style   重定向   

SpringMVC

 技术图片


 

 技术图片

 

View 从jsp =》现代前端;

C 从Servlet =》Controller;

 

Model 包括数据和行为:dao+service,vo/dto


技术图片

 


DispatcherServlet 请求分发

  dispatcher程序调度

   技术图片

 


SpringMVC执行流程:

技术图片(找个清楚的图。。)

实线是MVC自动做好的事情:

  • HandlerMapping:处理器映射器=》根据url找handler
    • HandlerExecution:=》根据url找Controller
  • HandlerAdapter:处理器适配器=》适配Controller
  • ViewResolver:视图解析器=》解析、拼接、渲染 for前端页面

虚线是自己做的部分:

  • Controller调用Service
  • ViewResolver到View:设置视图返回的名字

 注解开发SpringMVC

RESTful风格:以斜线分隔

互联网所有事物抽象为资源URI

  • URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
  • URL 是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。

 

URI资源的操作:GET、POST、DELETE、PUT 分别对应   查、增、删、改

(注意:post是增;put是改)

 

  1)传统方式操作资源:

  技术图片要写出来方法全名,同一对象不同操作写多种

  技术图片

 

  2)RESTful操作资源:

   技术图片         技术图片

    通过请求的方式(GET、POST、DELETE、PUT、PATCH)来判断:

  @GetMapping 查

  @PostMapping 增

  @PutMapping 更新服务端资源全部信息

  @PatchMapping 更新服务端资源部分信息

  @DeleteMapping 删除资源


 

  技术图片

  @RequestMapping  范围:类中所有方法

@GetMapping("/get")
public R getParam(@RequestParam Long ID){
    ...
    return R.data(getParam());
}
@PostMapping("/post")
public R PostParam(@RequestBody Map<String,Object>params){
    ...
    return R....;
}
@DeleteMapping("/delete")
R remove(@RequestParam Long ID){
    return R....;
}

 

 技术图片


重定向和转发(url相关)

技术图片技术图片

                                                  转发                                                                                                         重定向

 

重定向 redirect

  可以跨域访问

  相对路径:URL以 "/" 开头,相对整个WEB站点 根目录

  绝对路径:"/当前Web程序根名称 /资源名" 

    如"/WebModule/login.jsp","/bbs/servlet/LoginServlet"

转发 forward

  在web服务器内部进行的,不能跨域访问。、

  相对路径:URL以 "/" 开头,相对当前WEB应用程序 根目录

    相对路径用forward高效

  绝对路径如:"/login.jsp"或"/servlet/LoginServlet"(比redirect少一层)

 


 跨域:

  在浏览器上当前访问的网站向另一个网站发送请求获取数据的过程就是跨域请求。

 跨域访问 4种情况:

技术图片

 

 技术图片


 

转发/重定向的实例:

技术图片 注意:forward是转发!

 

技术图片

 

 


 接收请求参数


1)提交数据与方法参数一致:

技术图片

 技术图片

2)两个名称不一致

技术图片

 技术图片


  提交对象:

  技术图片

  技术图片

  技术图片

   如果名字不对应,则对应属性字段显示值为null

 

 


乱码问题解决


SpringMVC中提供过滤器,直接在web.xml中 配置filter即可

encoding设置为utf-8


 xml中配置filter:

  /* 使包含jsp页面(不重要):

 技术图片

 


 UTF-8

  是Unicode的实现方式之一

  对于英语字母,UTF-8 编码和ASCII 码是相同的

  UTF-8是一种变长编码,由1~4个字节表示一个符号

UTF-8扩展阅读:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

 

 


Jackson


JSON解析工具:jackson和下面的fastjson都是后端用的JSON解析工具,都是第三方包。

使用流程:

1.导jackson包

2.把JSON乱码在xml里面统一配置下

3.先创建mapper对象,mapper把我们要转换的对象转成String

 技术图片 writeValueAsString

 

多个对象时,先add到list里,然后再转换成string

技术图片

 

 


ps:

直接显示Date:

  技术图片

Date的格式处理:

  技术图片

处理之后:

  技术图片

 

 


fastjson


 阿里巴巴的fastjson(工具类utils):

技术图片

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

技术图片

 

 


JSON对象,JSON字符串,JAVA对象

  • JSON对象:对象的值可以用"对象.属性"的方式来访问

    技术图片

  • JSON字符串:就是纯的字符串,比JSON对象丢失了信息/功能。

   技术图片

  •  JAVA对象:一般用方括号表示:

    User[name=shily,sex="女",age=23]

下面是一些例子,重点看List:

简单java类转json字符串:{"password":"123456","username":"dmego"}
List<Object>转json字符串:[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]
复杂java类转json字符串:{"name":"userGroup","users":[{"password":"123123","username":"zhangsan"},{"password":"321321","username":"lisi"}]}

json字符串转简单java对象:User [username=dmego, password=123456]
json字符串转List<Object>对象:[User [username=zhangsan, password=123123], User [username=lisi, password=321321]]
json字符串转复杂java对象:UserGroup [name=userGroup, users=[User [username=zhangsan, password=123123], User [username=lisi, password=321321]]]

 


 使用:

1) JAVA对象转JSON字符串

String str001 = JSON.toJSONString(student001);

2)JSON字符串转JAVA对象

Student student001 = JSON.parseObject(str001, Student.class)

3) JAVA对象转JSON对象

JSONObject jsonObject001 =(JSONObject)JSON.toJSON(student001);

4) JSON对象转JAVA对象

Student student001 = JSON.toJavaObject(JsonObject001,Student.class)

 


 fastjson常用API(要学会找官方API文档来开发):

public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray 
public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject    
public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。

 


 实例:(最好换成别的例子)

    R screenExecuteByList(@RequestBody JSONObject jsonObject) {
        Integer page = jsonObject.getInteger("page");
        Integer limit = jsonObject.getInteger("limit");
        Integer startIndex = (page - 1) * limit;
        Long bizTypeId = jsonObject.getLong("bizTypeId");
        String key = JSONArray.toJSONString(jsonObject.get("executedBy"));
        List<Integer> executedBy = JSON.parseArray(key, Integer.class);
        List<BizDrivePerformanceCMainDo> bizDrivePerformanceCMainDos =
                bizDrivePerformanceCMainService.screenExecuteByList(bizTypeId, executedBy, startIndex, limit);
        Integer total = bizDrivePerformanceCMainService.getCountByExecutedBy(bizTypeId, executedBy);
        return R.data(bizDrivePerformanceCMainDos).put("total", total);
    }

 


 JSON字符串和JSON对象间的转换(用JS)

JSON 可以使用标准的 JavaScript 函数来解析。(JS Object Notation)

  • JSON.parse(): 将一个 JSON 字符串==> JS对象。//在前端,从后端接收 "json字符串"
    • 例如:var obj=JSON.parse(‘{ json字符串 }‘)
    • myObj = JSON.parse(this.responseText);
    • 特别说明:JSON不能存储:Date格式 or函数,只能先转为字符串然后转回 Date格式 or函数;(先用stringfy再用parse)
  • JSON.stringfy(): 将 JS 对象 ==> JSON 字符串。//将前端JS对象 转为字符串给后端用
    • 像这样的是JSON字符串:技术图片
    • 里面包含很多 单引号、加号

 

 


 AJAX  异步无刷新请求


AJAX==> 异步JS and XML

AJAX 局部修改网页,而不用全部刷新

  技术图片

一般在JS代码中运用Ajax技术

通过 AJAX,JavaScript 无需等待服务器的响应,而是:

  • 在等待服务器响应时执行其他脚本
  • 当响应就绪后对响应进行处理

最常用的是GET 和POST,

GET 更简单也更快,

在以下情况中,请使用 POST 请求:

  • 无法使用缓存文件(更新服务器上的文件或数据库)
  • 向服务器发送大量数据(POST 没有数据量限制)
  • 发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

 

 


jQuery库,提供了Ajax封装:

  $. 等价于 jQuery.

平时常用这两个:

  技术图片

  技术图片

$.get和$.post里面都深层调用$.ajax

  技术图片

   不清楚接口就点进去看接口(如下):

   技术图片

 例子:

  技术图片

      技术图片当然,也可以补一个error情况的回调函数

 


需要对象数组,返回List<Object>

前端的$.get/$.post不变,后端直接写成这样就行了:

技术图片

 

 


过滤器Filter(Servlet开发版)


 用来过滤网站的数据(统一处理,不用每个地方都写):

  • 处理中文乱码
  • 登录验证(权限)

SpringBoot里面用Shiro

技术图片

 

处理中文乱码:

技术图片

 

过滤器filter的xml配置:

  encoding设置为utf-8

 


拦截器


与过滤器filter的区别:

  只有访问Controller,拦截器才会拦截;

  静态资源如:html/css/js/image都不会拦截,提高效率

 


想要自定义拦截器,就实现HandlerInterceptor接口:

原理是AOP,重写各个切面的Advice即可

技术图片

 

 


登录判断验证(拦截器运用实例)

 ps:把用户的登录信息存在session中:

 技术图片

 

看下格式就好,业务逻辑看别的实际项目(不重要):

 技术图片

 

 


文件上传&下载(Servlet开发版)


文件上传和下载的方法都是死的,多看几遍,理解+记忆

前端

  设置为 表单数据:技术图片

  这样才会发送二进制流 数据到服务器。

后端

  xml导入技术图片,Maven帮导入依赖的common.io包

     文件上传配置(不重要):

  技术图片

  然后写Controller:

   1)方式一(看懂即可,不记忆)

   技术图片

 

   2)方式二(看懂即可,不记忆)

   技术图片

 

 


 技术图片

技术图片

 

SpringMVC+SSM框架

标签:key   简单   dao   实现   扩展   序列化   obj   style   重定向   

原文地址:https://www.cnblogs.com/qyf2199/p/14012727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!