首页 青云排行榜 知识中心 控制台
Java WEB开发 >  WEB 服务端技术 > 

HTTP协议

   一、概述

       1. 概念:超文本传输协议

       2. 作用:规范了客户端(浏览器)和服务器的数据交互格式

       3. 特点

           1. 简单快速:客户端向服务器请求服务时,仅通过键值对来传输请求方法和路径

           2. 灵活:允许传输任意类型的数据对象,正在传输的类型由Content-Type标记(例如图片,文本)

           3. 持续连接:处理完客户端的一个请求时候,服务器不立马关闭,而是在指定的时间之后才关闭

           4. 无状态:如果第二次请求中需要用到第一次请求的数据,那么必须在请求第一次的数据

   二、交互流程

       1. 连接:客户端和服务器端建立连接

       2. 请求:客户端发送请求数据到服务器端

       3. 响应:服务器端接收到请求后进行处理,将处理结果返回响应客户端

       4. 关闭:关闭客户端和服务器端连接(HTTP1.1版本之后不会立即关闭)

   三、请求

       1. 请求格式

           1. 请求行:请求方式、请求地址和HTTP协议版本

           2. 请求头:消息报头,附加信息,不包括核心数据

           3. 空行:请求头和请求实体之间的必须有空行

           4. 请求实体:核心数据,非必须

       2. 请求方式

           1. GET请求(没有请求实体):请求数据以?的形式拼接在请求头中,URL中有具体的请求数据,不安全,由于浏览器对URL的长度有限制,所以适合数据量小的传输          

           2. POST请求:请求数据字请求实体中发送,URL中没有具体的请求数据,安全,适合数据量大的传输

1610676-20191111161416612-1470172353.jpg

   四、响应

       1. 响应格式

           1. 响应行:HTTP版本、状态码和状态消息

           2. 响应头:消息报头,附加信息

           3. 空行:响应头和响应实体之间必须存在空行

           4. 响应实体:服务器返回给客户端的数据

       2. 状态码

            1. 200:客户端请求成功

            2. 400:客户端请求有语法错误,不能被服务器所理解

            3. 403:服务器收到请求,但是拒绝服务

            4. 404:请求资源不存在(URL错误)

            5. 500:服务器发生不可预期的错误

            6. 503:服务器不能处理当前客户端的请求,一段时间后恢复正常

Tomcat服务器

   一、概述

       1. 概念:Tomcat 服务器是一个免费的开源的轻量级Web 应用服务器(Java编写的),是开发和调试JSP 程序的首选。

       2. 作用:能够根据客户端的请求来启动并运行我们编写的数据逻辑代码。

   二、安装

      1. 下载

           1. Tomcat官网

1610676-20191111181359117-269420733.png                  

           2. 点击左侧Download下对应的版本

1610676-20191111181441938-111492509.png

           3. 下载压缩包(zip)

                1610676-20191111181558533-741413972.png

            4. 解压即可

       2. 目录介绍

           1. bin:存放tomcat的命令,以.sh结尾的(linux命令),以.bat结尾的(windows命令)

               1. startup:启动Tomcat

               2. shutdown:关闭Tomcat

           2. conf:存放tomcat的一些配置文件

               1. server.xml:设置端口、域名或IP、默认加载的项目及请求编码

               2. web.xml:文件类型设置

               3. context.xml:配置数据源

               4. tomcat-users.xml:管理tomcat的用户与权限

           3. lib:存放tomcat运行需要加载的jar包

           4. log:存放tomcat在运行过程中产生的日志文件

           5. webapps:存放应用程序,当tomcat启动时会去加载webapps目录下的应用程序

           6. work:存放tomcat在运行时的编译后文件

   三、检测安装

       1. 双击bin目录下的startup文件,不要关闭

       2. 在浏览器URL中输入:localhost:8080

       3. 如果跳转到tomcat推荐页面则安装成功

Servlet

   一、概述

       1. 概念:Servlet是指任何实现了这个Servlet接口的类,Servlet运行于支持Java的应用服务器中,Servlet只用来扩展基于HTTP协议的Web服务器。

       2. 作用 :交互式地浏览和修改数据,动态生成网页。

       2. 使用

           1. 创建普通的Java类继承HttpServlet

           2. 覆写service方法

           3. 在service方法中书写逻辑代码

           4. 在webRoot下的WEB-INF文件夹下的web.xml文件中配置servlet的别名

   二、访问流程和生命周期

       1. 访问流程

           1. 客户端输入URL(服务器地址:端口号/虚拟项目名/servlet的别名)发起请求到服务器

           2. 服务器解析请求URL地址中的URI信息(虚拟项目名/servlet的别名)

           3. 按照虚拟项目名在webapps目录下找到对应的项目文件

           4. 按照servlet的别名(url-pattern)在项目下的web.xml中检索对应的servlet

           5. 运行servlet-class中的所对应的servlet

       2. 生命周期

           1. 从第一次加载进内存(调用)到服务器关闭

           2. 在web.xml中配置了load-on-startup,生命周期为从服务器的启动到服务器的关闭

       3. doGet、doPost、service方法的区别

           1. service方法:可以处理get/post方式的请求,如果servlet中有service方法,会优先调用service方法对请求进行处理。如果service方法中调用了父类的service方法,那么在此service执行完成之后会再次执行对应请求的处理方法,如果不存在会报405错误,一般情况下不会调用。

           2. doGet方法:只能处理get方式的请求

           3. doPos方法: 只能处理post的请求方式

   三、request对象

      1. 概述

          1. 概念: 封装了所有请求信息,由服务器创建并作为实参传递给处理请求的servlet的service方法。

          2. 作用:解决了一次请求内的数据共享问题

          3. 作用域:一次请求内

      2. 获取请求行数据

          1. 获取请求方式:String method = req.getMethod();

          2. 获取请求URL:String url = req.getRequestURl();

          3. 获取请求URI: String uri = req.getRequestURI();

          4. 获取请求协议:String scheme = req.getScheme();

      3. 获取请求头数据

          1. 获取指定的请求头数据:String header = req.getHeader("键名");

          2. 获取所有请求头键的枚举

               Enumeration e = req.getHeaderNames();
               while(e.hasMoreElements) {
                   String name = (String) e.nextElement();
                   String value = req.getHeader(name);
                   System.out.println(name + ":" + value);               
               }

      4. 获取用户数据

          1. 获取指定的用户数据:String name = req.getParameter("键名");

          2. 获取同键不同值的用户数据(多选):  String[]  values = req.getParameterValues("键名");

      5. 设置请求编码格式:

          req.setCharacterEncoding("")

      6. 请求转发

          1. 作用:多个servlet联动操作处理请求。

          2. 特点:一次请求(只有一个request对象),地址栏信息不改变。

          3. 使用: req.getRequestDispatcher("jsp路径").forward(req, resp);

                          return;

       7. 数据的存储和获取(存储优先于获取)

          1. 存储:req.setAttribute(Object name, Object value);

          2. 获取:req.getAttribute(Object obj);

   四、response对象

       1. 概述

            1. 概念:封装了所有响应信息,由服务器创建并作为实参传递给要处理请求的servlet的service方法

            2. 作用:将服务器的信息响应给浏览器

        2. 设置响应编码格式:resp.setContentType("text/html;charset=utf-8");

        3. 设置响应状态码:sendError(int sc, String msg);

        4. 设置响应头

            1. 同键会覆盖:setHeader(“键名”, “键值”);

            2. 同键不覆盖:addHeader(“键名”, “键值”);

        5. 设置响应实体

            1. 响应字符串或HTML页面:resp.getWrite().write("");

            2. 请求重定向:resp.sendRedirect("uri");

        6. 请求重定向

            1. 作用:解决表单重复提交并将不能处理的请求交给其他servlet处理。

            2. 特点:多次请求(多个request对象),地址栏信息改变。

            3. 使用:resp.sendRedirect("uri");

   五、cookie对象

      1. 概述

          1. 概念:浏览器端的存储技术

          2. 作用:解决发送的不同请求数据共享问题

          3. 特点

              1. cookie对象由服务器创建,存储在客户端

              2. 临时存储:存储在浏览器的运行内存中,浏览器关闭即失效

              3. 定时存储:存储在硬盘中,在有效期内符合有效路径要求的请求都会附带该信息

      2. 存储

          1. 创建cookie对象(一个对象只能存储一条信息)

              Cookie c = new Cookie(String name, String value);

          2. 设置cookie信息(非必须)

              1. 设置有效期:c.setMaxAge(int seconds);

              2. 设置有效路径:c.setPath(Strign uri);

          3. 响应cookie信息

              resp.addCookie(cookie对象);

      3. 获取

          1. 获取cookie对象数组

              Cookie[] cks = req.getCookie();

          2. 遍历cookie信息

              判断是否为null后使用for循环遍历

              1. 获取键:c.getName();

              2. 获取值:c.getName();

   六、session对象

      1. 概述

           1. 概念:用户第一次访问服务器,服务器会创建一个session对象给此用户,并将该session对象的JSESSIONID使用cookie技术存储到浏览器中,保证该用户的其它请求能够获得同一个session对象。

           2. 作用:解决了一个用户不同请求的数据共享问题。

           3. 作用域:一次会话(从访问到浏览器关闭)

           4. 特点

               1. session对象由服务器创建,存储在服务器端

               2. session依赖Cookie技术,JESSIONID存储在Cookie的临时存储空间中,浏览器关闭失效

      2. 获取session对象

          HttpSession hs = req.getSession();

          1. 如果请求中拥有session的标识符(JSESSIONID),则返回其session对象

          2. 如果请求中没有session的标识符(JSESSIONID),则创建session对象

          3. 如果session对象是失效的,则创建session对象

      3. 设置session信息

          1. 设置有效期(默认30分钟):hs.setMaxInactiveInterval(int seconds);

          2. 设置强制失效:hs.invalidate();

      4. 数据的存储和获取

          1. 存储:hs.setAttribute(String name, Object value);

          2. 获取:hs.getAttribute(String nam)

             

   七、ServletContext对象

      1. 概述

           1. 概念:ServletContext对象内部封装了该web应用(项目)的信息。

           2. 作用:解决了不同用户的数据共享问题。

           3. 作用域:从服务器启动到服务器关闭

           4. 特点

               1. ServletContext对象由服务器创建,存储在服务器端

               2. 用户共享,一个项目只有一个

      2. 获取ServletContext对象

          1. ServletContext sc = this.getServletContext();

          2. ServletContext sc = this.getServletConfig().getServletContext();

          3. ServletContext sc = req.getSession().getServletContext();

      3. 获取项目中web.xml文件中的全局配置数据

           String name = sc.getInitParameter(String name);

      4. 获取webroot下资源的绝对路径

           String path = sc.getRealPath("/文件夹/文件名");

      5. 获取webroot下资源的流对象

           InputStream is = sc.getResourceAsStream("/文件夹/文件名");

      6. 数据的存储和获取

          1. 存储:hs.setAttribute(String name, Object value);

          2. 获取:hs.getAttribute(String nam)

   八、ServletConfig对象

      1. 概述

           1. 概念:ServletConfig对象是Servlet的专属对象,每个Servlet都单独拥有一个ServletCinfig对象。

           2. 作用:ServletConfig对象用来获取每一个Servlet在web.xml文件中的配置信息。

       2. 获取ServletConfig对象:ServletConfig sc = this.getServletConfig();

       3. 获取web.xml中的配置数据:String name = sc.getInitParameter(String name);

   九、过滤器(Filter)

      1. 概述

           1. 概念:它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据。

           2. 作用:拦截传入的请求和传出的响应,保护Servlet

           3. 原理:客户端浏览器在访问web服务器的某个具体资源的时候,经过过滤器相关处理之后,才将request请求传递给下一个要执行的Servlet

       2. 使用

           1. 创建普通类实现Filter接口

           2. 覆写接口方法

           3. 在web.xml或此类中配置过滤器(url-pattern)

           4. 在doFilter方法中完成对请求或响应的过滤

               1.  /*:拦截所有请求

               2.  *.do:拦截所有以.do结尾的请求,一般进行模块化处理

               3. /虚拟项目名.do:拦截指定url的请求,针对某个servlet的请求进行拦截,保护servlet

           5. 调用FilterChain接口对象的doFilter方法放行

   十、监听器(Listener)

      1. 概述

           1. 概念:监听器就是一个实现特定接口的普通java类,用来监听另一个类对象的方法或属相改变时所要作出的响应

           2. 作用:监听作用域对象request、session、application的创建、销毁和内容的变更

       2. 使用

           1. 监听request

               1. 创建和销毁(实现ServletRequestListener接口)

                   1. 创建:requestInitialized(ServletRequestEvent sre)

                   2. 销毁:requestDestroyed(ServletRequestEvent sre)

               2. 内容变更(实现ServletRequestAttributeListener接口)

                   1. 添加:attributeAdded(ServletRequestAttributeEvent srae)

                   2. 删除:attributeRemoved(ServletRequestAttributeEvent srae)

                   3. 修改:attributeReplaced(ServletRequestAttributeEvent srae)

               3. 使用

                   1. 获取request对象: sre.getServletRequest()

                   2. 获取监听数据的键:srae.getName()

                   3. 获取监听数据的值:srae.getValue()

           2. 监听session

               1. 创建和销毁(实现HttpSessionListener接口)

                   1. 创建:sessionCreated(HttpSessionEvent se)

                   2. 销毁:sessionDestroyed(HttpSessionEvent se)

               2. 内容变更(实现HttpSessionAttributeListener接口)

                   1. 添加:attributeAdded(HttpSessionBindingEvent event)

                   2. 删除:attributeRemoved(HttpSessionBindingEvent event)

                   3. 修改:attributeReplaced(HttpSessionBindingEvent event)

               3. 使用

                   1. 获取session对象: se.getSession()

                   2. 获取监听数据的键:event.getName()  

                   3. 获取监听数据的值:event.getValue()

           3. 监听application

               1. 创建和销毁(实现ServletContextListener接口)

                   1. 创建:contextInitialized(ServletContextEvent sce)

                   2. 销毁:contextDestroyed(ServletContextEvent sce)

               2. 内容变更(实现ServletContextAttributeListener接口)

                   1. 添加:ttributeAdded(ServletContextAttributeEvent event)

                   2. 删除:attributeRemoved(ServletContextAttributeEvent event)

                   3. 修改:attributeReplaced(ServletContextAttributeEvent event)

               3. 使用

                   1. 获取application对象: sce.getApplication()  

                   2. 获取监听数据的键:event.getName()

                   3. 获取监听数据的值:event.getValue()

      3. 在web.xml中配置监听器

            <listener>
                <listener-class>全限定路径</listener-class>
            </listener>  

   十一、web.xml

       1. 全局配置参数

            <context-param>
               <param-name>name</param-name>
               <param-value>value</param-value>
            </context-param> 

       2. Servlet配置              

             <init-param>
                <param-name>name</param-name>
                <param-value>value</param-value>
             </init-param> 

       3. 过滤器配置

             <filter>
                 <filter-name>filterName</filter-name>
                 <filter-class>监听器的全限定路径</filter-class>
             </filter>
             <filter-mapping>
                 <filter-name>filterName</filter-name>
                 <url-pattern>作用范围</url-pattern>
             </filter-mapping> 

       4. 监听器配置

            <listener>
                <listener-class>监听器的全限定路径</listener-class>
            </listener>

       5. 加载时机:服务器启动

       6. 加载顺序:全局配置-->监听器-->过滤器-->Servlet配置

JSP

   一、概述

      1. 概念:JSP(全称Java Server Pages)是由sun公司主导创建的一种动态网页技术标准。

      2. 作用:将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。

      3. 本质:Servlet

      4. 原理:当请求访问JSP文件时,JSP文件会被JspServlet转义成对应的Servlet同时执行转义好的Servlet。

   二、三个指令

      1. page指令:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

          1. 作用:配置jsp文件的转译相关的参数

          2. 属性

1610676-20191120074124865-1617274650.png              

      2. include指令(静态引入):<% include file="要引入的jsp文件的相对路径" %>

          1. 作用:在当前jsp文件中引入其他jsp文件

          2. 特点

              1. 会将当前和引入的jsp文件合并成一个servlet(不会单独转义)然后显示

              2. 当前和引入的jsp文件中不能使用Java代码块声明的同名变量(合并成一个servlet)

      3. taglib指令

          1. 作用:声明jstl标签库

          2. 指令:<%@taglib  uri="标签库" prefix="c"  %>

   三、六个动作

      1. 动态引入:<jsp:include >

          1. 使用:<jsp:include page="path"></jsp:include>

          2. 作用:在当前jsp文件中引入其他jsp文件

          3. 特点

              1. 将引入的jsp文件单独转译,然后在当前servlet(当前jsp文件)中调用转义引入的servlet并显示

              2. 允许含有同名变量

      2. 请求转发:<jsp:forward>

          1. 使用:<jsp:forward page="path">< /jsp:forward>

          2. 作用:请求转发

          3. 特点:标签中间只能写<jsp:param>子标签,其他的任意字符都会报错

      3. 设置请求参数:<jsp:param>

          1. 使用

              <jsp:forward page="path">

                  <jsp:param name="名" value="值" />

              < /jsp:forward>

          2. 作用: 将额外的请求信息保存到request对象中

          3. 特点:一个标签只能保存一个信息

      4. 创建对象:<jsp:useBean>

          1. 使用:<jsp:useBean id="对象名" class="className" scope="作用域">

          2. 作用:实例化一个类对象

          3. 特点:一个标签只能实例化一个对象

      5. 给指定的对象属性赋值:<jsp:setProperty>

          1. 使用:<jsp:setProperty name="beanName" property="propertyName" value=" propertyValue" />

              1. 在<jsp:useBean>外:立即执行

              2. 在<jsp:useBean>内:只有对象被实例化时才会执行

          2. 作用:给指定对象属性赋值

      6. 取出指定对象的属性值:<jsp:getProperty>

          1. 使用:<jsp:getProperty name="beanName" property="propertyName" />

          2. 作用:取出指定对象的属性值

          3. 特点:先实例化对象才能取对应属性的值

   四、九大内置对象

     

1610676-20191120082830740-221444874.png

      1. pageContext对象

           1. 作用:管理当前JSP的运行及其他内置对象

           2. 使用

               1. 获取其他内置对象:pageContext.getXxx();

               2. 获取指定作用域中的数据:pageContext.getAttribute(String name,int Scope)

               3. 向指定作用域中存储数据:pageContext.setAttribute(String name,Object o,int Scope);

               4. 删除指定作用域中的数据:removeAttribute(String name,int Scope);

               5. 作用域常量

                   1. page: PageContext.PAGE_SCOPE

                   2. request:PageContext.REQUEST_SCOPE

                   3. session:PageContext.SESSION_SCOPE

                   4. application:PageContext.APPLICATION_SCOPE

               6. 自动从page request session application中获取数据:findAttribute(String name);

                 

   五、四大作用域

      1. pageContext

          1. 作用:解决了当前页面内数据共享问题

          2. 作用域:当前页面

          3. 数据流转方式:获取其他内置对象

      2. request

          1. 作用:解决了一次请求内的servlet的数据共享问题

          2. 作用域:一次请求内

          3. 数据流转方式:请求转发,将数据流转给下一个servlet

      3. session

          1. 作用:解决了同一用户的不同请求的数据共享问题

          2. 作用域:一次回话

          3. 数据流转方式:将数据从一次请求流转给其他请求

      4. application

          1. 作用:解决不同用户的数据共享问题

          2. 作用域:项目内

          3. 数据流转方式:将数据从一个用户流转给其他用户

EI表达式

   一、概述

       1. 概念:EL(全称Expression Language) 是为了使JSP写起来更加简单。

       2. 作用:获取四个作用域中的数据

       3. 使用:${表达式}

   二、获取作用域数据

      1. 获取请求头数据(了解)

          1. 获取所有请求头信息:${header}

          2. 获取指定键对应的值:${header["键名"]}

          3. 获取同键不同值的所有值:${headerValues["键名"]}

      2. 获取cookie数据(了解)

          1. 获取所有cookie对象的map集合:${cookie}

          2. 获取指定cookie对象: ${cookie.键名}

          3. 获取指定cookie对象的存储数据的键:${cookie.键名.name}

          4. 获取指定cookie对象的存储数据的值:${cookie.键名.value}

      3. 获取请求数据(掌握)

          1. 获取唯一键的值:param.键名

          2. 获取同键不同值:paramValues.键名

      4. 获取自定义数据(掌握)

          1. 获取普通字符串: ${键名}

          2. 获取普通对象

              1. 属性是普通类型:${键名.属性名}

              2. 属性是对象类型:${键名.属性名(对象属性).属性名(对象属性的属性)...}

          3. 获取集合对象

              1. list集合:${ 键名[角标].属性名(如果有) }

              2. map集合:${ 键名.map集合存储的键名.属性名(如果键名是对象)}

   三、作用域查找顺序

       1. 默认:pageContext-->request-->session-->application

       2. 自定义:${pageScope.键名}----${requestScope.键名}----${sessionScope.键名}----${applicationScope.键名}

   四、运算

       1. 算数运算:${变量1 算数表达式(+ - * /)  变量2}

       2. 逻辑运算:${变量1 逻辑表达式(&& || !) 变量2}

       3. 关系运算:${变量1 关系表达式(> < == >= !=)  变量2}

       4. 空值判断:${empty 键名}

JSTL

   一、概述

      1. 概念:JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范。

      2. 作用:提高jsp中的编写逻辑代码的效率

   二、核心标签库

       1. 基本标签:操作作用域中的数据

           1. 输出数据给浏览器

               <c:out value="可以是常量值也可以是EL表达式"   default="默认值"></c:out>

           2. 添加数据到指定作用域中

               <c:set var="键名" value="数据"  scope="作用域对象"></c:set>

           3. 删除指定作用域中的数据

               <c:remove var="键名" scope="作用域对象"/> 

       2. 逻辑标签

           1. 单分支判断:

                <c:if test="${表达式}">前端代码</c:if>

           2. 多分支判断

                <c:choose>
                     <c:when test="">前端代码</c:when>
                     <c:when test="">前端代码</c:when>
                     ......
                     <c:otherwise>前端代码</c:otherwise>
                </c:choose>        

       3. 循环标签

           1. 常量循环

                 <c:forEach begin="起始位" end="结束位" step="步长" varStatus="记录每次循环的数据(如索引)">
                     循环体
                 </c:forEach> 

           2. 动态循环

                 <c:forEach items="${对象}" var="每次循环的结果(对象中的数据)">
                        ${s}
                        ${s.属性}
                 </c:forEach>

   三、格式化标签库

     1. 格式化日期

          1. yyyy年MM月dd日 上午HH时mm分ss秒格式:<fmt:formatDate  type="both"  dateStyle="long"  timeStyle="long"  value="${日期对象}" />

          2. yyyy-MM-dd HH:mm:ss格式 :<fmt:formatDate pattern="yyyy-MM-dd HH:mm:ss" value="${日期对象}" />

      2. 格式化数字

          1. ¥000,000.00格式:<fmt:formatNumber type="number"  value="${数值对象}" />

          2. 000,000.000格式:<fmt:formatNumber type="number" maxFractionDigits="整数型最大位数" value="${数值对象}" />

          3. $120,000.23格式:<fmt:formatNumber value="${货币对象}" type="currency"/>

   四、SQL标签库

      1. 数据库连接

           <sql:setDataSource var="对象名" driver="驱动" url="连接地址" user="用户名" password="密码"/>

      2. 查询语句

           <sql:query dataSource="${对象名}"  var="结果集变量"> 
               SQL查询语句
           </sql:query>

      3. 更新语句

           <sql:update dataSource="${对象名}"  var="受影响行数变量">
              SQL增删改语句
           </sql:update>

       4. 给占位符赋值

            嵌套在查询和更新语句中

           <sql:param value="${empId}" />
相关题目 技术能力测评
关于我们
公司简介
联系我们
联系我们
售前咨询: leizhongnan@eval100.com
售后服务: 0755-26415932
商务合作: support@eval100.com
友情链接
金蝶软件
快递100
关注我们
Copyright © 2023-2023 深圳慧题科技有限公司 粤ICP备2023109746号-1 粤公网安备44030002001082