我的网站

欢迎来到苏月晟的博客

Sans la liberté de blamer, il n'est point d'éloge flatteur || 若批评不自由,则赞美无意义。
扩大
缩小

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:\day13\out\artifacts\day16_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

posted on 2020-05-09 04:25  sogeisetsu  阅读(1003)  评论(0编辑  收藏

导航