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对象作为仓库

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

  • 相关阅读:
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(1)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(2)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口调试
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建Viewport(1)
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建输出验证码图片的控制器
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之调整首页显示
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之登录窗口
    一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(3)
  • 原文地址:https://www.cnblogs.com/rookie97/p/12043749.html
Copyright © 2011-2022 走看看