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';