当前位置: 首页 > wzjs >正文

增城营销型网站建设用什么软件做网站最好

增城营销型网站建设,用什么软件做网站最好,杭州外贸公司有哪些,我想接app注册推广单这一篇主要就是是SpringBootWeb 、Http协议、分层解耦相关内容 Http协议 先来介绍Http协议,Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。 特点:①基于TCP协议: 面向连接,安全②基…

这一篇主要就是是SpringBootWeb 、Http协议、分层解耦相关内容 

Http协议

先来介绍Http协议,Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。

特点:①基于TCP协议: 面向连接,安全②基于请求-响应模型: 一次请求对应一次响应(先请求后响应)③HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的

HTTP请求协议

GET方式的请求协议

浏览器将数据以请求格式发送到服务器。包括:请求行、请求头 、请求体

  • 请求行(以上图中红色部分) :HTTP请求中的第一行数据。由:请求方式资源路径协议/版本组成(之间使用空格分隔)

    • 请求方式:GET

    • 资源路径:/brand/findAll?name=OPPO&status=1

      • 请求路径:/brand/findAll

      • 请求参数:name=OPPO&status=1

        • 请求参数是以key=value形式出现

        • 多个请求参数之间使用&连接

      • 请求路径和请求参数之间使用?连接

    • 协议/版本:HTTP/1.1

  • 请求头(以上图中黄色部分) :第二行开始,上图黄色部分内容就是请求头。格式为key: value形式

    请求头

    含义

    Host

    表示请求的主机名

    User-Agent

    浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko

    Accept

    表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;

    Accept-Language

    表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;

    Accept-Encoding

    表示浏览器可以支持的压缩类型,例如gzip, deflate等。

    Content-Type

    请求主体的数据类型

    Content-Length

    数据主体的大小(单位:字节)

     GET方式的请求协议

    • 请求行(以上图中红色部分):包含请求方式、资源路径、协议/版本

      • 请求方式:POST

      • 资源路径:/brand

      • 协议/版本:HTTP/1.1

    • 请求头(以上图中黄色部分)

    • 请求体(以上图中绿色部分) :存储请求参数

      • 请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束)

    区别 

    区别方式

    GET请求

    POST请求

    请求参数

    请求参数在请求行中。<br/>例:/brand/findAll?name=OPPO&status=1

    请求参数在请求体中

    请求参数长度

    请求参数长度有限制(浏览器不同限制也不同)

    请求参数长度没有限制

    安全性

    安全性低。原因:请求参数暴露在浏览器地址栏中。

    安全性相对高

    package com.ght666;import jakarta.servlet.http.HttpServletRequest;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;@RestController
    public class RequestController {@RequestMapping("/request")public String request(HttpServletRequest request) {//获取参数 name ageString name = request.getParameter("name");String age = request.getParameter("age");System.out.println("name :" + name + " -- age :" + age);//获取请求路径String requestURI = request.getRequestURI();System.out.println("requestURI :" + requestURI);String URL = request.getRequestURL().toString();System.out.println("URL :" + URL);//获取请求方式String method = request.getMethod();System.out.println("method :" + method);//获取请求头String header = request.getHeader("User-Agent");System.out.println("header :" + header);return "request success";//请求协议}
    }
    

     HTTP响应协议

    • 响应协议:服务器将数据以响应格式返回给浏览器。包括:响应行 、响应头 、响应体

    • 响应行(以上图中红色部分):响应数据的第一行。响应行由协议及版本响应状态码状态码描述组成

      • 协议/版本:HTTP/1.1

      • 响应状态码:200

      • 状态码描述:OK

    • 响应头(以上图中黄色部分):响应数据的第二行开始。格式为key:value形式

      • http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作,这样,对方在收到信息后,就可以知道你是谁,你想干什么

    常见 HTTP响应头:

    Content-Type:表示该响应内容的类型,例如text/html,image/jpeg ;Content-Length:表示该响应内容的长度(字节数);Content-Encoding:表示该响应压缩算法,例如gzip ;Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒 ;Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie ;
    • 响应体(以上图中绿色部分): 响应数据的最后一部分。存储响应的数据

      • 响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)

    响应状态码

    状态码分类说明
    1xx响应中 --- 临时状态码。表示请求已经接受,告诉客户端应该继续请求或者如果已经完成则忽略
    2xx成功 --- 表示请求已经被成功接收,处理已完成
    3xx重定向 --- 重定向到其它地方,让客户端再发起一个请求以完成整个处理
    4xx客户端错误 --- 处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等
    5xx服务器端错误 --- 处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等

    设置响应数据

    Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Controller方法的时候传递给了该方法。

    Code:

    package com.ght666;import jakarta.servlet.http.HttpServletResponse;
    import org.springframework.http.ResponseEntity;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestController
    public class ResponseController {@RequestMapping("/response")public void response(HttpServletResponse response) throws IOException {//设置响应状态码response.setStatus(401);//设置响应标头response.setHeader("name", "ght666");//设置响应体response.setContentType("text/html;charset=utf-8");response.setCharacterEncoding("utf-8");response.getWriter().write("<h1>你好,Spring<h1>");}@RequestMapping("/response2")public ResponseEntity<String> response2(HttpServletResponse response) throws IOException {return ResponseEntity.status(401).header("name", "ght666").body("<h1>你好,Spring2<h1>");}
    }
    

    响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头。

    SpringBootWeb

    在这里是简单的做了一个基于SpringBoot开发web,完成用户列表的渲染展示 代码不放了 主要记一些知识点

    @ResponseBody

    Controller程序呢,除了接收请求外,还可以进行响应。在我们前面所编写的controller方法中,都已经设置了响应数据。controller方法中的return的结果,怎么就可以响应给浏览器呢?使用@ResponseBody注解

    @ResponseBody注解:

    • 类型:方法注解、类注解

    • 位置:书写在Controller方法上或类上

    • 作用:将方法返回值直接响应给浏览器,如果返回值类型是实体对象/集合,将会转换为JSON格式后在响应给浏览器

    在我们所书写的Controller中,只在类上添加了@RestController注解、方法添加了@RequestMapping注解,并没有使用@ResponseBody注解。但是事实上, @RestController注解是由两个注解组合起来的,分别是:@Controller 、@ResponseBody。 那也就意味着,我们在类上已经添加了@ResponseBody注解了,而一旦在类上加了@ResponseBody注解,就相当于该类所有的方法中都已经添加了@ResponseBody注解。

    前后端分离的项目中,一般直接在请求处理类上加@RestController注解,就无需在方法上加@ResponseBody注解了。

     分层耦合

    在我们进行程序设计以及程序开发时,尽可能让每一个接口、类、方法的职责更单一些(单一职责原则)。

    三层架构

    三层架构执行流程是怎么样的

    • 前端发起的请求,由Controller层接收(Controller响应数据给前端)

    • Controller层调用Service层来进行逻辑处理(Service层处理完后,把处理结果返回给Controller层)

    • Serivce层调用Dao层(逻辑处理过程中需要用到的一些数据要从Dao层获取)

    • Dao层操作文件中的数据(Dao拿到的数据会返回给Service层

    • Controller:控制层。接收前端发送的请求,对请求进行处理,并响应数据。

    • Service:业务逻辑层。处理具体的业务逻辑。

    • Dao:数据访问层(Data Access Object),也称为持久层。负责数据访问操作,包括数据的增、删、改、查。

    三层架构的好处:

    1. 复用性强

    2. 便于维护

    3. 利用扩展

     分层解耦

    Service中调用Dao称之为层与层之间耦合了,

    软件设计原则:高内聚低耦合。

    高内聚:指的是一个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越高,则内聚性越高,即 "高内聚"。

    低耦合:指的是软件中各个层、模块之间的依赖关联程序越低越好。

     目标:

    解耦思路

     将对象交给容器管理,容器为程序提供依赖的对象

    我们想要实现上述解耦操作,就涉及到Spring中的两个核心概念:

    • 控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。

      • 对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器。

    • 依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。

      • 程序运行时需要某个资源,此时容器就为其提供这个资源。

      • 例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象。

    • bean对象:IOC容器中创建、管理的对象,称之为:bean对象。

     IOC&DI

    IOC控制反转,就是将对象的控制权交给Spring的IOC容器,由IOC容器创建及管理对象。IOC容器创建的对象称为bean对象。

    在实现类加上 @Component 注解,就代表把当前类产生的对象交给IOC容器管理。在调用的对象前加@Autowired表示注入运行时所依赖的对象

    @Component
    public class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic List<User> findAll() {List<String> lines = userDao.findAll();List<User> userList = lines.stream().map(line -> {String[] parts = line.split(",");Integer id = Integer.parseInt(parts[0]);String username = parts[1];String password = parts[2];String name = parts[3];Integer age = Integer.parseInt(parts[4]);LocalDateTime updateTime = LocalDateTime.parse(parts[5], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));return new User(id, username, password, name, age, updateTime);}).collect(Collectors.toList());return userList;}
    }

     衍生注解

    Spring框架为了更好的标识web应用程序开发当中,bean对象到底归属于哪一层,又提供了@Component的衍生注解:

    注解

    说明

    位置

    @Component

    声明bean的基础注解

    不属于以下三类时,用此注解

    @Controller

    @Component的衍生注解

    标注在控制层类上

    @Service

    @Component的衍生注解

    标注在业务层类上

    @Repository

    @Component的衍生注解

    标注在数据访问层类上(由于与mybatis整合,用的少)

    注意1:声明bean的时候,可以通过注解的value属性指定bean的名字,如果没有指定,默认为类名首字母小写。

    注意2:使用以上四个注解都可以声明bean,但是在springboot集成web开发中,声明控制器bean只能用@Controller。

    注意: 前面声明bean的四大注解,要想生效,还需要被组件扫描注解 @ComponentScan 扫描。该注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包。

    @Autowired注解,默认是按照类型进行自动装配的(去IOC容器中找某个类型的对象,然后完成注入操作)

    举例 在Controller运行的时候,就要到IOC容器当中去查找Service这个类型的对象,而我们的IOC容器中刚好有一个Service这个类型的对象,所以就找到了这个类型的对象完成注入操作。

    @Autowired用法

     @Autowired 进行依赖注入,常见的方式,有如下三种:

    1). 属性注入

    @RestController
    public class UserController {//方式一: 属性注入@Autowiredprivate UserService userService;}
    • 优点:代码简洁、方便快速开发。

    • 缺点:隐藏了类之间的依赖关系、可能会破坏类的封装性。

    2). 构造函数注入

    @RestController
    public class UserController {//方式二: 构造器注入private final UserService userService;@Autowired //如果当前类中只存在一个构造函数, @Autowired可以省略public UserController(UserService userService) {this.userService = userService;}}   
    • 优点:能清晰地看到类的依赖关系、提高了代码的安全性。

    • 缺点:代码繁琐、如果构造参数过多,可能会导致构造函数臃肿。

    • 注意:如果只有一个构造函数,@Autowired注解可以省略。(通常来说,也只有一个构造函数)

    3). setter注入

    /*** 用户信息Controller*/
    @RestController
    public class UserController {//方式三: setter注入private UserService userService;@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}}    
    • 优点:保持了类的封装性,依赖关系更清晰。

    • 缺点:需要额外编写setter方法,增加了代码量。

     在IOC容器中,存在多个相同类型的bean对象 Spring提供了以下几种解决方案:

    • @Primary

    • @Qualifier

    • @Resource

    方案一:使用@Primary注解

    当存在多个相同类型的Bean注入时,加上@Primary注解,来确定默认的实现。

    @Primary
    @Service
    public class UserServiceImpl implements UserService {
    }

    方案二:使用@Qualifier注解

    指定当前要注入的bean对象。 在@Qualifier的value属性中,指定注入的bean的名称。 @Qualifier注解不能单独使用,必须配合@Autowired使用。

    @RestController
    public class UserController {@Qualifier("userServiceImpl")@Autowiredprivate UserService userService;

    方案三:使用@Resource注解

    是按照bean的名称进行注入。通过name属性指定要注入的bean的名称。

    @RestController
    public class UserController {@Resource(name = "userServiceImpl")private UserService userService;

    @Autowird 与 @Resource的区别

    • @Autowired 是spring框架提供的注解,而@Resource是JDK提供的注解

    • @Autowired 默认是按照类型注入,而@Resource是按照名称注入

    http://www.dtcms.com/wzjs/538328.html

    相关文章:

  • 深圳企业专业网站建设抖音代运营合作
  • 电子图书馆网站建设支持付费下载系统的网站模板或建站软件
  • 网站制作复杂吗深圳罗湖网站设计
  • 用手机做兼职的网站专业建设物流行业网站
  • 高端手机网站 制作公司虎丘网站建设
  • 宾利棋牌在哪个网站做的广告营销型网站怎么建设
  • 宁乡县住房和城乡建设局网站制作的网站如何访问
  • 数码网站建设论文廊坊网站快照优化公司
  • 兰州专业做网站的公司有哪些wordpress 建站简单吗
  • 微信公众号个人可以做网站么提供网站建设设计外包
  • 如何做网站开屏三种人不适合做程序员
  • wordpress站点很慢discuz 转wordpress
  • 深圳网站开发哪个公司好福州本地推广
  • 黄冈论坛网站有哪些中国建设银行招聘官方网站
  • 备案通过网站还是打不开工业设计官网
  • 廊坊网站建设 elu网站设计服务费做什么费用
  • 网站建设需要掌握哪些知识个人做网站可以盈利么
  • 网站做点击收费建站之星安装说明
  • 技术支持:淄博网站建设如何写网络营销策划方案
  • 电子商务网站建设asp sql 源码下载wordpress采集 知乎
  • 开一个网站多少钱上海备案证查询网站查询
  • saas网站建设网站语言切换前端可以做么
  • 做网站毕设任务书网站建设的定位是什么
  • 网站建设售后报价多个网站建站
  • 中小企业网站规划方案视频制作方法
  • 黄骅做网站网站开发亿码酷流量
  • 自助建站自己要做网站的来看下给网站添加代码
  • 网站建设 体会事业单位网站建设的账务处理
  • 北京网站建设策划建设公司没有服务器建网站
  • 陆川建设局网站网站怎么增加流量