zoukankan      html  css  js  c++  java
  • JavaWeb基础

    Java Web

    JavaWeb工作原理

    Web应用程序

    Web服务器

    Web浏览器

    HTML文件

    HTTP协议(超文本传输协议)

    位于TCP/IP协议的应用层(顶层)

    TCP协议是长连接,HTTP是短连接

    HTTP协议主要特点

    1.遵循请求/响应模型

    无连接

    无状态

    工作流程

    建立连接

    发送请求信息

    HTTP请求包括请求行、请求头、空行、消息体

    请求行由三部分组成:请求方法、URL、HTTP版本

    请求方法有8中,常用GET和POST

    回送响应信息

    HTTP响应包括状态行、响应头、空行、消息体

    状态行中的状态码有5种

    1xx:信息,请求收到,继续处理

    2xx:成功

    3xx:重定向,为了完成请求,必须进一步执行的动作

    4xx:客户端错误

    5xx:服务端错误

    关闭连接

    Web服务器缺陷

    只能提供静态页面

    CGI程序:多进程,无法实现高并发

    Java的解决方案:Servlet及Web容器

    Servlet(无main方法,属于javaEE)

    主要任务

    读取浏览器发送的数据

    做业务处理,生成结果

    给浏览器做响应

    Web容器

    负责Servlet的管理和运行

    通信支持

    生命周期管理

    多线程支持

    JSP支持

    处理安全性

    Web容器和Servlet对请求和响应的处理总结

    JavaWeb page12-13

    JavaWeb应用程序的组成

    配置文件:web.xml(必须在WEB-INF目录下),浏览器只能访问到WEB-INF外面的文件

    静态文件

    类文件和包

    Web容器Tomcat

    目录结构

    bin:启动和关闭服务器

    lib:共用的jar文件

    logs:日志

    webapps:应用程序部署目录

    发布Web应用

    打war包命令:jar cvf myweb.war html images jsp WEB-INF *.html *.jsp

    Servlet基础

    Servlet规范

    Web应用程序

    Servlet和HTTP Servlet

    过滤器

    安全

    国际化

    Servlet API

    HttpServlet继承GenencServlet,GenencServlet实现了ServletConfig和Servlet接口

    开发Servlet程序的步骤

    1.自定义类继承httpServlet

    2.重写doGet和doPost方法

    3.在web.xml中做配置

    Servlet中不能用全局变量,线程安全问题

    解决1:用局部变量

    解决2:线程同步 synchronized

    Servlet 生命周期

    五个过程:创建、初始化、提供服务、销毁、GC回收

    创建(构造器)

    初始化:init方法

    服务:调用Service方法(它去调用doGet或doPost)

    销毁:调用destroy方法

    GC卸载

    正常情况下,服务可以执行多次,其他只执行一次。在长时间没有发送请求后,需要重新创建Servlet

    Servlet默认是多线程的,因此给定时间内容器只装载一个Servlet实例

    Servlet基本配置

    <url-patttern>匹配规则三种

    完全匹配:<url-pattern>/servlet/MyServlet.do</url-pattern>

    目录匹配:<url-pattern>/servlet/*</url-pattern>

    扩展名匹配:<url-pattern>*.do</url-pattern>

    容器查找规则:首先查找完全匹配,找不到则查找目录匹配,如果还找不到就查找扩展名匹配。一个请求可以匹配多个目录匹配,容器最终会选择最长的目录匹配

    Servlet初始化配置

    在一个Servlet元素中使用<init-param>、<param-name>、<param-value>元素

    访问初始化参数

    this.getServletConfig().getInitParameter(String name)

    this.getInitParameter(String name)

    ServletContext应用上下文对象

    概括

    属于整个Web应用程序

    可以访问到Web应用程序资源的本地输入流

    把资源的虚拟路径转换为物理路径

    记录事件日志

    绑定一个对象在整个Web应用程序中共享

    获取应用上下文对象

    ServletContext context= this.getServletConfig().getServletContext()

    ServletContext context= this.getServletContext()

    常用方法

    context.getRealPath():将虚拟路径转换为部署到服务器那边的真实物理路径

    数据共享

    context.setAttribute("username","张三"):在应用上下文中保存数据(可以存任何数据类型)

    context.getAttribute("username"):在应用上下文中取出数据(根据键取出值,再强转)

    getInitParameter():获得全局的初始化参数(初始化配置中,在Servlet元素外用<Context-Param>元素)

    使用Servlet处理HTTP响应

    HttpServletResponse对象用于创建响应

    设置响应状态行

    五类状态码

    1xx:信息,请求收到,继续处理

    2xx:成功

    3xx:重定向,为了完成请求,必须进一步执行的动作

    4xx:客户端错误

    5xx:服务端错误

    设置状态码

    setStatus()方法,例:resp.setStatus(HttpServletResponse.SC_NOT_FOUND)

    两种专用方法

    sendError(HttpServletResponse.SC_NOT_FOUND,"你输入的路径有错") 生成一个404应答, 可以自定义错误信息!

    sendRedirect(String URL)重定向,用于跳转页面或跳转Servlet!

    重定向跳转Servlet时写的路径不加/

    原理:首先将状态码设置为302,再根据响应头里Location的URL地址,重新发送请求

    设置响应头

    setHeader(name,value)

    自定义响应头:resp.setHeader("username", "张三");

    通过Content-Type响应头告诉浏览器响应的数据类型是普通HTML文本:resp.setHeader("Content-Type", "text/html");

    setContentType(String mimetype)

    Content-Type值的类型,叫做MIME(Multipurpose Internet Mail Extending)

    text/html

    text/plain

    image/jpeg

    设置响应消息体

    传递文本流getWriter()

    传递二进制流getOutputStream()

    下载文件

    使用Servlet处理HTTP请求

    浏览器向服务器发HTTP请求的四种方式

    地址栏输入 Get

    超链接 Get

    表单提交 Get/Post

    表单提交中传输二进制数据,只能使用POST方法

    改变默认编码集 enctype="multipart/form-data"

    开启Servlet3.0文件上传开关 @MultipartConfig

    提交方法 method="post"

    AJAX Get/Post

    GET/POST方法比较

    GET

    提交数据类型:文本

    提交数据长度:不超过255个字符

    提交数据可见性:作为URL地址的一部分显示在浏览器地址栏

    提交数据缓存:缓存在浏览器URL历史状态中

    POST

    提交数据类型:文本,二进制文本

    提交数据长度: 没有限制

    提交数据可见性: 作为请求的消息体,不可见

    提交数据缓存:不会被浏览器缓存

    如何选择GET/POST方法

    请求一个静态页面或图形文件时使用GET方法,因为仅仅需要发送文件名

    发送大数据的时候使用POST方法

    上传文件时使用POST方法

    发送用户名、密码或其他保密信息的时候使用POST方法

    获取HTTP协议请求行

    获取HTTP协议请求头

    request.getHeader("User-Agent");

    获取HTTP协议消息体

    获取表单数据

    request.getParameterValues("hobby") 返回字符串数组

    request.getParameter("sex")返回字符串

    请求转发

    request.getRequestDispatcher("/FromServlet").forward(request, response);跳页面或者Servlet

    一次请求一次响应。请求转发在服务器内部完成,而重定向由浏览器完成,重定向至少两次请求两次响应

    使用request对象作为仓库

    传数据线程安全(只在一次请求一次响应中有效)

  • 相关阅读:
    从nsurlsession、Alamofire到moya
    ssl是tcp的会话层与表示层
    Springboot+Thymeleaf+layui框架的配置与使用
    机械思维 信息思维
    路在何方—价值观、价值链与人生(草稿)
    世界由物质、能量、信息
    http_build_query()函数使用方法
    laravel 远程一对多实例
    MySQL中的float和decimal类型有什么区别
    mysql int(19) float(7,2) decimal(7,2)对比
  • 原文地址:https://www.cnblogs.com/rookie97/p/12043749.html
Copyright © 2011-2022 走看看