Web核心

Web服务器使用HTTP协议来传输数
Servlet容器的基本思想是在服务器端使用Java来动态生成网页,Servlet容器是Web服务器和servlet进行交互的必不可少的组件。Servlet容器就是用来装Servlet的。
Servlet容器和Web服务器如何处理一个请求?
  • Web服务器接收到HTTP请求

  • Web服务器将请求转发给servlet容器

  • 如果容器中不存在所需的servlet,容器就会检索servlet,并将其加载到容器的地址空间中

  • 容器调用servlet的init()方法对servlet进行初始化(该方法只会在servlet第一次被载入时调用)

  • 容器调用servlet的service()方法来处理HTTP请求,即,读取请求中的数据,创建一个响应。servlet会被保留在容器的地址空间中,继续处理其他的HTTP请求

  • Web服务器将动态生成的结果返回到正确的地址。

     

Servlet与Tomcat的关系

Tomcat其实是Web服务器和Servlet容器的结合体

Servlet是运行在Web服务器或应用服务器上的程序。

Web服务器

  • Web 服务器是一个应用程序(软件)对HTTP协议的操作进行封装,据,使得程序员不必直接对协议进行操作,让web开发更便捷,主要功能是“提供网上信息浏览服务”。

  • Web服务器的作用:

*封装HTTP协议操作,简化开发

*可以将web项目部署到服务器中,对外提供网上浏览器服务

什么是Servlet容器?


Servlet容器,顾名思义里面存着Servlet对象,我们为什么能够通过Web服务器映射的URL访问资源?肯定需要写程序处理请求,主要3个过程:接受请求,处理请求,响应请求。

Tomcat

  • 官网:http://tomcat.apache.org/ 下载

  •  

  • Tomcat是一个轻量级的Web服务器,支持Servlet/JSP少量JavaEE规范,也称为Web容器,Servle容器。

  • 控制台乱码:config——logging.properties--- gbk

  • 关闭:Ctrl+C

  • 配置:修改启动端口号:conf/server.xml

  • 启动出现问题:端口号冲突 *Address alrady in use : bind

  • 启动窗口一闪而过:检查JAVA_HOME环境变量是否正确配置。

  • 项目部署:将项目放到webapps目录下,即部署完成

  • 一般javaWeb项目会被打成war包,然后将war包放到webapps目录下,Tomcat会自动压缩war文件 ---hello.war.

     

IDEA中创建Maven Web项目

Maven Web 项目结构 :开发中的项目

  • webapp

*html --文件目录(可自定义)

*WEB-INF --web项目核心目录

*web.xml web项目配置文件

  • 打包方式

<Packaging> war <Packaging>

*jar:默认方式

*war:web项目

部署的JavaWeb项目结构:开发完成,可以部署的项目。

*WEB-INF --web项目核心目录

*classes java字节码文件

*lib 项目所需的jar包

*web.xml web项目配置文件

  • 编译后的java字节码文件和resources的资源文件,放到

WEB-INF下面的classes目录下

  • pom.xml中依赖坐标对应的jar包,放入WEB-INF下的lib目录下。

Servlet

  • Servlet是java提供的一门动态web资源开发技术

  • Servlet是javeEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet

  • servlet对象由web服务器创建,Servlet方法由web服务器调用。

  • 自定义的Servlet,必须实现Servlet接口并复写其方法,而Servlet接口中有sevice方法

     

Servlet 生命周期

  • 对象的生命周期指的的是一个对象被创建到被销毁的整个过程。

  • Servlet运行在Servlet容器中(Web服务器),其生命周期由容器来管理,分为四个阶段:

    1. 加载和实例化,就是创建对象

      *默认情况下是servlet被第一次访问的时候,由容器创建Servlet对象。

      *loadOnStartup的值: 0或者正整数的时候,是在服务器启动的时候被创建。是负整数的时候即默认情况下。

    2. 初始化:在servlet实例化后,容器将调用Servlet的 init()方法,完成一些加载配置文件,创建连接等初始化工作。只调用一次

    3. 请求处理:每次请求Servlet时,Servlet容器都会调用service()方法,对请求处理,会被多次调用。

    4. 服务终止:当释放内存或者容器关闭时,容器就会调用Servlet实例的destroy()方法。执行一次。

Servlet体系结构

  • servlet-----Servlet体系根接口

    GenericServlet-------Servlet抽象实现类

    HttpServlet------对HTTP协议封装的Servlet实现类

  • 我们将来开发B/S架构的web项目,都是针对HTTP协议,所以我们自定义Servlet,会继承HttpServlet

HttpServlet原理

  • 自己写的Servlet要继承这个类,然后重写doGet()和doPost()

  • 获取请求方式,并根据不同的请求方式,调用不同的doXxx方法。

HttpServletRequest & ServletRequest

  • 继承关系,HttpServletRequest 继承 ServletRequest

  • HttpServletRequest 里面有getSession,ServletRequest没有,需要强转

  • HttpServletRequest hsr = (HttpServletRequest) request;

Request & Response对象

  • 浏览器发出请求,就是HTTP协议封装的数据,然后经过Tomcat服务器解析后,将其封装到Request 对象参数中。然后要给浏览器响应的数据,就通过Response设置数据,发送给浏览器,然后解析数据,然后呈现。

  • Request :获取请求数据

  • Response:设置响应数据

Request对象

  • Request继承体系

  • ServletRequest ---java提供的请求对象的根接口

  • HttpServletRequest ----java提供的对Http协议封装的请求对象接口

  • RequestFacade ----Tomcat定义的实现类

  • Tomcat解析请求参数,封装为Request对象,并且创建request对象传递到service方法中,所以是tomcat定义的实现类。

Request请求转发

特点:

  • 浏览器的地址不会发生改变

  • 只能转发到到当前服务器的内部资源

  • 一次请求,可以在转发的资源间使用request共享数据

     

Response完成重定向

  • 重定向(Redirect):一种资源跳转方式

特点:

  • 浏览器的地址栏的路径发生变化

  • 可以重定向到任意位置资源(服务器内部,外部均可);

  • 两次请求,不能在多个资源使用request共享数据。

JSP

  • java Server Pages ,java服务端页面

  • 一种动态的网页技术,其中既可以定义HTML,JS,CSS等静态内容,还可以定义java代码的动态内容

  • JSP=HTML+java

  • jsp快速入门

    1. 导入JSP坐标<jsp-api>

    2. <scope> provided tomcat自带了jar包,会冲突

    3. 创建jsp文件

    4. 编写HTML标签和java代码

  • JSP 本质上就是一个Servlet

  • jsp在被访问时,由jsp容器(tomcat)将其转换为java文件(Servlet)

    由容器将其编译,最终对外提供服务的其实就是这个字节码文件。

  • 浏览器-->请求--->hello.jsp-->转换--->Servlet--->hello_jsp.java----->编译---->class---->hello.jsp.class---->响应。

  • JSP脚本

    1.jsp脚本用于在jsp页面内定义java代码

    2.jsp脚本分类:

    <%...%>:内容会直接放到_jspService()方法中

    <%=...%>:会放到out.print()中作为参数,会输出在页面上。

<%!...%>:内容会放到_jspService()方法之外,被类直接包含,相当于成员变量,或者定义方法,都可以。

  • EL 表达式:就是来替换jsp中的java代码的

  • 主要功能:获取数据

  • 用于简化JSP页面内的java代码

语法:${name},

从域中获取key为name的数据,一次会从这四个域中寻找

JavaWeb中的四大域对象

  1. page:当前页面有效

  2. request:当前请求有效

  3. session:当前会话有效

  4. application:当前应用有效

JSTL标签

  • 作用:使用标签取代JSP页面上的Java代码!

  • <c if>

  • <c forEach>

  • 要导入坐标

  • 在JSP页面上引入JSPL标签库

    <%@ taglib ...../jstl/core>

AJAX

  • 异步的javaScript和XML

  • 作用:

    1. 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应数据

    2. 使用了AJAX和服务器进行通信,就可以使用HTML+AJAX来替换JSP页面了

    3. 异步交互:可以不再加载整个页面的情况下,与服务器交换数据并更新部分的网页技术

    4. 异步和同步

      *异步:客户端不用等待服务器做出响应,可以继续其他操作,隐秘的和服务器交互,客户端感知不到。

      *同步 客户端发送请求后,要等待服务器给出响应后,才能继续其他操作。

MVC模式

  • 是一种分层开发的模式,

  • M:Model,业务模型,处理业务

  • V;View 视图,界面展示

  • C:Controller ,控制器,处理请求,调用模型和视图。

     

  •