栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Servlet学习笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Servlet学习笔记

文章目录
  • 一、Servlet简介&快速入门
  • 二、Servlet执行流程&生命周期
    • 1、Servlet执行流程
    • 2、Servlet生命周期
    • 3、urlPattern配置
    • 4、Request继承体系
    • 5、Request获取请求数据
      • 请求行
      • 请求头
      • 请求体
      • 通用方式获取请求参数
      • 中文乱码解决
      • Request请求转发
    • 6、Response
      • 响应数据格式
      • Response完成重定向
      • 路径问题
      • Response响应字符数据
      • Response响应字节数据
    • 7、实现登录和注册

一、Servlet简介&快速入门
  • Servlet是Java提供的一种动态web资源开发技术
  • Servlet是JavaEE规范之一,其实就是一个接口,需要我们定义Servlet类来实现Servlet接口,并由web服务器来运行Servlet
  • Servlet开发步骤
    • 1、创建Web项目,导入Servlet依赖

    • 2、创建Servlet类,实现Servlet接口

    • 3、配置:在类上使用@WebServlet注解,配置该Servlet访问路径

    • 4、访问:启动tomocat,浏览器输入对应的URL访问


      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    
public class Servlet2 implements Servlet {
  public void service(){}
}
@@WebServlet("/Servlet2")
public class Servlet2 implements Servlet 
二、Servlet执行流程&生命周期 1、Servlet执行流程
  • 1、Servlet对象由谁创建?方法由谁调用?
    • Servlet对象由web服务器创建
    • Servelt方法由web服务器调用
  • 2、web服务器怎么知道Servlet一定有Servlet方法?
    • 因为我们自定义的Servlet类,一定要实现Servlet接口并复写Servlet方法 ,而Servlet接口中有Servlet方法
2、Servlet生命周期
  • Servlet运行在Servlet容器(Web服务器)中,生命周期由Servlet容器管理,分为四个阶段
    • 加载实例化:服务器第一次请求Servlet时创建Servlet对象
    • 初始化:第一次请求Servlet时调用初始化方法init()
    • 请求处理: 每一次请求Servlet时,容器都会调用service()方法队请求处理
    • 服务终止:当需要释放内存或服务器关闭时,容器调用destroy()方法完成资源释放。
3、urlPattern配置
  • Servlet想要被访问,必须要设置其访问路径
    • 一个Servlet可以配置多个访问路径
    • urlPattern配置规则
      • 精确匹配
      • 目录匹配
      • 扩展名匹配
      • 任意匹配
4、Request继承体系

  • tomcat需要解析请求数据,封装为request对象,并且创建request对象传递到Servlet方法中
  • 使用request对象,查阅JavaEE文档
5、Request获取请求数据 请求行
  • String getMethod():获得客户端向服务器端传送数据的方法
  • String getContextPath():获取虚拟目录,项目访问路径
  • StringBuffer getRequestURL():获取URL(统一资源占位符)
  • String getRequestURI():获取统一资源标识符
  • String getQueryString():获取请求参数(GET方式)
请求头
  • String getHeader(String name):根据请求头名称,获得值
请求体
  • ServeltInputStream getInputStream():获取字节输入流
  • BufferedReader getReader():获取字符输入流
通用方式获取请求参数
  • Map getParameterMap():获取所有参数Map集合
  • String[] getParameterValues(String naem):根据键的名称获取参数值[数组]
  • String getParameter(String name):根据键的名称获取单个参数值
中文乱码解决
  • post解决方案,设置字符输入流格式
request.setCharacterEncoding("UTF-8")
  • get解决方案
new String(name.getBytes(StandardCharsets.ISO_8859_1),StandardCharsets.UTF_8);
  • 此问题已在tomcat8中解决,tomcat的Maven依赖导入,pom.xml添加如下配置

    
      alfresco-public
      https://artifacts.alfresco.com/nexus/content/groups/public
    
    
      alfresco-public-snapshots
      https://artifacts.alfresco.com/nexus/content/groups/public-snapshots
      
        true
        daily
      
    
    
      beardedgeeks-releases
      http://beardedgeeks.googlecode.com/svn/repository/releases
    
  
  
    
      
        org.apache.tomcat.maven
        tomcat8-maven-plugin
        3.0-r1655215
      


    
  
Request请求转发
  • 实现方式
request.getRequestDispatcher("资源B路径").forward(request,response);
  • 请求转发间资源共享数据,使用Request对象
    • void setAttribute(String name ,Object o):存储数据到Request域中
    • request.getAttribute(“name”):根据key获取值
    • request.removeAttribute(“name”):根据key删除值
  • 请求转发特点
    • 浏览器地址栏不发生变化
    • 只能转发到当前服务器内部资源
    • 一次请求,可以在转发的request服务器之间共享数据
6、Response 响应数据格式
  • 响应行 HTTP/1.1 200 OK
void setStatus(int sc):设置响应状态码
  • 响应头 Content-Type:text/html
void setStatus(String name,String value):设置响应头键值对
  • 响应体
PrintWriter writer = response.getWriter():获取字符输入流
ServletOutputStream outputStream = response.getOutputStream():获取字节输入流
Response完成重定向
  • 重定向:一种资源跳转方式
  • 重定向代码
response.setStatus(int i):设置响应状态码
setStatus("Location","资源B的路径"):设置响应头
//简化方法
response.sendRedirect("资源B的路径");

  • 重定向特点:
    • 浏览器地址栏路径发生变化
    • 可以重定向到任意位置的资源
    • 两次请求,不能在多个资源使用request共享数据
路径问题
  • 浏览器使用需要加虚拟目录
  • 服务器端使用不需要加虚拟目录
  • 动态获取虚拟目录
response.sendRedirect(request.getContextPath()+"/ResponseDemo2")
Response响应字符数据
  • 使用
    • 1、通过Response对象获取字符输出流:PrintWriter writer =response.getWriter();
    • 2、写数据:writer.write("aaa")
    • 3、写html数据,需要设置响应数据格式:response.setHeader("content-type","text/html");
  • 注意
    • 1、获取的流不需要关闭,会随着response对象销毁而关闭
    • 2、简便字符流格式设置代码:response.setContentType("text/html;charset=utf-8");
Response响应字节数据
  • 使用
    • 1、通过Response对象获取字符输入流:ServletOutputStream outputStream = response.getOutputStream();
    • 2、写数据 :outputStream.write(字节数据);
      例子:
FileInputStream fileInputStream = new FileInputStream("C://Users/DELL/Desktop/捕获.png");
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] buff =new byte[1024];
        int len = 0;
        while ((len=fileInputStream.read(buff))!=-1){
            outputStream.write(buff,0,len);
        }

        fileInputStream.close();
  • 流的对拷可以使用IOUtils工具类,引入依赖:

      commons-io
      commons-io
      2.6

    

示例

FileInputStream fileInputStream = new FileInputStream("C://Users/DELL/Desktop/捕获.png");
        ServletOutputStream outputStream = response.getOutputStream();
        byte[] buff =new byte[1024];
//        int len = 0;
//        while ((len=fileInputStream.read(buff))!=-1){
//            outputStream.write(buff,0,len);
//        }
        IOUtils.copy(fileInputStream,outputStream);

        fileInputStream.close();
7、实现登录和注册

代码实现

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号