欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaWeb入门笔记

程序员文章站 2022-07-05 10:17:06
Java web笔记 一、HTTP协议 HTTP(超文本传输协议),它是一种主流B/S架构中应用的通信协议。具有以下特点: 1、无状态 服务端不会记录客户端每次提交的请求,服务器一旦相应客户端之后,就会结束本次的通信过程。客户端下一次的请求是一个新的 连接,和上一次通信没有任何关系。 2、简单灵活 ......

Java web笔记

一、HTTP协议

HTTP(超文本传输协议),它是一种主流B/S架构中应用的通信协议。具有以下特点:

1、无状态

服务端不会记录客户端每次提交的请求,服务器一旦相应客户端之后,就会结束本次的通信过程。客户端下一次的请求是一个新的 连接,和上一次通信没有任何关系。

2、简单灵活

HTTP是基于请求(request)和响应(response)的模型

3、支持客户端与服务端

支持主流的B/S架构的通信以及C/S架构的通信。

注意:C/S架构可选的协议有多种,例如:TCP/IP,UDP,HTTP

​ 而B/S架构通常只支持HTTP协议

二、服务器

1、概念

服务器通常由硬件和软件部分构成,统一对用户提供多种不同的服务。

1、硬件:包括响应的CPU、内存、磁盘等等

2、软件:包括操作系统、运行环境、服务器软件、数据库等等

2、web服务器

web服务器是提供服务端程序运行的一个环境,它本身也是一个软件。

例如:将我们编写HTML文件放入到web服务器中,那么外界就可以通过浏览器访问我们的html页面

常见的web服务器有Apache,Tomcat、Jetty、Nginx等等。

而Tomcat、Jetty这些web服务器更准确的说是一个Servlet容器。

三、JavaWeb项目结构

项目根目录,例如:myweb、ch01     通常存放静态资源文件(如:html等等)
  WEB-INF   这个目录是当前项目私有的一个文件夹,只能提供给项目内部访问,对于客户端来说是访问不到了,通常这个目录下存放的是Java源代码、编译后的字节码文件以及Servlet的核心配置文件web.xml
    src 存放java源代码的目录
    classes 存放编译后的字节码文件
    lib lib目录存放当前项目所需要的jar文件
    JSP 用于存放JSP动态页面
    web.xml 项目的配置文件,用于配置Servlet的请求映射、过滤器、监听器等等信息。每一个web项目都对应一个web.xml配置文件
  META-INF   配置应用程序、扩展程序、类加载服务等等

四、Servlet基础

1、什么是Servlet

Servlet是JavaEE中标准组件,专门用于处理客户端提交的HTTP请求。并且它必须依赖于Servlet容器才可以运行(Tomcat就是一个标准的Servlet容器),Servlet容器给Servlet提供一个运行环境,所以Servlet组件必须要这个环境中可以运行,而不能脱离这个环境而单独执行。因为Servlet的实例是由容器创建和销毁的,并不是通过我们平常使用的new关键创建出来。

2、开发一个Servlet的步骤

1.编写一个类,然后继承HttpServlet这个父类

2.重写父类的service方法,这个就是专门处理客户端请求的方法,这个方法有两个参数(HttpServletRequest,HttpServletResponse),同时这个方法会抛出两个异常(ServletException,IOException)

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

//要让当前的类是一个Servlet,必须继承HttpServlet
public class HelloServlet extends HttpServlet{

     //重写父类的service方法,处理客户端请求,
     //这个方法私有servlet容器去调用,
     //并且request和response参数都是由servlet容器传递进来的
     public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         System.out.println("Hello Servlet");
         //响应一些信息回馈给客户端浏览器
         //1.设置要响应的类型,这里就响应简单的html文本类型
         //通过response参数来进行设置,如:text/html,text/plain
         response.setContentType("text/html;charset=utf-8");
         //2.获取输出流并写回html数据
         response.getWriter().println("<h1>Hello Servlet</h1>");
     }
}

 

 

3.编译Servlet,需要依赖servlet-api.jar文件

4.编写web.xml,为servlet配置请求映射的URL

<?xml version="1.0" encoding="utf-8"?>
<!-- 配置根节点 -->
<web-app>
   <!-- 配置servlet类 -->
   <servlet>
         <!-- 指定servlet的别名 -->
         <servlet-name>hello</servlet-name>
         <!-- 指定Servlet的完整类名-->
         <servlet-class>HelloServlet</servlet-class>
   </servlet>
   <!-- 配置请求映射-->
   <servlet-mapping>
          <!-- 这里的servlet-name和上面的servlet-name要一一对应 -->
         <servlet-name>hello</servlet-name>
         <!-- 配置请求映射的url,必须以“/”开头-->
         <url-pattern>/test</url-pattern>
   </servlet-mapping>
</web-app>

 

5.将项目部署到Tomcat的webapps目录中

3、servlet处理请求的流程

1.浏览器发起http的请求,这个请求首先会被servlet容器(Tomcat)截获,然后容器会根据web.xml文件中配置servlet的<url-pattern>来找到相应的<servlet-name>这个别名,然后再根据这个别名找到具体Servlet的类,然后容器会创建这个Servlet类的实例并调用Servlet方法来处理这个请求。

请求网页地址

4、Servlet的生命周期

所谓的生命周期,就是从Servlet的创建一直到它销毁的整个过程。并且它的 整个生命周期都是由Servlet容器(Tomcat)负责管理和维护的。(补充:在Tomcat中,Servlet是以单实例多线程的方式处理客户端请求)

4.1 Servlet对象创建的过程

当第一次请求某个Servlet的时候,容器会先查找之前有没有创建过这个Servlet的实例,如果没有则创建一个实例并缓存起来。后续 所有请求这个Servlet的时候,都会使用这个缓存的对象来处理客户端请求。(注意“这里说的是第一次请求时创建。另外一种情况则是在容器启动的时候就创建Servlet的实例,在web.xml中为Servlet指定<load-on-startup>配置,这个配置的值是一个整形,数值越小,则初始化 的优先级别越高)

4.2 生命周期方法

方法名 描述
init 在Servlet对象创建之后立即执行的初始化方法,且只执行一次
service 核心的请求处理方法,这个方法可以执行多次
destroy 容器准备销毁Servlet实例之前执行的方法,也是执行一次

 

5、HTTP请求报文

5.1 请求报文

请求行:请求报文的第一行就是请求行。包括请求方法、请求URL地址、HTTP协议版本

请求头:请求行之后的信息就是请求头,它是以“名称:内容”的格式体现。主要包括服务器主机地址及端口号、连接状态、接收的数据类型、编码、语言等等

请求体:请求头结束之后会有一个空行,空行之后就是请求体的内容。通常使用POST提交的数据信息会存放在请求体中,然后传递给服务器。

5.2 响应报文

状态行:主要包括HTTP协议、响应状态码(例如:200表示OK,成功响应)

响应头:主要包括服务器信息、响应的类型及编码、内容的长度、响应的时间等

响应体:服务器将信息携带到响应体中,带回客户端。

6、HTTP请求方法

在HTTP/1.1协议中,请求方法主要包括8个,下面列举常用的请求方法进行说明。

请求方法 说明
GET 向服务器请求指定的资源,并返回响应主体。一般来说GET方法应该只用于数据的读取(类似于查询)
POST 向指定的服务器提交数据(例如:表单数据的提交、文件上传等),并且提交的数据会放入请求体中(类似于新增)
PUT 向服务器提交数据,但是和POST有所区别。如果服务器不存在此资源的时候,则执行新增,如果存在则执行修改。(类似于修改)
DELETE 根据uri的表示删除服务器上的某个资源(类似于删除)
... ...

备注:GET与POST区别:

1.GET主要用于获取数据,POST用于提交数据。

2.GET请求所带的参数是放在请求行的url地址后面,而POST这是放在请求体中。

3.通常浏览器会对GET请求的url长度有所限制 ,而POST通常在请求体中,可以提交更多的数据信息。

4.浏览器会对GET请求进行缓存。

7、Servlet的请求处理方法

方法 说明
service 可以处理任何的请求类型
doGet 处理对应的GET请求
doPOST 处理对应的POST请求
doPut 处理对应的PUT请求
doDelete 处理对应的DELETE请求

说明:通过HttpServlet的源代码得知,默认的所有请求都会先经过service方法,然后service方法根据请求的方法类型判断来决定交给doGet或者是doPOST方法来处理请求。如果子类重写了service方法同时还重写了其他的doXxx的方法,那么只有service方法会处理请求,其他方法将失效。

8、请求和响应对象