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

Servlet常见方法与生命周期(HttpService,Cookie,Httpsession)

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

Servlet常见方法与生命周期(HttpService,Cookie,Httpsession)

Author:老九
计算机专业
可控之事 沉重冷静 不可控之事 乐观面对
85180586@qq.com
         ☺️  

      ❓  ❤️ ☕️       ❗️ 
————————————————
版权声明:本文为CSDN博主「浦上青天」的原创文章

文章目录
  • Servlet处理Http请求的生命周期
  • 操作HTTP Request头的方法
  • 操作HTTP Response头的方法
  • 设置 HTTP 状态码的方法
  • Servlet 操作cookie方法
  • Servlet 操作session方法
  • Servlet文件上传理解

知识点

Servlet处理Http请求的生命周期

1.Servlet通过调用init()方法进行初始化

它在第一次创建servlet时被调用,在后续每次用户请求时不再调用。因此他是用于一次性初始化

2.Servlet调用service()方法来处理客户端的请求

Servlet容易调用service()方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。每次服务器收到一个servlet请求时,服务器会产生一个新的线程并调用服务。service()方法检查HTTP请求类型(GET,POST,PUT,DELETE等),并在适当的时候重写doXXX方法。这个就是多态的典型场景

3.Servlet通过调用destroy()方法终止

destroy()方法可以让servlet关闭数据库连接,停止后台线程,把cookie刘表或者点击计数器写入磁盘,并执行其他类似的清理活动。在调用destroy()方法之后,servlet对象被标记为垃圾回收

操作HTTP Request头的方法

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;

public class HttpServletTest1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html; charset=utf-8");

        String encoding = req.getCharacterEncoding();
        String contentType = req.getContentType();
        String contextPath = req.getContextPath();
        String ua = req.getHeader("User-Agent");
        String host = req.getHeader("Host");
        String method = req.getMethod();
        String protocol = req.getProtocol();
        String queryString = req.getQueryString();
        String url = req.getRequestURI();
        int contentLength = req.getContentLength();

        Writer writer = resp.getWriter();
        writer.write("");
        writer.write("encoding: " + encoding);
        writer.write("
"); writer.write("contentType: " + contentType); writer.write("
"); writer.write("contextPath: " + contextPath); writer.write("
"); writer.write("ua: " + ua); writer.write("
"); writer.write("host: " + host); writer.write("
"); writer.write("method: " + method); writer.write("
"); writer.write("protocol: " + protocol); writer.write("
"); writer.write("queryString: " + queryString); writer.write("
"); writer.write("url: " + url); writer.write("
"); writer.write("contentLength: " + contentLength); writer.write("
"); writer.write(""); } }
  • form表单静态页面访问



    
    Welcome


  • 实现代码
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;

public class HttpServletTest2 extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String firstName = req.getParameter("firstName");
        String secondName = req.getParameter("secondName");
        String password = req.getParameter("password");
        resp.setContentType("text/html; charset=utf-8");

        Writer writer = resp.getWriter();
        writer.write("");
        writer.write("firstName: " + firstName + "");
        writer.write("secondName: " + secondName + "");
        writer.write("
"); writer.write("password: " + password + ""); writer.write(""); } }
  • 获取header部分、
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;
import java.util.Enumeration;

public class HttpServletTest3 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //resp.setContentType("text/html; charset=utf-8");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        //返回的是一个枚举
        Enumeration enumeration = req.getHeaderNames();

        Writer writer = resp.getWriter();
        writer.write("");

        while (enumeration.hasMoreElements()) {
            String header = enumeration.nextElement();

            writer.write("" + header + ": " + req.getHeader(header) + "");
        }
        writer.write(" 
操作HTTP Response头的方法 

  • 返回一个404
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpServletTest5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 得到一个 Tomcat 内置的错误页面.
        resp.sendError(404);
    }
}


  • 返回时间并设置一秒刷新一次
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;
import java.util.Date;

public class HttpServletTest4 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 每秒自动刷新
        // 返回的页面中, 填写上当前时间.
        // 获取当前时间
        // System.currentTimeMillis();
        // new Date();
        // new Calender();
        resp.setContentType("text/html; charset=utf-8");
        //设置header部分 1 表示每间隔一秒
        resp.setIntHeader("Refresh", 1);
        Date date = new Date();

        Writer writer = resp.getWriter();
        writer.write("");
        writer.write("" + date.toString() + "");
        writer.write("");
    }
}


  • 返回重定向
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpServletTest6 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //重定向到一个网页 这个方法自动帮我们设置了respond的状态码和状态描述等相关信息
        resp.sendRedirect("https://blog.csdn.net/Shangxingya/article/details/107295800");
    }
}


设置 HTTP 状态码的方法

Servlet 操作cookie方法

  • 设置cookie
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HttpServletTest7 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //构建一个Cookie
        Cookie name = new Cookie("userName", "listen");
        Cookie password = new Cookie("password", "listenY");
        //把cookie写到respond中
        resp.addCookie(name);
        resp.addCookie(password);
        resp.setContentType("text/html; charset=utf-8");
        resp.getWriter().write("设置Cookie成功");
    }
}


  • 获得cookie
在这里插入代码片import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;

public class HttpServletTest8 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //获得Cookie字段
        Cookie[] cookies = req.getCookies();
        //将所有的cookie输出到响应报文中
        resp.setContentType("text/html; charset=utf-8");
        Writer writer = resp.getWriter();
        writer.write("");
        for (Cookie c : cookies
             ) {
            writer.write("" + c.getName() + ": " + c.getValue() + "");
        }
        writer.write("");
    }
}


  • 删除cookie
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.Writer;

public class HttpServletTest10 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //删除现有的cookie
        //获取所有cookie 然后将这些cookie的生命时间设置为0
        //将这些cookie保存在响应报文中
        Cookie[] cookies = req.getCookies();
        // 设置响应内容类型
        resp.setContentType("text/html; charset=utf-8");

        if (cookies != null) {
            for (Cookie c : cookies
                 ) {
                c.setMaxAge(0);
                resp.addCookie(c);
            }

            Writer writer = resp.getWriter();
            writer.write("");
            writer.write("删除cookie成功");
        } else {
            Writer writer = resp.getWriter();
            writer.write("");
            writer.write("当前没有cookie");
        }
    }
}


Servlet 操作session方法

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.Writer;

public class HttpServletTest9 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 1. 先获取 Session. 如果用户曾经没有访问过, 此时将创建新的 session
        //    如果用户已经访问过了, 就获取到曾经的 Session
        //    新用户访问:
        //    这个操作就会自动生成一个 sessionId, 同时创建一个 httpSession 对象
        //    把这个键值对放到内置的 hash 表中. 同时把 sessionId 写回到浏览器的
        //    Cookie 中
        //    老用户访问:
        //    根据请求中 Cookie 里的 sessionId, 在 hash 表中查, 找到对应的 session 对象
        HttpSession session = req.getSession(true);
        // 2.判断是否为新用户
        Integer count = 1;
        if (session.isNew()) {
            //新用户
            // 把 count 值写入到 session 对象中.
            // httpSession 也可以当成是一个 hash 表.
            session.setAttribute("count", count);
        } else {
            // 老用户
            // 从 httpSession 中读取到 count 值
            count = (Integer) session.getAttribute("count");
            count++;
            session.setAttribute("count", count);
        }
        resp.setContentType("text/html; charset=utf-8");
        Writer writer = resp.getWriter();
        writer.write("");
        writer.write("" + session.getAttribute("count").toString() + "");
        writer.write("");

    }
}


Servlet文件上传理解
  • 前端表单



    
    上传文件表单


选择上传的文件


  • 文件传输代码
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.Writer;

//必须要有这个字段表示文件上传
@MultipartConfig
public class HttpServletTest11 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String loadPath = "D:\java\test\";
        //获取文件,文件在html中的name是“file”
        Part imag = req.getPart("file");
        //制作文件全路径
        String path = loadPath + imag.getSubmittedFileName();
        imag.write(path);
        //如果上传成功就制作响应报文
        resp.setContentType("text/html; charset=utf-8");
        Writer writer = resp.getWriter();
        writer.write("");
        writer.write("写入成功");
        writer.write("路径为: " + path + "");
    }
}


先赞后看,养成习惯!!!^ _ ^♥♥♥
每天都更新知识点哦!!!
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘记关注我哦!

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

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

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