zoukankan      html  css  js  c++  java
  • SpringMVC+SSM框架

    SpringMVC

     


      

    View 从jsp =》现代前端;

    C 从Servlet =》Controller;

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



    DispatcherServlet 请求分发

      dispatcher程序调度

       


    SpringMVC执行流程:

    (找个清楚的图。。)

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

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

    虚线是自己做的部分:

    • 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")
    public 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)方式二(看懂即可,不记忆)

       


     

  • 相关阅读:
    Android home键和back键区别
    装饰器模式
    对象的序列化
    构建器问题
    finnally的一些用法
    LinkedList ArrayList测试2
    LinkedList ArrayList测试
    meizu调试遇到 的问题
    java和c#通过esb服务互调用组件
    .NET平台常用的框架整理
  • 原文地址:https://www.cnblogs.com/qyf2199/p/14012727.html
Copyright © 2011-2022 走看看