Java Web框架

一、HTTP

        HTTP是一种“超文本传输协议”,英文全称“Hypertext Transfer Protocol”。

HTTP的多种应用及特性

1、无连接性

        HTTP默认是无连接的,即每个请求都是一个独立的事务。当服务器完成对客户端请求的响应后,会立即关闭连接,不会保持长连接。这种无连接性可以节省服务器资源,但也会增加每个请求的延迟,因为需要重新建立连接。

2、无状态性

        HTTP协议是无状态的,即服务器不会保存客户端的状态信息。每个请求都是独立的,服务器不会记住之前的请求。为了处理这个问题,引入了Cookie和Session机制,通过在客户端和服务器之间传递标识符来跟踪会话状态。

3、请求-响应模型

        HTTP通过请求-响应模型进行通信。客户端发送一个HTTP请求,服务器接收并处理请求,并返回一个HTTP响应。响应包含响应状态码、响应头和响应体。

4、支持多种请求方法

        HTTP定义了多种请求方法,最常见的是GET和POST。其他常见的方法有PUT、DELETE、HEAD等,用于不同的操作和目的。

⚪GET通常用来获取资源。

⚪POST通常用于发送请求信息给服务器。

⚪PUT是幂等的POST,无论你发送多少次相同的 PUT 请求,只要请求的主体内容相同,服务器上的资源状态应该是一致的。例如多次提交相同的博客文章 PUT 请求,最终只会创建一个文章资源,而POST请求发送给服务器就会创建多个相同的文章资源。

⚪HEAD也可以用来接收资源,其不接收响应,通常用来探测资源、优化性能以及做安全性的校验。

⚪DELETE通常用于删除服务器的资源。

5、缓存机制

        HTTP协议存在着缓存机制,强缓存协商缓存。其优势是直接从本地缓存获取资源,而不需要每次都向服务器发送请求减少了网络延迟和服务器负载从而减少网络延迟以及负载。当资源被强缓存时,客户端在缓存有效期内直接从本地缓存中获取资源,不会向服务器发送请求。当强缓存不存在时,客户端就会在请求头中添加协商缓存的信息(If-Modified-Since和If-None-Match),向服务器发送请求。服务器根据请求头中的信息判断资源是否有更新。如果没有更新,返回 304 状态码,客户端继续使用本地缓存;如果有更新,返回新的资源和 200 OK 状态码,客户端更新本地缓存。

HTTPS和HTTP协议的区别在哪?

1、安全性

⚪HTTPS经过了SSL/TLS加密,以确保数据在传输过程中不被窃取或者篡改。

⚪HTTP的数据以明文的形式传输,容易被截获和窥视。

2、端口号

⚪HTTPS的默认端口号为443。

⚪HTTP的默认端口号为80。

3、效率

⚪HTTPS因为进行了加密,还需要进行解密等过程,会增加一定的连接时间。同时也会消耗服务器更多的资源。

⚪HTTP没有加密解密的过程,因此执行效率相对较高。

HTTP的组成

一个HTTP请求由三部分组成:请求行、请求头以及请求体。

⚪起始行:由请求方法、URL以及协议版本组成。

⚪HEAD:通常包含请求的其它信息,如User-Agent(包的来源)-判断是手机还是哪种浏览器等的请求、Content-Type(内容类型)-判断是Json格式还是键值对格式等、Authorization(验证身份)-服务器可以根据 “Authorization” 头中的信息来验证请求者的身份,决定是否允许其访问特定的资源。

⚪BODY:用于存放需要在请求里传输的数据。GET请求通常请求体为空。注意(GET参数通常在URL后面,POST传参既可以放在请求体中也可以放在URL后面)。

        一般抓包的方式有很多种,可以使用F12直接查看请求和响应,可以使用很多种第三方软件进行抓包,如Fiddler、Charles等工具。一般这种工具除了做抓包,其还有其他功能,如做“弱网测试”、“重放造数据”等。不过需要注意的跟之前提到的一样,抓取HTTPS的包需要在第三方软件安装证书才可以进行抓取HTTPS的包。

        Fiddler是一款开源且免费使用简单的第三方工具且支持安装插件,可拓展性和可视化更强大,不过只能在Windows上使用。

Fiddler下载官网: Fiddler官方路径下载

        Charlse和Fiddler功能类似,不过Charles做弱网测试功能会更为强大,可以模拟网络波动情况以及设置丢包率,并且可以在Mac和Windows系统上使用,不过只能每天免费使用一个小时,然后需要收费。

Charles下载官网:Charles官方路径下载

HTTP的应用

        HTTP请求和响应广泛应用在Web开发之中,前端给后端发送一个请求后,后端就响应这个请求,执行相应的一些操作然后再把处理好的数据传回给前端。这样更好的使得前后端进行了分离,能更为高效的管理和维护项目。

常用的模拟发送HTTP请求的第三方工具有JMeter、Postman、APIFox等。

感兴趣可以点击我的个人主页,后续有关于JMeter等工具使用的笔记更新。

二、Servlet

        Servlet全称Java Servlet,是Java编写的服务器端程序,其主要功能在于交互式的浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,我们将Servlet理解为后者。

Servlet的工作模式

①客户端发送请求至服务器

②服务器启动并调用Servlet,Servlet根据客户端请求生成内容并将其传给服务器

③服务器将响应返回客户端

Servlet的API

Servlet的实现

(1)创建一个类实现Servlet接口,重写方法。或继承HttpServlet亦可。

public class LoginServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    //初始化方法
    }

    @Override
    public ServletConfig getServletConfig() {
    return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse
    servletResponse) throws ServletException, IOException {
    //处理get/post请求的方法
    }

    @Override
    public String getServletInfo() {
    return null;
    }

    @Override
    public void destroy() {
    //销毁的方法
    }
}

(2)在web.xml文档中配置映射关系。

<servlet>
    <servlet-name>自定义名称</servlet-name>
    <servlet-class>处理请求的类的完整路径</servlet-class>
</servlet>

<servlet-mapping><!-- mapping 表示映射 -->
    <servlet-name>自定义名称</servlet-name>
    <url-pattern>请求名</url-pattern>
</servlet-mapping>

标签的执行顺序:
        请求过来以后->web.xml->servlet-mapping标签中的url-pattern标签中的内容和请求名
进行匹配->匹配成功后找对应的servlet-mapping标签中的servlet-name->去servlet标签中找和上一个servlet-name相同的name值->去找servlet标签中的servlet-class中处理类的完整路径。


(3)启动tomcat,在浏览器输入http://localhost:8080/工程名/访问服务器的路径。

Servlet工作原理

(1) Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。


(2)用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个
ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如
TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。


(3)ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。
ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。


(4)对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。

Servlet的生命周期

        当客户端首次发送第一次请求后,由容器(web服务器(tomcat))去解析请求, 根据请求找到对应的servlet,判断该类的对象是否存在,不存在则创建servlet实例,调取init()方法 进行初始化操作,初始化完成后调取service()方法,由service()判断客户端的请求方式,如果是get,则执行doGet(),如果是post则执行doPost().处理方法完成后,作出相应结果给客户端.单次请求处理完毕。当用户发送第二次以后的请求时,会判断对象是否存在,但是不再执行init(),而直接执行service方法,调取
doGet()/doPost()方法。当服务器关闭时调取destroy()方法进行销毁。


四个过程:
(1)实例化 --先创建servlet实例
(2)初始化 --init()
(3)处理请求 ---service()
(4)服务终止 --destory()

三、JSP

        JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。JSP本质上也是一个servlet,就是在HTML页面中嵌入了java代码。

*.html 静态页面(包含固定的页面内容)
*.jsp 动态页面(页面数据可以动态更新,支持嵌套java代码和html代码) 

JSP工作原理

        当浏览器访问地址,服务器发现后缀为.jsp,它会根据路径找到.jsp文件,会将.jsp翻译成_jsp.java文件,对这个java文件进行编译,产生一个_jsp.class文件,将class文件加载运行。将JSP翻译成java文件,它是将JSP中的所有的HTML代码通过流进行输出,也就是说最终翻译成class,被虚拟机加载,它本质是servlet,它就会往回响应,响应回去就是把JSP中的HTML代码以流的方式写回浏览器。所以在JSP中展示出了HTML代码。

JSP的内置对象

JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception。

requestrequest 对象是 javax.servlet.httpServletRequest类型的对象。 该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
responseresponse 代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。所属类型:HttpServletResponse。
sessionsession 对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
application

application 对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”ServletContext。

区别:
request:单次请求
session:浏览器访问期间(会话期间)
application:服务器启动期间,所存的数据可以跨浏览器

outout 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out 对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
pageContextpageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
configconfig 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
pagepage 对象代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
exceptionexception 对象的作用是显示异常信息,只有在包含 isErrorPage="true" 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

JSP的作用域:
pageContext -> request -> session -> application
当前页面;单次请求有效;当前会话期间;服务器运行期间有效。

Filter和Listener

        Filter实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理,通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。

重写接口中的方法

public void destroy() { 
    //销毁的方法
}

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
    //过滤方法 主要是对request和response进行一些处理,然后交给下一个过滤器或Servlet处理
    chain.doFilter(req, resp);
}

public void init(FilterConfig config) throws ServletException {
    /*初始化方法 接收一个FilterConfig类型的参数 该参数是对Filter的一些配置*/
}

Filter配置

<filter>
    <filter-name>过滤器名称</filter-name>
    <filter-class>过滤器所在的路径</filter-class>
</filter>

<filter-mapping>
    <filter-name>过滤器名称</filter-name>
    <url-pattern>需要过滤的资源</url-pattern>
</filter-mapping>

四、Ajax

        Ajax全称,Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。Ajax是一种使用现有标准的新方法。在不重新加载整个页面的情况下与服务器交换数据并更新部分网页的艺术。

Ajax工作原理

        Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎自己来做,,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

我们来看看普通交互方式和异步交互的区别。

浏览器的普通交互方式:

浏览器的异步交互方式:

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值