• javaweb三大核心基础技术


    我建了一个公众号,主要是分享java项目,linux知识,日语学习相关的内容,大家喜欢的话可以关注一下,谢谢大家。


    Servlet(大重点)

    img

    • @web.xml配值方法

      img

    • 概念:运行在服务器端的小程序

      • Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
      • 将来我们自定义一个类,实现Servlet接口,复写方法
    • Servlet的生命周期

      • https://www.runoob.com/servlet/servlet-life-cycle.html 菜鸟教程

        • init
        • service
        • destroy
      • Servlet3.0可以用注解的方式来配置虚拟路径 load-on-startup等信息,可以不用 @web.xml 。web.xml 部署描述符优先于注释

        • load-on-startup大于0的话一启动这个服务器的web项目就执行init方法,小于0时需要访问这个路径才执行init方法

          img

      • Servlet体系结构

        img

      • urlpartten:Servlet访问路径

        • 1. 一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
        • 2. 路径定义规则:
          • 1. /xxx:路径匹配
          • 2. /xxx/xxx:多层路径,目录结构
          • 3. *.do:扩展名匹配(这个前面不要加/ 会报错的)
    • request #request

      • 3. request功能:

        • 1. 获取请求消息数据

          • 1. 获取请求行数据
            • * GET /day14/demo1?name=zhangsan HTTP/1.1
            • * 方法:
              • 1. 获取请求方式 :GET
                • * String getMethod()
              • 2. (*)获取虚拟目录:/day14
                • * String getContextPath()
              • 3. 获取Servlet路径: /demo1
                • * String getServletPath()
              • 4. 获取get方式请求参数:name=zhangsan
                • * String getQueryString() a=b&c=d&e=f
              • 5. (*)获取请求URI:/day14/demo1
              • 6. 获取协议及版本:HTTP/1.1
                • * String getProtocol()
              • 7. 获取客户机的IP地址:
                • * String getRemoteAddr()
          • 2. 获取请求头数据
            • * 方法:
              • * (*)String getHeader(String name):通过请求头的名称获取请求头的值
              • * Enumeration getHeaderNames():获取所有的请求头名称
          • 3. 获取请求体数据:
            • * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
            • * 步骤:
              • 1. 获取流对象
                • * BufferedReader getReader():获取字符输入流,只能操作字符数据
                • * ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
              • 2. 再从流对象中拿数据
        • 2. 其他功能:

          • 1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数

            • 1. String getParameter(String name):根据参数名称获取参数值 username=zs&password=123

            • 2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game

            • 3. Enumeration getParameterNames():获取所有请求的参数名称

              img

            • 4. Map<String,String[]> getParameterMap():获取所有参数的map集合

          • * 中文乱码问题:

            • * get方式:tomcat 8 已经将get方式乱码问题解决了
            • * post方式:会乱码
            • * 解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
          • 2. 请求转发:一种在服务器内部的资源跳转方式

            • 1. 步骤:
              • 1. 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
              • 2. 使用RequestDispatcher对象来进行转发:forward(ServletRequest request, ServletResponse response)
            • 2. 特点:
              • 1. 浏览器地址栏路径不发生变化
              • 2. 只能转发到当前服务器内部资源中。
              • 3. 转发是一次请求
            • #重定向和转发的区别
      • BeanUntils

        • https://github.com/sogeisetsu/-java-/blob/master/logindemo/src/club/suyuesheng/test/AD.java
        • 用途:简化数据封装
        • 限制
          • 被封装的类必须是标准的简单java类
          • 具体标准
            • 1. 类必须被public修饰
            • 2. 必须提供空参的构造器
            • 3. 成员变量必须使用private修饰
            • 4. 提供公共setter和getter方法(必须标准,如属性为name,那么setter方法必须是setName())
        • 方法
          • 1. setProperty()
          • 2. getProperty()
          • 3. populate(Object obj , Map map):将map集合的键值对信息,封装到对应的JavaBean对象中
            • 注释:BeanUtils.populate(user, map); 的map对象的value如果是数组的话就以数组第一个为准
    • response

      • 1. HTTP协议:响应消息

        • 请求消息

          • #request
        • 响应消息

          • 响应行

            • HTTP/1.1 200
            • 状态码 :服务器告诉客户端浏览器本次请求和响应的一个状态
              • 分类
                • 1xx 表示客户端数据已经上传到服务器,但没有上传完,服务器返回1xx
                • 2xx 访问成功
                • 3xx 访问被重定向302(重定向) 304(访问缓存)
                • 4xx客户端请求出错
                  • 404 客户端访问的路径不存在
                  • 405 请求方式没有对应的doxxx()方法
                • 5xx 服务器内部程序出错
          • 响应头

            img

            • 1. Content-Type:服务器告诉客户端本次响应体数据格式以及编码格式

            • 2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据

              • * in-line:默认值,在当前页面内打开
              • * attachment;filename=xxx:以附件形式打开响应体。文件下载
          • 响应空行

          • 响应体

            • 就是数据,像文本图片一类的数据

              img

      • 2. Response对象

      • 3.ServletContext对象:

        • 1. 概念:代表整个web应用,可以和程序的容器(服务器)来通信

        • 2. 获取:

          • 1. 通过request对象获取
            • request.getServletContext();
          • 2. 通过HttpServlet获取
            • this.getServletContext();
        • 3. 功能:

          • 1. 获取MIME类型:

            • * MIME类型:在互联网通信过程中定义的一种文件数据类型
              • * 格式: 大类型/小类型 text/html image/jpeg
            • * 获取:String getMimeType(String file)
          • 2. 域对象:共享数据

            • 1. setAttribute(String name,Object value)
            • 2. getAttribute(String name)
            • 3. removeAttribute(String name)
            • * ServletContext对象范围:所有用户所有请求的数据
          • 3. 获取文件的真实(服务器)路径

            • 1. 方法:String getRealPath(String path)

            • String realPath = context.getRealPath(""); 或者 System.out.println(context.getRealPath("/"));

              • 都指向 '//D:day13outartifactsday16_war_exploded'

              • 即web目录

                img

            • String b = context.getRealPath("/b.txt");//web目录下资源访问

            • System.out.println(b);

            • String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目录下的资源访问

            • System.out.println(c);

            • String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目录下的资源访问

            • System.out.println(a);

    • 会话技术

      • 1. 会话:一次会话中包含多次请求和响应。

        • 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止
      • 2. 功能:在一次会话的范围内的多次请求间,共享数据

      • 3. 方式:

        • 1. 客户端会话技术:Cookie
        • 2. 服务器端会话技术:Session
      • cookie----客户端会话技术

        • 语法
          • 1. new Cookie(name,value)
          • 2. 向response添加cookie response.addCookie(cookie)
          • 3 . 从request获取Cookie request.getCookies 返回cookie数组
          • getValue getName
          • setValue
          • 2. 持久化存储:
            • *** setMaxAge(int seconds)**
              • 1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效
              • 2. 负数:默认值
              • 3. 零:删除cookie信息
          • *setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录
            • * 如果要共享,则可以将path设置为"/"
        • 意义
          • 一次会话的范围内的多次请求间,共享数据 数据储存在服务器端
        • 5. Cookie的特点和作用
          • 1. cookie存储数据在客户端浏览器
          • 2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)
          • * 作用:
            • 1. cookie一般用于存出少量的不太敏感的数据
            • 2. 在不登录的情况下,完成服务器对客户端的身份识别
      • session--服务器端会话

        • 1. 概念:服务器端会话技术,在一次会话多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
        • 2. 快速入门:
          • 1. 获取HttpSession对象:
            • HttpSession session = request.getSession();
          • 2. 使用HttpSession对象:
            • Object getAttribute(String name)
            • void setAttribute(String name, Object value)
            • void removeAttribute(String name)
        • 3. 原理
          • * Session的实现是依赖于Cookie的。
        • 4.细节:
          • 1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?
            • 默认情况下。不是。
              • 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。
                • Cookie c = new Cookie("JSESSIONID",session.getId());
                • c.setMaxAge(60*60);
                • response.addCookie(c);
          • 2. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
            • ** 不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作*
              • ** session的钝化:*
                • ** 在服务器正常关闭之前,将session对象系列化到硬盘上*
              • ** session的活化:*
                • ** 在服务器启动后,将session文件转化为内存中的session对象即可。*
          • 3. session什么时候被销毁?
            • 1. 服务器关闭
            • 2. session对象调用invalidate() 。
            • 3. session默认失效时间 30分钟
            • 选择性配置修改
              • 30
        • 5. session的特点
          • 1. session用于存储一次会话的多次请求的数据,存在服务器端
          • 2. session可以存储任意类型,任意大小的数据
      • session与Cookie的区别:

        • 1. session存储数据在服务器端,Cookie在客户端

        • 2. session没有数据大小限制,Cookie有

        • 3. session数据安全,Cookie相对于不安全

        img

      • cookie session 转发 ServletContext 的区别

    • jsp(语法不重要,重要的是思想)

      • 基础语法

        • <%java代码%>

          • 内置对象不需要创建,直接使用的对象

            在jsp页面中不需要创建,直接使用的对象

            • 九个内置对象

              img

        • <%= 直接在页面输出%>

        • <%!定义类%>

      • 指令

        • * 作用:用于配置JSP页面,导入资源文件

        • * 格式:

          • <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
        • * 分类:

          • 1. page : 配置JSP页面的

            img

            • * contentType:等同于response.setContentType()

              • 1. 设置响应体的mime类型以及字符集
              • 2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
            • * import:导包

            • * errorPage:当前页面发生异常后,会自动跳转到指定的错误页面

            • * isErrorPage:标识当前也是是否是错误页面。

              • * true:是,可以使用内置对象exception
              • * false:否。默认值。不可以使用内置对象exception
          • 2. include : 页面包含的。导入页面的资源文件

            • * <%@include file="top.jsp"%>
          • 3. taglib : 导入资源 需要先引入jstl jar包

            jstl 的jar包引入方法较为复杂

      • ELhttps://sogeisetsu.github.io/javaweblearn/day17/src/cn/suyuesheng/day17/rr

        • 1. 概念:Expression Language 表达式语言

        • 2. 作用:替换和简化jsp页面中java代码的编写

        • 3. 语法:${表达式}

        • 4. 注意:

          • * jsp默认支持el表达式的。如果要忽略el表达式
            • 1. 设置jsp中page指令中:isELIgnored="true" 忽略当前jsp页面中所有的el表达式
            • 2. ${表达式} :忽略当前这个el表达式
        • 代码参考

        • 获取值

          img

      • jstl

    • 三层架构:软件设计架构

      • 1. 界面层(表示层):用户看的得界面。用户可以通过界面上的组件和服务器进行交互

      • 2. 业务逻辑层:处理业务逻辑的。

      • 3. 数据访问层:操作数据存储文件。

      img

  • 相关阅读:
    wget/curl查看请求响应头信息
    对软件测试的理解
    负载测试、压力测试和性能测试的区别
    经典测试面试题
    软件测试的目的和任务
    为cloudstack搭建ceph文件系统
    多网卡绑定实例
    牛客多校5 A-gpa(01分数规划)
    HDU
    2018ACM-ICPC宁夏邀请赛 A-Maximum Element In A Stack(栈内最大值)
  • 原文地址:https://www.cnblogs.com/sogeisetsu/p/12854353.html
Copyright © 2020-2023  润新知