JAVA基础编程108——Servlet

tomcat服务器

1. 目录结构

  1. bin: 二进制可执行文件存放的目录
  2. conf: 配置文件存放的目录
  3. webapps: 项目发布目录
  4. work: 工作目录
  5. log: 日志文件存放目录

2. tomcat发布项目的三种方式

  1. 直接将web项目丢到webapps下 web war 项目名称就是访问项目的虚拟目录 /web
  2. 修改 conf/server.xml 添加一个虚拟目录
    
    <Context path=""  docBase=""  /> <Context path=""  docBase=""  /> 
    
    
  3. /conf/Catalina/localhost目录下创建一个xml文件,xml文件的名称就是虚拟目录
    <?xml version="1.0" encoding="UTF-8"?>				 
    <Context  docBase=""  /> 
    
    

Servlet : 一个java小程序 web程序的入口

1. 创建Servlet

  1. 创建一个类实现Servlet接口
  2. 实现其中的方法
    servcie(ServletReuqest request,ServletResponse response) servcie(ServletReuqest request,ServletResponse response)
    inti()
    destroy()
    
    
    简化方案: 创建一个类继承 HttpServlet 类,重写 doGet/doPost

2. 配置Servlet HelloServlet

  1. xml配置
    <servlet>
    	<serlvet-name>HelloServlet</servlet-name>
    	<servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
    </servlet>			
    <servlet-mapping>
    	<serlvet-name>HelloServlet</servlet-name>
    	<url-parttern>/helo</url-parttern>
    </servlet-mapping>
    	
    

2. 注解配置

  • @WebServlet 替换web.xml中servlet的配置
  • value 配置访问路径
  • urlPatterns 配置访问路径

3. servlet访问路径的配置

  1. 完全匹配 /* 访问路径 和servlet的url-parttern配置完全一致的情况
    url: http://localhost:8080/web/hello
    url-parttern : /hello
  2. 目录匹配 /* /hello/* 访问路径 和servlet的url-parttern配置匹配一部分
    url: http://localhost:8080/web/hello/abc
    url-parttern : /hello/*
  3. 扩展名匹配 *.html 访问路径的扩展名 和servlet的url-parttern配置匹配一部分
    url: http: /localhost:8080/web/hello.html
    url-parttern : *.html

4. Servlet细节

  1. 生命周期

    1. 创建 : 默认用户第一次访问servlet的时候会创建servlet对象,执行其中init()方法完成初始化操作 执行一次
    2. 运行 : 每一次的用户请求都会执行其中的service()方法
    3. 销毁 : 服务器关闭或者项目被移除了,销毁servlet 执行destroy()方法,执行一次
  2. servlet体系结构

    1. Servlet接口
    2. GenericServlet 类
    3. HttpServlet 类
HTTP协议 : 规定了浏览器和服务器交互的数据格式

1. 请求

  1. 请求行 : 请求方式 请求路径 协议版本
  2. 请求头 :
    key:value1,value2
    referer: 请求的来源
    User-Agent: 客户机信息
  3. 请求体 :
    GET请求没有请求体,POST请求的参数 username=zs&password=123

2. 响应

  1. 响应行 : 协议 状态码 状态吗描述

    200: 请求成功
    302: 重定向
    304: 查找本地缓存
    404: 请求路径错误
    405: 请求方式不被允许
    500: 服务器内部异常

  2. 响应头 :

    key:value1,value2
    Content-type : 响应内容的数据格式
    Content-disposition : attachment;filename=xxx 以附件的形式打开响应
    location : 指定重定向的地址

  3. 响应体 : 输出的数据

3. HttpServletRequest对象
请求发送到服务器之后,由服务器创建的对象,封装的是http协议的请求信息

  1. 获取请求消息数据

    String method = request.getMethod();  //get/post
    String requestURI = request.getRequestURI();   //   /web10/user
    StringBuffer requestURL = request.getRequestURL(); //http://localhost:8080/web10/user
    String header = request.getHeader("User-Agent");// 客户机信息
    
    
  2. 获取请求参数数据

    //获取请求参数
    String username = request.getParameter("username"); //zs
    String[] hobbies = request.getParameterValues("hobby"); //[play,sleep]
    //获取所有的请求参数
    Map<String, String[]> map = request.getParameterMap(); //{username:[zs],hobby:[play,sleep]}
    
    
  3. 作为域对象存取数据 : 一次请求范围

    //作为域对象存取数据
    request.setAttribute("username","zs");
    String un = (String) request.getAttribute("username");
    request.removeAttribute("username");
    
    
  4. 实现页面跳转 转发

    //1. 获取请求转发器
    RequestDispatcher dispatcher = request.getRequestDispatcher("/login.jsp");
    //2. 转发
    dispatcher.forward(request,response);
    //链式编程~~ 
    request.getRequestDispatcher("/login.jsp").forward(request,response);
    
    
  5. 获取SerlvetContext对象

    //获取SerlvetContext对象
    ServletContext servletContext = request.getServletContext();
    
    

4. HttpServletResponse对象

请求发送到服务器之后,由服务器创建的对象,封装的是http协议的响应信息

  1. 设置响应消息数据
    //解决中文乱码问题
    response.setContentType("text/html;charset=utf-8");
    //设置响应状态吗
    response.setStatus(200);
    //设置响应头信息
    response.setHeader("Content-Type","text/html;charset=utf-8");
    //设置响应体信息 :  字节流和字符流不能同时进行使用
    //字符流设置
    response.getWriter().write("hello");
    //字节流设置
    response.getOutputStream().write("hello".getBytes("UTF-8"));	
    
    
  2. 页面跳转
    // 重定向: 如果request携带数据进行跳转,那么不能使用重定向只能页面转发
    //重定向的本质
    response.setStatus(302);
    response.setHeader("location",request.getContextPath()+"/login.jsp");
    //重定向的简化方案
    response.sendRedirect(request.getContextPath()+"/login.jsp");
    
    
  3. 文件下载 : 设置一个流 二个头
    1. 目标资源文件的输入流
    2. 设置Content-Type: 类型
    3. 设置Content-Disposition: 打开方式

5. SerlvetContext对象

  1. 获取SerlvetContext对象

    //获取SerlvetContext对象
    ServletContext servletContext = request.getServletContext();
    ServletContext servletContext = this.getServletContext();
    
    
  2. 获取文件的类型

    
    String mimeType = sc.getMimeType("aaa.txt");
    
    
  3. 读取web项目下的资源文件

    //获取文件的磁盘路径
    String realPath = sc.getRealPath("/bb.txt"); //web目录下
    String realPath1 = sc.getRealPath("/WEB-INF/bb.txt"); //WEB-INF目录下
    String realPath2 = sc.getRealPath("/WEB-INF/classes/bb.txt");
    //直接读取文件到内存
    InputStream is = sc.getResourceAsStream("/WEB-INF/classes/bb.txt");
    
    
  4. 作为域对象存取数据 : 整个web项目

    //作为域对象存取数据
    sc.setAttribute("username","zs");
    String un = (String) sc.getAttribute("username");
    sc.removeAttribute("username");	
    
    

6. Cookie : 客户端会话技术 保存少量不敏感数据在客户端

  1. 创建Cookie
    
    Cookie cookie = new Cookie(String name,String value)
    
    
  2. 向客户端写Cookie
    
    response.addCookie(cookie)
    
    
  3. 获取客户端发送到服务器的所有的Cookie
    
    Cookie[] cookies = request.getCookies()
    
    
  4. Cookie细节
    1. 浏览器可以存储多个cookie
    2. cookie的存储时间
      1. 默认浏览器关闭cookie销毁
      2. 设置cookie持久化到硬盘 setMagAge(int second)
        1. 正数: 持久化的时间
        2. 负数: 默认值,浏览器关闭cookie销毁
        3. 0: 删除cookie
    3. 设置cookie的访问路径 cookie.setPath(String path)
    4. 设置cookie的有效域名 cookie.setDomain("baidu.com")
  5. 记住用户上次访问时间

7. Session : 服务器会话技术

可以保存大量的任意类型的的数据到服务器

  1. 作用范围: 一次会话,多次请求(每一个客户端都会有自己的session区域)
  2. 获取session
    //获取session
    HttpSession session = request.getSession();
    
    
  3. 操作session
    //作为域对象存取数据
    session.setAttribute("username","zs");
    String un = (String) session.getAttribute("username");
    session.removeAttribute("username");	
    
    
  4. session细节
    1. 服务器不关闭,客户端关闭,二次获取的session是否是同一个 不是
    2. 服务器关闭,客户端不关闭,二次获取的session是否是同一个 不是 数据有可能是同一份(正常关闭服务器)
    3. session过期
      1. 服务器非正常关闭
      2. 调用session的session.invalidate();
      3. session过期(30分钟)

8. JSP : java服务器页面 HTML+java代码+JSP本身

  1. JSP指令: <%@page %>, <%@include %>, <%@taglib %>
  2. 脚本标签: <% %>, <%! %>, <%= %>
  3. JSP注释:<%-- --%>
  4. 内置对象:
    对象 <=======>真实类型
    1. pageContext<=======> PageContext
    2. request <=======> HttpServletRequest
    3. session <=======> HttpSession
    4. application<=======> ServletContext
    5. response <=======> HttpServletResponse
    6. out <=======> JspWiter
    7. page <=======> Object
    8. config <=======> ServletConfig
    9. exception <=======> Throwable

9、EL表达式

  1. 执行运算符

    1. 算术运算符:+,-,*,/,%
    2. 比较运算符:>,<,>=,<=,!=,==
    3. 逻辑运算符:&&,||,!
    4. 三元运算符 :3>4?“false”:true
  2. .获取数据 获取四个域中的数据

    1. ${域范围.键} :从指定域中获取数据
    2. ${键} :从四个域中从小到达依次查找,找到返回
    3. pageContextrequestsessionapplication

猜你喜欢

转载自blog.csdn.net/mollen/article/details/82881435
108
今日推荐