JavaWeb入门笔记

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方法来处理这个请求。

请求网页地址http://127.0.0.1:8080/ch02/test

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、请求和响应对象

猜你喜欢

转载自www.cnblogs.com/hhmm99/p/9239782.html