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

第十周思维导图

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的输出流
    微信公众号:爱编码的程序员

猜你喜欢

转载自blog.csdn.net/weixin_43501566/article/details/105522481