第十周思维导图

Tomcat

目录分析

  • bin 可执行文件
  • conf 配置文件
  • lib 依赖jar包
  • logs 日志文件
  • temp 临时文件
  • webapps 存放
  • work 存放运行时的数据

Tomcat 安装

  • 官网下载压缩
  • 解压到一个没有特殊符号的目录中(一般为纯英文即可)
  • 不建议将服务器软件放在磁盘层次很多的文件夹
  • 不建议放在中文路径下
  • Tomcat 安装需要配置JAVA_HOME 环境变量

启动问题

  • 启动Tomcat一闪而过

    • 原因:没有配置JAVA_HOME

    • 解决方式:配置JAVA_HOME

      JAVA_HOME环境变量
      C:\Java\jdk1.8.0_231

      path环境变量
      %JAVA_HOME%\bin

  • 启动报错

    • 原因:端口号被占用、重复启动

    • 解决方案

      • 暴力:找到占用端口号,相应的进程,杀死进程

        命令:netstat -ano
        找到进程pid,强制关闭进程

      • 温柔:修改Tomcat本身的端口号

关闭

  • 正常关闭:bin目录下shutdown.bat;dos窗口下
    ctrl+c,直接正常关闭。
  • 强制关闭

配置

  • 项目部署方式

    • 1、直接把项目放在webapps文件夹下即可

      • hello:项目的访问路径—>虚拟目录
      • 简单部署:将项目打包成war包,war包放在文件夹中
    • 2、配置server.xml文件部署项目

      • 在文件中加入
      • docbase:项目存放路径
      • path:虚拟目录
    • 3、在conf\Catalina\localhost创建任意名称的
      xml文件(推荐)

      • docbase 项目存放的路径
      • path 虚拟目录
  • java动态项目的结构

    • 根目录

      • WEB-INF

        • web.xml:web项目的核心配置文件
        • classes目录:放置字节码文件的目录
        • lib:放置依赖的jar包
  • IDEA与tomcat的相关配置

    • 1、IDEA会为每一个项目单独建立一份配置文件

      • 查看控制台
        Using CATALINA_BASE:

        “C:\Users\14607.IntelliJIdea2019.1\system\tomcat\Unnamed_Web-Project_3”

    • 2、工作空间项目 和 tomcat部署的web项目

      • tomcat真正访问的是"tomcat"部署的项目,"tomcat部署的web"对应的"工作空间"的web目录下的所有资源

      • WEB-INF 下的资源无法被浏览器直接访问

      • 断点调试:使用小虫子debug启动

Servlet

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

  • Servlet是一个接口,定义了Java类被浏览器访问到(Tomcat识别)的规则。

简单入门

(Servlet2.0)

  • 1、创建一个JavaEE项目

  • 2、定义一个类,实现Servlet接口

  • 3、实现接口的方法

  • 4、配置Servlet(在web.xml)

    demo1 com.qianfeng.ljf.servlet.ServletDemo1 demo1 /demo1

  • 原理

    • 1:当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径。
    • 2:查找web.xml文件,是否有对应的标签内容
    • 3:如果有,则会找到对应的全类名
    • 4:tomcat会将字节码文件加载进内场,并且创建其对象。
    • 5:调用其方法

接口方法

  • public void init(ServletConfig servletConfig)
    【在Servlet被访问的时候。只会执行一次】
  • public void service(ServletRequest servletRequest, ServletResponse servletResponse)
    【每次Servlet被访问,执行。执行多次】
  • public void destroy()
    【在Servlet被杀死时执行,在服务器正常关闭时,执行,执行一次。】
  • public String getServletInfo()
  • public ServletConfig getServletConfig()

生命周期

  • 创建

    • 创建时机

      • 1、被浏览器第一次访问时

      • 2、配置创建时机

        • 1、第一次被访问时,创建
          值为负数
        • 2、启动服务器时,创建
          值为0或正整数
    • 注意:init方法只执行一次,Servlet是单例的,存在线程安
      全问题,尽量不要在Servlet中定义成员变量(不要修改)

  • 提供服务

    • 多次执行service方法
  • 销毁

    • 执行一次destroy方法(服务器正常关闭,在对象销毁前执行)

Servlet3.0

  • 好处:支持注解配置,可以不需要web.xml

  • 步骤

    • 1、创建一个JAVAEE项目,选择Servlet的版本
      3.0以上,可以不创建web.xml

    • 2、定义一个类,实现Servlet接口

    • 3、重写方法

    • 4、在类上使用@WebServlet注解,进行配置
      @WebServlet(“资源路径”)

      @WebServlet("/myservlet")

  • urlpattern 配置

    • 1、可以定义多个路径:
      @WebServlet({ “/d4” , “/dd4” , “/ddd4” })

    • 2、路径定义规则

      • 1、/xxx
      • 2、/xxx/xxx
      • 3、*.do

体系结构

  • Servlet(接口)

  • GenericServlet(抽象类)

    • 将Servlet接口中其他方法做了默认空实现,只将service方法作为抽象方法作为抽象方法
    • 继承GenericServlet类时,只需实现service()方法即可
  • HttpServlet(抽象类)

    • 对http协议的一种封装,简化操作
    • 1、定义类继承HttpServlet
    • 2、腹泻doGet/doPost 方法

Request

请求消息数据

  • 请求行

    请求方式 请求url 请求协议/版本
    GET /login.html HTTP/1.1

    • 获取方式

      • 获取请求方式GET String getMethod()

      • 获取Servlet路径 String getServletPath()

      • 获取get方式请求参数 String getQueryString()

        name=zhangsan&password=123456

      • 获取协议及版本 String getProtocol()

        HTTP/1.1

      • 获取客户机的IP地址 String getRemoteAddr()

      • 获取虚拟目录 String getContextpath()

        /day14

      • 获取请求的URI String getResquestURI()

        • String getResquestURI()
        /day14/demo1
        URI 统一资源标识符
        
          • StringBuffer getRequestURL()

          http://loaclhost/day14/demo1URL
          统一资源定位符

    • 请求方式

      • get

        • 1、请求参数在请求行中,在url后
        • 2、请求的url长度有限制
        • 3、不太安全
      • post

        • 1、请求参数在请求体中
        • 2、请求的url长度没有限制
        • 3、相对安全
  • 请求头

    请求头名称:请求值

    Host:localhost

    User-Agent:Mozilla/5.0 (Windows NT 6.1;Win64;)…
    Accept-Language:zh-Ch,zh;q=0.8;zh-TW…

    Accept-Encoding:gzip,deflate

    Referer:http://loaclhost/login.html

    Connect:keep-live

    Upgrade-Insecure-Requests:1

    • 获取方式

      • String getHeader(String name)
        通过请求头的名称获取请求头的值
      • Enumeration getHeaderNames()
        获取所有的请求头名称
    • 常见请求头

      • User-Agent

        • 浏览器告诉服务器,我访问你使用的浏览器版本信息
        • 可以在服务器端获取该头的信息
          【解决浏览器兼容性问题】
      • Referer:http://localhost/login.html

        • 告诉服务器,我(当前请求)从哪里来

        • 作用

          • 1、防盗链
          • 2、统计工作
  • 请求空行

    • 作用:分割POST请求的 请求头、请求体
  • 请求体

    • 获取方式

      • 获取流对象

        • BufferedReader getReader()
          获取字符输入流,只能操作字符数据
        • ServletInputStream getInputStream()
          获取字节输入流,可以操作所有的类型的
    • 作用:封装POST请求消息的请求参数

其他功能

  • 获取请求参数的通用方式

    • 1、String getParameter(String name)
      根据参数名称获取参数值

    • 2、String[] getParameterValues(String names)
      根据参数的名称获取参数值的数组

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

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

    • 解决中文乱码

      • get方式:tomcat 8 已经将get方式的乱码问题解
        决了
      • post方式:会乱码。解决方式:获取参数前,设 置request的编码
        request.setCharacterEncoding(“utf-8”);
  • 请求转发
    

(forward)

- 步骤- 通过request对象获取转发器对象RequestDispatcher- 使用转发器对象进行转发forward(req,resp)- 简洁代码request.getRequestDispatcher("findUserServlet").forward(request,response);- 特点- 转发路径不变- 转发只能访问当前服务器下的资源- 转发只能是一次请求,可以使用request对象来共享数据
  • 共享数据

    • 域对象

      • 域对象:一个有作用范围的对象,可以在范围内共享数据

        • request域:代表一次请求的范围,一般用于请求多个转发的多个资源中共享数据
        • 1.void setAttribute(String name,Object obj)
          存储数据
        • 2.Object getAttitude(String name)
          通过键获取值
        • 3.void removeAttribute(String name)
          通过键移除键值对
  • 获取ServletContext()

    • ServletContext getServletContext()
  • getPart() 用于文件上传

体系结构

  • ServletRequest
  • HttpServletRequest
  • org.apache.catalina.connector.RequestFacade类(Tomcar)

Response

响应消息数据

HTTP/1.1 200 OK
Content-Type:text/html;charset=UTF-8
Content-Length:101
Date:Web,06 Jun 2019 07:08:43 GMT

<html>
<head></head>
<body>
<h1></h1>
</body>
</html>
  • 响应行

    协议版本 响应状态码 状态码描述

    • 组成:协议版本 响应状态码 状态码描述

    • 响应状态码

      • 服务器告诉客户端本次请求和响应的一个状态

      • 分类

        • 1xx:服务器接收客户端消息,但是没有接收完
          成,等待一段时间后,发送1xx多状态码
        • 2xx:成功
        • 3xx:302(重定向),304(访问缓冲)
        • 4xx:客户端错误。
          404(请求路径没有对应资源)
          405(请求方式没有对应的doxxx方法)
        • 5xx:服务端错误。
          500(服务器内部异常)
    • 设置响应行

      • setStatus(int src) 设置状态码
  • 响应头

    • 组成:头名称:值

    • 常见的响应头

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

      • content-disposition:服务器告诉客户端以什么
        格式打开响应的数据

        • in-line 默认当前页面打开
        • attachment;filename=xxx文件名
          以附件的形式打开响应体。用于文件下载
      • content-length:字节的个数(了解)

    • 设置响应头

      • setHeader(String name,String value)
  • 响应空行

  • 响应体:传输的数据(HTML页面、图片等)

    • 设置响应体

      • 使用字符输出流 PrintWriter getWriter()
      • 使用字节输出流 ServletOutputStream getOutputStream
      • 使用上面两个输出流,将数据输出到客户端服务器

重定向

(redirect)

  • 概念:资源的跳转方式

  • 步骤

    • 1、reponse.setStatus(302)
      【设置资源的跳转方式】
    • 2、response.setHeader(“loacation”,"/newServlet")
      【设置响应头location,重定向的Servlet路径或url】
    • 简单实现
      response.setRedirect(“ul路径”)
  •           特点
    

(与转发的区别)

- 地址栏发生变化
- 重定向可以访问其他站点(服务器)的资源
- 重定向是两次请求,不能使用request对象共享数据

ServletContext

概念:代表整个web应用,可以和程序的容器

       (服务器)来通信

获取方式

  • 1、通过request对象获取

    • request.getServletContext()
  • 2、通过HttpServlet获取

    • this.getServletContext()

功能

  • 1、获取MIME类型

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

    • 作用:共享数据

    • 设置、获取、移除域对象

      • 1.setAttribute(String name,Object value)
      • 2.getAttribute(String name)
      • 3.removeAttribute(String name)
    • 域对象范围:所有用户请求的数据

  • 3、获取文件的真实(服务器)路径

    • 方法:String getRealPath(String path)

    • 获取WEB-INF目录的资源访问

      • context.getRealPath("/b.txt")
    • 获取web目录下的资源访问

      • context.getRealPath("/WEB-INF/c.txt")
    • 获取src目录下的资源访问

      • context.getRealPath(“WEB-INF/classes/a.txt”)

Jsp

指令

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

  • 格式

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

    • page

      • 作用:配置JSP页面的

      • 常见属性

        • contentType

          • 等同于response.setContentType()设置编码

          • 作用

            • 设置想用题的mime类型以及字符集
            • 设置当前jsp页面的编码(高级IDE生效,低级工具需设置pageEncoding属性)
        • import

          • 作用:导包
        • errorPage

          • 作用:当页面发生异常后,会自动跳珠到指定的错
            误页面
        • isErrorPage

          • 作用:标识当前页面是否是错误页面
          • true:是,可以使用内置对象exception
          • false:否,默认值。不可以使用内置对象
            exception
    • include

      • 作用:页面包含的。导入页面的资源文件

      • <%@include file=“top.jsp”%>

      • 附:与 <%jsp:inclue page="" > 区别

        • include:先包含再编译
        • jsp:include:先编译,再包含
    • taglib

      • 作用:导入资源
      • <%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

prefix:前缀,自定义,一般为c

  • 了解:jsp:forward与jsp:param

    <jsp:forward page=“forwarded.jsp”>
    <jsp:param name=“username” value=“zhangsan”/>
    </jsp:forward>

    jsp:forward指令的意思是直接跳转到page对应的页面,可以通过 jsp:param携带参数。而到被跳转的页面可以直接通过 request(jsp内置对象) 来获取参数的值,获取的方式如下:

    <%
    String name = request.getParameter(“username”);
    %>
    <%=name %>

注释

  • <%---- %>

  • 与html注释区别

    • html:
      只能注释html代码片段,可以被前端页面查看
    • jsp:<%-- --%>
      可以注释所有,不能被前端页面查看

内置对象

  • 概念:在jsp页面不需要创建,直接使用的对象

  • 九个内置对象

    • 变量名

      • 真实类型

        • 作用
    • pageContext

      • pageContext

        • 当前页面共享数据,可以获取其他八个内置对象
    • request

      • HttpServletRequest

        • 一次请求访问多个资源(转发)
    • session

      • HttpSession

        • 一次会话的多个请求间
    • application

      • ServletContext

        • 所有用户间共享数据
    • response

      • HttpServletResponse

        • 响应对象
    • page

      • Object

        • 当前页面(Servlet)的对象 this
    • out

      • JspWriter

        • 输出对象,数据输出到页面上
    • config

      • ServletConfig

        • Servlet的配置对象
    • exception

      • Throwable

        • 异常对象

执行流程

  • 1:用户发送请求到jsp
  • 2:查找对应的jsp文件
  • 3:是否找到;是,执行下一步;否404
  • 4:是否为第一次访问或为修改
    是,执行下一步;
    否,执行第7步
  • 5、调用JSP Parser将其编译成Servlet程序
  • 6、调用JSDK将对应的Servlet程序编译成.class文件
  • 7、执行(若为加载,先加载)对应的.class文件
  • 8、结果页面

案例

用户注册

  • 1、客户端用户登录,提交数据
  • 2、Servlet接受用户数据,使用JDBC将数据添加
    到MySQL数据库
  • 3、使用jdbc,到数据库查询此用户的信息,
    查询到后结果,提示“注册成功”,并将注册信
    息使用 response将数据展示到网页中。否则
    展示“注册失败”

用户登录

  • 1、接受客户端数据
  • 2、到数据库查询用户信息
  • 3、查询到显示注册成功,跳转成功页面
  • 4、未查询到,提示用户名或密码错误

文件上传

  • 1、客户端发送文件上传POST请求

  • 2、服务端获取Part对象
    Part part = request.getPart(“filename”);

  • 3、上传的Servlet类需要加上
    @MultipartConfig注解

  • 4、使用Part对象,获取content-disposition值
    String header = part.getHeader(“content-disposition”)
    处理header字符串得到文件名

  • 5、使用Part获取字节输入流
    InputStream is = part.getInputStream();

    或者另一种方式
    part.write(String path)

文件下载

  • 1、定义页面,编辑超链接的href属性,指向
    Servlet,传递filename
  • 2、定义Servlet,获取文件名称
  • 3、使用字节输入流加载文件进内存
  • 4、指定response的响应头
    setHeader(“content-disposition”,
    “attachment;filename=xxx文件名”)
  • 5、将文件写入response的输出流

java EE 第十二周 web前端开发的周总结 (含思维导图)相关推荐

  1. html css 前端实现消息提醒数_自学的福音,web前端学习全套视频教程+最新学习思维导图都在这里...

    1.产品经理.这些是负责策划应用程序的一群人.他们会想出很多新鲜的.奇怪的.甚至是不可能实现的应用.一般来说,产品经理都追求丰富的功能. 2.UI设计师.这些人负责应用程序的视觉设计和交互模拟. 3. ...

  2. 十款让 Web 前端开发人员更轻松的实用工具

    这篇文章介绍十款让 Web 前端开发人员生活更轻松的实用工具.每个 Web 开发人员都有自己的工具箱,这样工作中碰到的每个问题都有一个好的解决方案供选择. 对于每一项工作,开发人员需要特定的辅助工具, ...

  3. java 处理异常的场景_Java高级----异常处理机制、自定义异常----含思维导图

    Java高级----异常处理机制.自定义异常----含思维导图 Java高级----异常处理机制.自定义异常----含思维导图 南一Java自学交流QQ群: 586012641 拒绝任何广告,共享Ja ...

  4. web前端开发-html5基础(含代码)

    文章目录 前言 一.小白应该如何入门Web前端开发? 二.HTML5-第一天 a-认识HTML(阿巴阿巴...) 1.什么是HTML? 2.HTML和CSS的关系? 3.网页的结构.表现.行为? b- ...

  5. 前端学习路线图--陆神版本思维导图

    说起前端届IT教育老大,怎么能没有千锋的名字,学前端,来千锋,入股不亏,学习带飞! 你可能兜兜转转看了不少路线图只是得到了罗列的知识点和一张思维导图,但是学这些能做些什么?学到这个程度可以找到什么样的 ...

  6. 《Java面向对象编程(阿里云大学)》笔记(文档+思维导图)

    课程链接:https://edu.aliyun.com/course/1011 (还是建议去看课程,笔记仅供参考. 由于文中的所有内容均为手敲,并且有些代码并未验证,因此如有错误,烦请指出~ 谢谢~~ ...

  7. 《十四堂人生创意课》读书笔记,思维导图

    思维导图太大,上传不了,放在百度网盘里面了.下载地址:http://pan.baidu.com/s/1ntujjz7 一.在意外频传的时代活下来 911,求生技能.面对死亡 "如何存活&qu ...

  8. 《O2O实战:二维码全渠道营销》读书笔记思维导图(530KB)

    转载于:https://www.cnblogs.com/syjkfind/p/3950483.html

  9. 小众但功能炸裂,十款好用医学生APP,含思维导图软件

    当你用心投入一件事却没有获得想要的结果时,或许是努力不够,或许是方法不对.学医也一样,除了专业课上的发奋钻研,我们还需要一些优秀软件的buff加持. 对于医学生而言,一些信息权威的APP软件,可以帮助 ...

最新文章

  1. 【动画1】UIView动画
  2. java xy x y_为什么该语句在Java中不起作用x ^ = y ^ = x ^ = y;
  3. egg连接oracle,egg插件sequelize:表自连接
  4. java中null+和null+null的深入理解
  5. anaconda下载过慢修改源配置
  6. 生成PDF并上传到图片服务器
  7. 40种javascript设计模式总结及实例代码演示
  8. java 获取全球国家名称,语言,简称
  9. Premiere常用快捷键
  10. 70句计算机英语,70句必背的经典英文电影台词(中英双语)
  11. 学习装黑苹果的正确姿势(小白适用)
  12. Makefile之origin函数
  13. 导航栏菜单实现鼠标移入移出中英文切换的两种方法(css3和jQuery)
  14. Angular CLI简介
  15. 电视机和机顶盒等焦点问题
  16. win7如何更改文件类型_如何在win10中使用云笔记软件来做pdf手写笔记或绘图? - 敬业签便签...
  17. 80端口跟8080端口有什么区别
  18. tcp连接失败触发的异常
  19. 算法系列——割绳子(剑指offer)
  20. 多人局域网游戏纯蓝图

热门文章

  1. C/S系统快速开发框架/winform快速开发框架源码(C#+SQL)
  2. linux系统 服务器 安装,服务器上怎么安装linux系统
  3. 2022-2027年中国分散染料行业市场全景评估及发展战略规划报告
  4. 微信小程序云开发云数据库_聚合操作_联表查询_对象数组某字段与另一集合的某字段相等匹配
  5. mt管理器主题修改教程_领不了的QQ画图红包教程
  6. 把海水变得更蓝更透!关键在调整-曝光度
  7. 【MOOC-生物信息学-生物数据库】
  8. RT-Thread柿饼控件(3)-- Canvas
  9. 零基础自学新概念英语的方法
  10. 撸了一个「合成大西瓜」