JavaWeb(查缺补漏)

JavaWeb37

JavaWeb38

Vue 就是对 HTML 的一个封装,开发 Vue 仍然使用 HTML + CSS + JS 的套路

将每一个 HTML 文件都封装成 Vue 文件,CSS + JS 直接嵌入到 Vue 中

路由:实现页面的跳转,给每一个页面都需要配置一个路由,浏览器通过访问该路由实现页面的跳转

在这里插入图片描述

数据双向绑定:将数据(JSON)和视图(HTML)进行绑定

数据和视图的双向绑定,视图修改对应的数据也会变化,修改数据对应的视图也会跟着变

常用的标签

  • v-if
    • 控制标签是否显示
  • v-show
    • 控制标签是否显示
  • v-for
    • 循环遍历数据,生成对应的视图

Vue 通过 axios 和后端进行数据的交互

通过 axios 调用后端接口来获取对应的数据

JavaWeb39

使用 Java 语言开发一套 Web 的代码,然后部署到服务器的Web应用服务上,客户端就可以直接访问服务

服务器—>安装 WEB 应用服务(Tomcat)—>JavaWeb项目部署到 WEB 应用服务上

Tomcat是主流常用的Web应用服务

知道Tomcat底层原理,可以手写一个Web应用服务

Tomcat的底层原理就是Socket和IO流

手写一个Web应用服务的思路:

  • 启动Socket服务,循环接收客户端请求
  • 接收到请求之后,将流中的数据取出拼接成字符串进行处理
  • 判断请求的资源是否存在,如果存在,将资源通过 O 流(输出流)进行输出
  • 如果不存在,返回 404 异常
package tomcat;

public class Test {
    public static void main(String[] args) {
        System.out.println("Server startup successfully");
        new MyHttpServer().receiving();
    }
}
package tomcat;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

// 接收请求
public class MyHttpServer {
    // 端口
    private int port = 8080;

    // 接收请求的方法
    public void receiving(){
        // 创建服务对象
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(port,1,InetAddress.getByName("127.0.0.1"));
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 接收请求
        while(true){
            Socket socket = null;
            InputStream inputStream = null;
            OutputStream outputStream = null;

            try {
                // 获取到连接
                socket = serverSocket.accept();
                inputStream = socket.getInputStream();

                // 解析请求
                MyHttpRequest myHttpRequest = new MyHttpRequest(inputStream);
                myHttpRequest.parse();

                // 响应请求
                outputStream = socket.getOutputStream();
                MyHttpResponse myHttpResponse = new MyHttpResponse(outputStream);
                myHttpResponse.sendResource(myHttpRequest.getUri());



            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }
}
package tomcat;

import java.io.IOException;
import java.io.InputStream;

// 解析请求
public class MyHttpRequest {

    private InputStream inputStream;
    private String uri;

    public String getUri() {
        return uri;
    }

    public MyHttpRequest() {
    }

    public MyHttpRequest(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public void parse(){
        StringBuffer stringBuffer = new StringBuffer();
        byte[] buffer = new byte[1024];
        try {
            inputStream.read(buffer);
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (byte b : buffer) {
            stringBuffer.append((char) b);
        }

        // 拿到请求的资源名字
        parseUri(stringBuffer.toString());
    }

    // 字符串截取
    public void parseUri(String str){
        int index1,index2;
        index1 = str.indexOf(' ');// 找到字符串中第一个空格的下标
        index2 = str.indexOf(' ',index1+1);// 从第一个空格的下标往后开始再寻找下一个空格的下标
        uri = str.substring(index1+1,index2);
    }
}
package tomcat;

import java.io.*;

// 响应请求
public class MyHttpResponse {
    private OutputStream outputStream;

    public MyHttpResponse() {
    }

    public MyHttpResponse(OutputStream outputStream) {
        this.outputStream = outputStream;
    }

    public void sendResource(String uri) {
        String url = System.getProperty("user.dir") + File.separator + "WebContent";
        File file = new File(url, uri);
        if (file.exists()) {
            try {
                FileInputStream fileInputStream = new FileInputStream(file);
                byte[] bytes = new byte[(int)file.length()];
                fileInputStream.read(bytes);

                String result = getMessage("200",new String(bytes));
                outputStream.write(result.getBytes());

            } catch (Exception e) {
                e.printStackTrace();
            }

        } else {
            String error = getMessage("404","404 File Not Found!");
            try {
                outputStream.write(error.getBytes());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    // 必须按照特定的格式返回才能被浏览器解析
    public String getMessage(String code,String message){
        return "HTTP/1.1 " + code + "\r\n" +
                "Content-Type: text/html\r\n" +
                "Content-Length: " + message.length() + "\r\n" + "\r\n" +
                message;

    }


}

JavaWeb40

Java Web 就是通过 Servlet 来完成与客户端的交互(请求和响应)

Servlet 是一个接口,javax 包下,创建一个类,实现该接口,这个类就具备了接收客户端请求,并且给客户端做出响应的功能。Servlet的实现机制和我们上面手写的Web应用服务的代码思路差不多(Socket和IO流)。只不过Servlet已经写好帮我们封装好了。

JSP 本质上也是一个 Servlet,其实是一个前端开发模板,开发者可以在 JSP 中进行前端代码的开发,启动项目之后,JSP 自动转换成一个 Servlet,Servlet 会自动读取 JSP 中的前端代码,自动生成 write 语句,将这些前端代码依次输出到浏览器中。

JSP的底层原理:jsp文件写完后,会生成对应的Servlet的代码的文件,通过Servlet能够真正地把jsp文件中的内容返回给浏览器客户端展示

Servlet 的结构

Servlet 接口 -》GenericServlet 类 -》HttpServlet 类

开发者一般只需要创建类,并且继承 HttpServlet 即可

直接实现 Servlet 接口的弊端

  • 5 个方法,4 个没用
  • 原生的请求和响应对象类型不够,需要手动进行类型转换

单体应用的话:前端基本很少用JSP,用Thymeleaf的多

前后端分离应用的话:前端基本是用Vue

通过 EL 表达式来简化 JSP (取数据时) 的代码

JavaWeb41

EL 表达式只能取出 request 中存入的值

先存入 request,才能通过 EL 表达式进行取值

JSP中EL表达式的语法:${user.id} 相当于 user.getId()。所以这个User类必须拥有getId()的这个方法

JSTL:JSP标准标签库。JSP提供的一组标签,利用这些标签可以快速进行代码开发,优化程序

SpringMVC是基于Servlet的,所以基础很重要!

关系型数据库(传统):MySQL、Oracle、SQLServer

非关系型数据库(NoSQL):Redis、MongoDB

分布式搜索(大数据):ES(ElasticSearch)

通过可视化数据库管理工具来操作数据库:navicat、datagrip、sqlyog

解决MySQL数据库时区的问题:

set global time_zone='+8:00';

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值