堆内存中的字符串常量池,如果有,直接拿来用,如果没有则先创建后放入常量池 堆内存中的整数型常量池由-128到127一共256个Integer的引用,没有超出这个范围,则直接拿去,若超出,则新建对象 连接池:连接数据库的connection对象,进程和进程之间建立连接是非常消耗资源的,所以我们建立一部分连接,需要的时候直接取,大大提升效率 对数据库也起保护作用,避免访问量过大导致崩溃 线程池:服务器本身就是支持多线程的,tomcat启动的时候就会创建好N个线程对象Thread,然后将线程对象放到集合中,用户发送请求过来时 就可以直接调用现有的线程来处理请求,效率比较高 大部分web服务器或者应用服务器都是支持多线程的 redis:noSql,非关系型数据库,缓存数据库 先ServletContext对象中添加应用域,也等于是将数据存放到cache中 HttpServlet是专门针对Http协议设计的Servlet 什么是协议,某些人某些组织指定的规范,通过这套规范就可以做到沟通无障碍 HTTP协议就是这样一套协议,由W3C指定的一种超文本传输协议 W3C是万维网联盟组织,超文本是指不是普通文本,可以是流媒体视频音乐图片等等 HTTP协议都支持传输 这种协议在BS之间,两者通过协议得以实现解耦合 这个协议包括了请求协议和相应协议的两套标准 Http请求协议包括四部分B->S 请求行,请求头,空白行,请求体 Http相应协议也包括四部分S->B 状态行,响应头,空白行,响应体 请求行对应状态行,请求头,空白,请求体,响应头,空白行,响应体 请求行对应状态行 Http的请求报文 Http的响应报文如下 状态行:三部分组成,协议版本号,状态码(200成功,404资源丢失,405表示前端后端不一致(get和post错误),500代码出错),状态描述信息(ok,notFound) HTTP/1.1 200 ok 响应头:(响应的内容类型,响应的内容长度,响应的时间) Content-Type: text/html;charset=UTF-8 Content-Length: 139 Date: Sat, 23 Sep 2023 08:18:29 GMT Keep-Alive: timeout=20 Connection: keep-alive 空白行:(用来分割响应头和响应体) 响应体:(这些内容就是响应正文,这些内容被浏览器渲染解释并执行,最终展示出效果) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>Get</h1> </body> </html>
堆内存中的字符串常量池,如果有,直接拿来用,如果没有则先创建后放入常量池
堆内存中的整数型常量池由-128到127一共256个Integer的引用,没有超出这个范围,则直接拿去,若超出,则新建对象
连接池:连接数据库的connection对象,进程和进程之间建立连接是非常消耗资源的,所以我们建立一部分连接,需要的时候直接取,大大提升效率
对数据库也起保护作用,避免访问量过大导致崩溃
线程池:服务器本身就是支持多线程的,tomcat启动的时候就会创建好N个线程对象Thread,然后将线程对象放到集合中,用户发送请求过来时
就可以直接调用现有的线程来处理请求,效率比较高
大部分web服务器或者应用服务器都是支持多线程的
redis:noSql,非关系型数据库,缓存数据库
先ServletContext对象中添加应用域,也等于是将数据存放到cache中
HttpServlet是专门针对Http协议设计的Servlet
什么是协议,某些人某些组织指定的规范,通过这套规范就可以做到沟通无障碍
HTTP协议就是这样一套协议,由W3C指定的一种超文本传输协议
W3C是万维网联盟组织,超文本是指不是普通文本,可以是流媒体视频音乐图片等等
HTTP协议都支持传输
这种协议在BS之间,两者通过协议得以实现解耦合
这个协议包括了请求协议和相应协议的两套标准
Http请求协议包括四部分B->S
请求行,请求头,空白行,请求体
Http相应协议也包括四部分S->B
状态行,响应头,空白行,响应体
请求行对应状态行,请求头,空白,请求体,响应头,空白行,响应体
请求行对应状态行
Http的请求报文
Http的响应报文如下
状态行:三部分组成,协议版本号,状态码(200成功,404资源丢失,405表示前端后端不一致(get和post错误),500代码出错),状态描述信息(ok,notFound)
HTTP/1.1 200 ok
响应头:(响应的内容类型,响应的内容长度,响应的时间)
Content-Type: text/html;charset=UTF-8
Content-Length: 139
Date: Sat, 23 Sep 2023 08:18:29 GMT
Keep-Alive: timeout=20
Connection: keep-alive空白行:(用来分割响应头和响应体)
响应体:(这些内容就是响应正文,这些内容被浏览器渲染解释并执行,最终展示出效果)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Get</h1>
</body>
</html>
package com.powernode.javaweb.servlet; import jakarta.servlet.*; import jakarta.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = "PostServlet", value = "/PostServlet") public class PostServlet extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //响应内容到浏览器 response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Title</title>\n" + "</head>\n" + "<body>\n" + " <h1>Post</h1>\n" + "</body>\n" + "</html>"); } }
package com.powernode.javaweb.servlet; import jakarta.servlet.*; import jakarta.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = "PostServlet", value = "/PostServlet") public class PostServlet extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //响应内容到浏览器 response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Title</title>\n" + "</head>\n" + "<body>\n" + " <h1>Post</h1>\n" + "</body>\n" + "</html>"); } }
package com.powernode.javaweb.servlet; import jakarta.servlet.*; import jakarta.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = "GetServlet", value = "/GetServlet") public class GetServlet extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //响应内容到浏览器 response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Title</title>\n" + "</head>\n" + "<body>\n" + " <h1>Get</h1>\n" + "</body>\n" + "</html>"); } }
package com.powernode.javaweb.servlet; import jakarta.servlet.*; import jakarta.servlet.annotation.*; import java.io.IOException; import java.io.PrintWriter; @WebServlet(name = "GetServlet", value = "/GetServlet") public class GetServlet extends GenericServlet { @Override public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { //响应内容到浏览器 response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); writer.println("<!DOCTYPE html>\n" + "<html lang=\"en\">\n" + "<head>\n" + " <meta charset=\"UTF-8\">\n" + " <title>Title</title>\n" + "</head>\n" + "<body>\n" + " <h1>Get</h1>\n" + "</body>\n" + "</html>"); } }
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0"> <servlet> <servlet-name>GetServlet</servlet-name> <servlet-class>com.powernode.javaweb.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GetServlet</servlet-name> <url-pattern>/GetServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>PostServlet</servlet-name> <servlet-class>com.powernode.javaweb.servlet.PostServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PostServlet</servlet-name> <url-pattern>/PostServlet</url-pattern> </servlet-mapping> </web-app>
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" version="6.0"> <servlet> <servlet-name>GetServlet</servlet-name> <servlet-class>com.powernode.javaweb.servlet.GetServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GetServlet</servlet-name> <url-pattern>/GetServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>PostServlet</servlet-name> <servlet-class>com.powernode.javaweb.servlet.PostServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>PostServlet</servlet-name> <url-pattern>/PostServlet</url-pattern> </servlet-mapping> </web-app>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>get</h1> <form action="/GetServlet" method="get"> username:<input type="text" name="username"><br> password:<input type="password" name="password"><br> <input type="submit" value="submit"> </form> <h1>post</h1> <form action="/PostServlet" method="post"> username:<input type="text" name="username"><br> password:<input type="password" name="password"><br> <input type="submit" value="submit"> </form> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>get</h1> <form action="/GetServlet" method="get"> username:<input type="text" name="username"><br> password:<input type="password" name="password"><br> <input type="submit" value="submit"> </form> <h1>post</h1> <form action="/PostServlet" method="post"> username:<input type="text" name="username"><br> password:<input type="password" name="password"><br> <input type="submit" value="submit"> </form> </body> </html>