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

吴忠网站建设报价电子商务网站建设任务分解

吴忠网站建设报价,电子商务网站建设任务分解,网站设计稿一般尺寸,wordpress 幻灯片 文章目录 <<回到导览Spring boot1. http协议1.1.请求协议1.2.响应协议 2.Tomcat2.1.请求2.1.1.apifox2.1.2.简单参数2.1.3.实体参数2.1.4.数组集合参数2.1.5.日期参数2.1.6.(重点)JSON参数2.1.7.路径参数 2.2.响应2.3.综合练习 3.三层架构3.1.三层拆分3.2.分层解耦3.3.补充 &…

目录

  • <<回到导览
    • Spring boot
      • 1. http协议
        • 1.1.请求协议
        • 1.2.响应协议
      • 2.Tomcat
        • 2.1.请求
          • 2.1.1.apifox
          • 2.1.2.简单参数
          • 2.1.3.实体参数
          • 2.1.4.数组集合参数
          • 2.1.5.日期参数
          • 2.1.6.(重点)JSON参数
          • 2.1.7.路径参数
        • 2.2.响应
        • 2.3.综合练习
      • 3.三层架构
        • 3.1.三层拆分
        • 3.2.分层解耦
        • 3.3.补充

<<回到导览

Spring boot

Spring boot官网

简介:Spring Boot 基于Spring,简化了配置,降低的入门难度,可以帮助我们非常快速的构建应用程序、简化开发、提高效率

需求:使用 SpringBoot 开发一个web应用,浏览器发起请求 /hello后,给浏览器返回字符串 “Hello World ~”

  1. 创建spring boot项目(保证网络间接正常)

    在这里插入图片描述

    在这里插入图片描述

  2. 删除一些暂时不用的文件

    在这里插入图片描述

  3. 在包下创建文件

    在这里插入图片描述

  4. 编写这个文件

    // 请求处理类
    @RestController
    public class HelloController {// 表名这个请求处理类,处理的是“/hello”@RequestMapping("/hello")public String Hello() {System.out.println("Hello World");return "Hello World!!!";}
    }
    

    运行启动类(SpringDemoApplication)

    在这里插入图片描述

  5. 访问服务

    访问http://localhost:8080/hello或者http://127.0.0.1:8080/hello

    在这里插入图片描述

每访问一次这个服务,控制台还会打印一次Hello World

1. http协议

概念:Hyper Text Transfer Protocol, 超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

特点:

  1. 基于TCP协议:面向连接,安全
  2. 基于请求-响应模型的:一次请求对应一次响应
  3. HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。
    • 缺点:多次请求间不能共享数据。
    • 优点:速度快
1.1.请求协议
请求方式请求参数位置请求大小
GET在请求行(没有请求体)有大小限制
POST在请求体没有大小限制
  • GET请求

    在这里插入图片描述

  • POST请求

    在这里插入图片描述

1.2.响应协议

响应协议和POST请求有些相似,分为响应行、响应头、响应体,响应数据放在响应体里面

在这里插入图片描述

状态码说明
1xx临时状态码,表示请求已经接收,应该继续请求或者如果它已经完成则忽略它。
2xx成功接收,处理已完成。
3xx重定向到其他地方;让客户端再发起一次请求以完成整个处理。
4xx客户端错误,责任在客户端。(如:请求了不存在的资源、客户端未被授权、禁止访问等。)
5xx服务器错误,责任在服务端。(如:程序抛出异常等)。
常用状态码解释
200处理成功
302/304location重定向/隐式重定向
400客户端语法错误
403服务器拒绝提供服务(没有权限)
404请求资源不存在(url错误)
405请求方式有误
500服务器发生不可预期的错误
503服务器尚未准备好处理请求

2.Tomcat

Web服务器是一个软件程序,对HTTP协议的操作进行封装,简化web服务器开发

作用:部署web项目,对外提供网上信息浏览服务

Tomcat:一个轻量级的web服务器,支持servlet、jsp等少量avaEE规范。也被称为web容器、servlet容器。

起步依赖:利用maven中依赖传递的特性,把开发某一个功能常见的依赖整合在一起(如web)

在这里插入图片描述

在spring boot web开发环境中,已经集成了Tomcat

在这里插入图片描述

2.1.请求
2.1.1.apifox

apifox官网:https://app.apifox.com/

apifox使用教程:https://www.bilibili.com/video/BV1Jc41147xC

在使用apifox之前要安装插件Apifox Browser Extension

在这里插入图片描述

尝试用apifox测试接口

在这里插入图片描述

2.1.2.简单参数

简单参数:参数名和变量名相同,定义形参即可接收参数

@RestController
public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(String name, int age) {System.out.println(name + ":" + age);return "OK";}
}

在这里插入图片描述

如果方法形参名称与请求参数名称不匹配,不能接收值,但是不会报错

这时,可以使用@RequestParam完成映射,但是该注解的required属性默认是true,代表请求参数必须传递

@RestController
public class RequestController {@RequestMapping("/simpleParam")public String simpleParam(@RequestParam(name = "name") String username, int age) {System.out.println(username + ":" + age);return "OK";}
}
2.1.3.实体参数

实体参数:多个参数名和形参变量名相同,定义POJO接收即可

@RestController
public class RequestController {@RequestMapping("/simplePojo")public String simpleParam(User user) {System.out.println(user);return "OK";}
}
public class User{private String name;private int age;// Getter、Setter、toString
}

在这里插入图片描述

  • 示例

    为上面用户添加地址信息(包含省份和城市)

    @RestController
    public class RequestController {@RequestMapping("/complexPojo")public String complexPojo(User user) {System.out.println(user);return "OK";}
    }
    
    public class User{private String name;private int age;private Address address;// Getter、Setter、toString
    }
    
    public class Address {private String province;private String city;// Getter、Setter、toString
    }
    

    在这里插入图片描述

2.1.4.数组集合参数
  • 数组参数:请求参数名与形参数组名称相同,定义数组类型形参即可接收参数

    @RestController
    public class RequestController {@RequestMapping("/arrayParam")public String arrayParam(String[] hobby) {System.out.println(Arrays.toString(hobby));return "OK";}
    }
    

    在这里插入图片描述

  • 集合参数:请求参数名与形参集合名称相同,通过@RequestParam绑定参数关系

    @RestController
    public class RequestController {@RequestMapping("/listParam")public String listParam(@RequestParam List<String> hobby) {System.out.println(hobby);return "OK";}
    }
    

    在这里插入图片描述

2.1.5.日期参数

日期参数:使用@DateTimeFormat注解完成日期参数格式的转换

@RestController
public class RequestController {@RequestMapping("/dateParam")public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")LocalDateTime updateTime) {System.out.println(updateTime);return "OK";}
}

在这里插入图片描述

2.1.6.(重点)JSON参数

JSON参数:JSON数据键名和形参属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

在上面的请求中,都是用的GET请求方式,请求参数在请求行,但利用json字符串传参要用POST请求方式,请求参数在请求体

  • 例如:

    {"name":"Tom","age":18,"address":{"province":"四川","city":"成都"}
    }
    
  • json参数传递

    @RestController
    public class RequestController {@RequestMapping("/jsonParam")public String jsonParam(@RequestBody User user) {System.out.println(user);return "OK";}
    }
    

    在这里插入图片描述

2.1.7.路径参数

路径参数:通过URL直接传递参数,使用{}来标识该路径参数,需要使用@RequestMapping获取路径参数

@RestController
public class RequestController {@RequestMapping("/pathParam/{id}")public String pathParam(@PathVariable Integer id) {System.out.println(id);return "OK";}
}

在这里插入图片描述

  • 传递多个路径参数

    @RestController
    public class RequestController {@RequestMapping("/pathParam/{id}/{uid}")public String pathParam(@PathVariable Integer id, @PathVariable Integer uid) {System.out.println(id + "," + uid);return "OK";}
    }
    

    在这里插入图片描述

2.2.响应

@RestController注解包含了@ResponseBody注解@Controller注解

  • 统一响应结果:

    1. 响应码
    2. 提示信息
    3. 返回的数据
    // Result
    public class Result {private Integer code ;//1 成功 , 0 失败private String msg; //提示信息private Object data; //数据 datapublic Result() {}public Result(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public static Result success(Object data){return new Result(1, "success", data);}public static Result success(){return new Result(1, "success", null);}public static Result error(String msg){return new Result(0, msg, null);}@Overridepublic String toString() {return "Result{" +"code=" + code +", msg='" + msg + '\'' +", data=" + data +'}';}
    }
    
  • 改写请求

    @RequestMapping("/simpleParam")
    public Result simpleParam(String name, int age) {System.out.println(name + ":" + age);return Result.success("Hello World");
    }
    

    在这里插入图片描述

2.3.综合练习

获取员工数据,返回统一响应结果,在页面中渲染(相关资料可以在黑马官方公众号下载)

  1. 在pom.xml文件中引入dom4j的依赖,用于解析XML文件

    <!-- 解析xml -->
    <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.3</version>
    </dependency>
    
  2. 引入资料中提供的解析XML的工具类XMLParserUtils、对应的实体类Emp、XML文件 emp.xml

  3. 引入资料中提供的静态页面文件,放在resources下的static目录下

    在这里插入图片描述

  4. 编写Controller程序,处理请求,响应数据

    @RestController
    public class EmpController {@RequestMapping("/listEmp")public Result list() {// 1. 加载解析xmlString file = "D:\\桌面\\Java\\Java(下)\\spring_demo\\src\\main\\resources\\emp.xml";List<Emp> empList = XmlParserUtils.parse(file, Emp.class);// 2. 对数据进行转换处理empList.forEach(emp -> {String gender = emp.getGender();if("1".equals(gender)) {emp.setGender("男");}else if("2".equals(gender)) {emp.setGender("女");}String job = emp.getJob();if("1".equals(job)) {emp.setJob("教师");}else if("2".equals(job)) {emp.setGender("学生");}});// 3. 响应数据return Result.success(empList);}
    }
    
  • 尝试发送请求

    在这里插入图片描述

  • 通过浏览器访问前端页面

    在这里插入图片描述

3.三层架构

在上一节的综合练习中,代码的不同的业务逻辑写在了一起,导致代码复用性差,难以维护

在这里插入图片描述

为此设计了三层架构来优化

功能分类对应层说明
数据访问controller(控制层)接收前端发送的请求,对请求进行处理,并响应数据
逻辑处理service(业务逻辑层)处理具体的业务逻辑
接收请求、响应数据dao(数据访问层,Data Access Object)数据访问操作(包括增、删、改、查)

controller => service => dao (=>表示调用关系)

3.1.三层拆分

我们将上面三部分的代码分别写到对应层,每个对应层有一个接口(要做的事情),每个接口可以有若干个实现方案(实现类)

在这里插入图片描述

  1. 数据访问层(dao)

    // 接口
    public interface Empdao {// 获取员工列表public List<Emp> empList();
    }
    
    // 实现类
    public class EmpDaoA implements Empdao {@Overridepublic List<Emp> empList() {// 1. 加载解析xmlString file = "D:\\桌面\\Java\\Java(下)\\spring_demo\\src\\main\\resources\\emp.xml";List<Emp> empList = XmlParserUtils.parse(file, Emp.class);return empList;}
    }
    
  2. 业务逻辑层(service)

    // 接口
    public interface EmpService {public List<Emp> empList();
    }
    
    // 实现类
    public class EmpServiceA implements EmpService {private Empdao empdao = new EmpDaoA();@Overridepublic List<Emp> empList() {// 调用dao层接口List<Emp> empList = empdao.empList();// 2. 对数据进行转换处理empList.forEach(emp -> {String gender = emp.getGender();if("1".equals(gender)) {emp.setGender("男");}else if("2".equals(gender)) {emp.setGender("女");}String job = emp.getJob();if("1".equals(job)) {emp.setJob("教师");}else if("2".equals(job)) {emp.setGender("学生");}});return empList;}
    }
    
  3. 控制层(controller)

    @RestController
    public class EmpController {private EmpService empService = new EmpServiceA();@RequestMapping("/listEmp")public Result list() {// 3. 响应数据return Result.success(empService.empList());}
    }
    
3.2.分层解耦
  • 内聚:软件中各个功能模块内部的功能联系。
  • 耦合:衡量软件中各个层/模块之间的依赖、关联的程度。
  • 软件设计原则:高内聚低耦合

在上节的三层拆分中,三个层级耦合性比较高,我们要降低耦合性

控制反转(IOC):对象的创建控制器由程序自身转移到外部(容器),通过@Component注解实现

依赖注入(DI):容器为应用程序提供运行时所依赖的资源,通过@Autowired注解实现

  1. Service层、Dao层的实现类,交给IOC容器管理(控制反转)

    // Service层
    @Component
    public class EmpServiceA implements EmpService {private Empdao empdao;// ...
    }
    
    // Dao层
    @Component
    public class EmpDaoA implements Empdao {// ...
    }
    
  2. 为Controller层、Service层注入运行时依赖的对象(依赖注入)

    @RestController
    public class EmpController {@Autowiredprivate EmpService empService;// ...
    }
    
    // Service层
    @Component
    public class EmpServiceA implements EmpService {@Autowired  // 程序在运行时,IOC容器会提供该类型的bean对象,并赋值给该变量private Empdao empdao;// ...
    }
    
3.3.补充
注解声明位置
@Componentbean的基础注解不属于以下三类时,用此注解(eg:工具类)
@Controller@Component的衍生注解标注在控制器类上(@RestController注解已包括,一般不写)
@Service@Component的衍生注解标注在业务逻辑类上
@Repository@Component的衍生注解标注在数据访问类上(由于与mybatis整合,用的少)

了解:

  • 声明bean的时候,可以通过value属性指定bean的名字,如果没有指定,默认为类名首字母小写。
  • 前面声明bean的四大注解,要想生效,还需要被组件扫描注解@ComponentScan扫描。
  • @ComponentScan注解虽然没有显式配置,但是实际上已经包含在了启动类声明注解 @SpringBootApplication 中,默认扫描的范围是启动类所在包及其子包

文章转载自:

http://gjRuERzw.xrxzm.cn
http://8McCmX3G.xrxzm.cn
http://kTs3N622.xrxzm.cn
http://QpNl3PTI.xrxzm.cn
http://Px2CzstC.xrxzm.cn
http://i1EOX6xU.xrxzm.cn
http://zkmr9exi.xrxzm.cn
http://iGa5ZomT.xrxzm.cn
http://fAELY4XE.xrxzm.cn
http://NheVbJ1L.xrxzm.cn
http://l0y7VKQo.xrxzm.cn
http://LbC8LO9V.xrxzm.cn
http://eCkxoYPC.xrxzm.cn
http://oJPAeDEX.xrxzm.cn
http://sWXT013x.xrxzm.cn
http://DraFqmBb.xrxzm.cn
http://azW4lgpx.xrxzm.cn
http://YpYOuUGG.xrxzm.cn
http://3l4vgKih.xrxzm.cn
http://Z8x4Y2WF.xrxzm.cn
http://PZkuyAbN.xrxzm.cn
http://0EO64SAB.xrxzm.cn
http://vQ7Z6UbY.xrxzm.cn
http://8uyHw5n7.xrxzm.cn
http://fMVP522g.xrxzm.cn
http://PNR0EON0.xrxzm.cn
http://6jDd3U3F.xrxzm.cn
http://Mftu4xKR.xrxzm.cn
http://ZEZ5Y3G4.xrxzm.cn
http://hCJSsqbJ.xrxzm.cn
http://www.dtcms.com/wzjs/687288.html

相关文章:

  • 网站的js效果代码永兴县网站建设服务商
  • 麻涌企业网站建设wordpress popuppress
  • 服装店网页设计网站模板二七区网站建设
  • 品牌网站建设源码上海营业执照注册
  • iis如何建立网站wordpress app 读者
  • 自己建个网站需要多少钱注册网站刀具与钢材经营范围
  • 青岛网站建设网址网站建设 上海网
  • 用dw做的网站怎么发布到网上酷家乐在线设计官网
  • 网站建设开发合同范本域名怎样连接到网站
  • 游戏源码网站免费国家公示企业信息查询
  • 网站建设中 图片公司网站建设预算
  • 网站后台设计教程视频做电信网站运营
  • 网站运营条件昆明网站设计制造
  • 如何建立公司网站是什么怎么做网页直播
  • 如何做logo模板下载网站网站备案登记信息
  • 山东省建设厅网站特种作业网站运营管理报告总结
  • 专业app网站建设网站开发立项申请表
  • 阿里网站域名要购卖吗深圳自适应网站建设
  • 做尽调需要用到的网站做网站app要注册哪类商标
  • 沈阳网站建设设计报价wordpress搜索不了中文linux
  • 柳州公积金网站极简办公ppt模板下载
  • 怎么搞免费的网站物理网络设计
  • 嘉兴网站制作网页长沙销售公司 网站
  • 网站系统设计方案销客多分销小程序价格
  • 广州康体设备网站建设建设工程网站教程
  • 网站建设首页步骤.net网站开发实训
  • 专门做酒店网站西安做网站陕西必达
  • 怎样保存网站资料做证据广州公司关键词网络推广
  • 牛天下网站做的怎么样网站开发项目教程
  • 南通教育平台网站建设微信开放平台网站应用