Servlet重要类及其方法的应用

这篇具有很好参考价值的文章主要介绍了Servlet重要类及其方法的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Servlet重要类及其方法的应用

Servlet重要类及其方法的应用

1.1 HttpServlet的一些方法介绍

//        this.getInitParameter();得到初始化参数
//        this.getServletConfig();得到servlet配置就是web.xml中我们写的配置
//        this.getServletContext();得到servlet上下文

1.2 ServletContext

web容器(tomcat)在启动的时候,它会为每个web程序创建一个对应的ServletContext对象,它代表当前的web应用。

作用:

  • 共享数据:不同servlet之间(类似vue的store)

    //第一个servlet中
    ServletContext servletContext = this.getServletContext();
    String username = "lihua";
    //将数据保存在其中,通过第一个参数取出数据,第二个参数是值
    servletContext.setAttribute("username",username);
    
    //另外一个servlet
            ServletContext servletContext2 = this.getServletContext();
            String username = (String)
     //取出
                servletContext2.getAttribute("username");
    //设置格式
    resp.setContentType("text/html;charset=utf-8")
    //打印到响应中
            resp.getWriter().print(username);
    
    • 获取初始化参数
    <!--在web.xml中-->
    <!--    配置一些web应用初始化参数:就是一些键值对-->
        <context-param>
            <param-name>url</param-name>
            <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
        </context-param>
    
    //获取初始化参数
    ServletContext servletContext = this.getServletContext();
    String url = servletContext.getInitParameter("url");
        //jdbc:mysql://localhost:3306/mybatis
    
  • 请求转发

    ServletContext servletContext = this.getServletContext();
            //需要转发的请求路径
            RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/hello");
            requestDispatcher.forward(req,resp);//实现请求转发
            //合并前两句
    //        servletContext.getRequestDispatcher("/hello").forward(req,resp);
            
    

    现在本servlet路径显示的是/hello路径的页面

  • 读取资源文件

    Properties:

    • 在java目录下新建properties(如db.properties)
    • 在resources目录下新建properties

    发现都被打包到同一个路径下:classes,俗称类路径

    ServletContext servletContext = this.getServletContext();
    //把资源变成流
    InputStream resourceAsStream = servletContext.getResourceAsStream("/WEB-INFO/classes/db.properties");
    Properties properties = new Properties();
    properties.load(resourceAsStream);
    String username = properties.getProperty("username");
    //得到:helloworld
    
    //db.properties中:
    username=helloworld
    

1.3 HttpServletResponse

web服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpsServletRequest代表,代表响应的一个HttpServletResponse

  • 如果要获取客户端请求过来的参数,找HttpServletRequest
  • 如果要给客户端响应一些信息,找HttpServletResponse

简单分类方法:

  1. 负责向浏览器发送信息的方法

    • getOutputStream()//字节流
      getWriter()//字符,用来写中文等
      //这些方法都是继承自ServletResponse
      
  2. 负责向浏览器发送响应头的方法

    • setCharacterEncoding(String charset)
      setContentLength(int len)
      setContentLengthLong(long len)
      setContentType(String type)
      //上述方法继承自ServletResponse
      addDateHeader(String name, long date)
      setHeader(String name, String value)
      addHeader(String name, String value)
      setIntHeader(String name, int value)
      addIntHeader(String name, int value)
      //这些是自己类的方法,而且不止这些
      
  3. 响应码和设置响应码的方法

一些应用:

  1. 向浏览器输出消息:不多说,上面一直在演示

  2. 下载文件

    //        1.获取下载路径
            String realPath ="C:\\Users\\adminster\\Desktop\\雨夜.png";
    //        2.获取下载文件名
    //            截取字符串获取文件名字
    
            String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
    //        3.想办法让浏览器支持下载(设置响应头)
    //            如果文件路径有中文的话需要UrlEncoder
            resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"UTF-8"));
    //        4.获取下载文件的输入流
            FileInputStream fileInputStream = new FileInputStream(realPath);
    //        5.创建缓冲区
            int len = 0;
            byte[] bytes = new byte[1024];
    //        6.获取OutputStream对象
            ServletOutputStream outputStream = resp.getOutputStream();
    //        7.将OutputStream流写入缓冲区
            while ((len=fileInputStream.read(bytes))>0){
                outputStream.write(bytes,0,len);
            }
            fileInputStream.close();
            outputStream.close();
    //最后成功下载文件
    
  3. 验证码功能

    验证码是怎么来的:

    • 前端实现
    • 后端实现,需要用到java的图片类生成一个图片
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //       让浏览器三秒刷新一次
            resp.setHeader("refresh","3");
    //        在内存创建一个图片,参数宽高颜色
            BufferedImage bufferedImage = new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
    //        图片的画笔
            Graphics2D graphics2D = (Graphics2D) bufferedImage.getGraphics();
    //        设置图片背景颜色
            graphics2D.setColor(Color.RED);
    //        填充图形
            graphics2D.fillRect(0,0,80,20);
    //        给图片写数据
            graphics2D.setColor(Color.blue);
            graphics2D.setFont(new Font(null,Font.BOLD,20));
            graphics2D.drawString(makeNum(),0,20);
    
    //        告诉浏览器这个请求以图片jpeg的形式打开
            resp.setContentType("image/jpeg");
    //        网站存在缓存,我们阻止其缓存,下面三行可以不掌握
            resp.setDateHeader("expires",-1);
    //        缓存控制,设置为不缓存
            resp.setHeader("Cache-Control","no-cache");
    //        Pragma
            resp.setHeader("Pragma","no-cache");
    
    //        把图片写给浏览器,以imageIO的形式
            ImageIO.write(bufferedImage,"jpg",resp.getOutputStream());
    
        }
        private  String makeNum(){
            Random random = new Random();
    //        生成随机数[0,10000000) int ;
            String s = random.nextInt(10000000) + "";
            //以下步骤都是为了当为啥不够七位时补零
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < 7 - s.length(); i++) {
                sb.append("0");
            }
            s = sb.toString() + s;
            return s;
    
        }
    

    效果:同时每三秒刷新一次为不同数字

Servlet重要类及其方法的应用

  1. Response重定向(最重要)

    至于什么是重定向?感觉说过很多次了,就是web资源收到客户端请求之后,让它去访问另外一个资源的过程

    //重定向操作:
    resp.sendRedirect("/SonMaven_war/img");
    //重定向路径不能只写个/img,还需要加上部署的项目名
    

    状态码3开头都是重定向请求

    转发和重定向的区别:(131条消息) 请求转发和重定向_豆虫儿的博客-CSDN博客

    请求转发:request.getRequestDispatcher(URL地址).forward(request, response)

    重定向:response.sendRedirect(URL地址)

    重定向之后url地址变化,转发不变

1.4 HttpServletRequest

代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中的所有信息会被封装得到HttpServletRequest

方法介绍一些重要的:

  1. 获取前端传递的参数

    //一个表单,index.jsp中
    //修改编码
    <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
    <form action="${pageContext.request.contextPath}/hello" method="get">
        用户名:<input type="text" name="username"><br>
        密码:<input type="password" name="password"> <br>
        <input type="submit">
            
     servlet中      
    //        解决后台中文乱码
            req.setCharacterEncoding("utf-8");
    //        得到表单参数
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            
            resp.setCharacterEncoding("utf-8");
    //       一组同名的可以用
    // String[] password =req.getParameterValues("password")
    
    
  2. 请求转发

    //        请求转发,不像重定向不需要写部署项目路径
    req.getRequestDispatcher("/error").forward(req,resp);
    //只改变页面,路径不变
    

问题一如何解决封装到端口被占用?

打开cmd,输入netstat -aon | find "1099",数字是被占用的端口号,然后打开任务管理器,输入该进程的pid号结束进程

问题二不允许有匹配 [xX][m M][lL] 的处理指令目标

原因web.xml中

<?xml version="1.0" encoding="UTF-8" ?>

必须放在第一行文章来源地址https://www.toymoban.com/news/detail-486406.html

到了这里,关于Servlet重要类及其方法的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 系统架构主题之五:软件系统建模方法及其应用

    前面我们梳理了需求分析的相关内容。完成需求分析后,会输出指导软件开发的需求规格说明书。有了该文档的支持,下一步就是系统设计阶段,用于将软件需求的内容转换为可指导软件开发的概要设计和详细设计文档。下面我们从理论和实践上看看如果做系统设计。 1 信息

    2024年02月07日
    浏览(41)
  • 论文写作框架示例:论软件系统建模方法及其应用

    本章内容参考了51cto的薛老师的《软考论文高分特训与范文10篇》的内容,是帮助初学者打开写作思路的工具,而不是必须要遵循的模式。建议软考人多读多看论文范文,一旦考生掌握了写作方法,有了自己的写作思路,大都不会完全依据格式化的框架来编写文章。 软件系统

    2024年02月08日
    浏览(50)
  • 关于蒙特卡罗方法及其在信号处理中的应用

        最近想探讨一下毫米波雷达测量准确度及其改善的问题,这个话题下可供讨论的问题有很多,蒙特卡罗方法(或者说基于蒙特卡罗方法对测量准确度以及精度的评估)是其中之一,该方法是一个十分有效的工具,在科研(发paper)上也是不可少的。在探讨测量的准确度之前,我

    2024年02月05日
    浏览(45)
  • 软件工程的概念及其重要性

    软件工程是指将工程原理和方法应用于软件开发过程的学科,涉及软件的设计、开发、测试、维护和管理等各个阶段。它旨在提高软件开发的效率和质量,并确保软件满足用户的需求和预期。 软件工程的重要性体现在以下几个方面: 提高开发效率:软件工程通过采用系统化

    2024年02月09日
    浏览(46)
  • 数据链路层及其重要协议——以太网

    以太网: 不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络拓扑结构,访问控制方式,传输速率等。以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等。以太网是当前应用最广泛的局域网技术,

    2024年02月03日
    浏览(61)
  • 集线器的三个重要概念及其优缺点

    集线器的概念 集线器的英文称为“Hub”。“Hub”是“中心”的意思,集线器的主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。它工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层”。集线器与

    2024年02月07日
    浏览(46)
  • 网站SSL安全证书是什么及其重要性

    网站SSL安全证书具体来说是一个数字文件,是由受信任的数字证书颁发机构(CA机构)进行审核颁发的,其中包含CA发布的信息,该信息表明该网站已使用加密连接进行了安全保护。 网站SSL安全证书也被称为SSL证书、https证书和服务器证书,它的主要作用就是保护网站的基本安

    2024年02月13日
    浏览(42)
  • 安全文件传输的重要性及其对企业的影响

    在当今的信息时代,企业之间的文件传输已经成为日常工作的重要组成部分。无论是在商务合作、人力资源还是财务审计等方面,文件传输都发挥着关键的作用。然而,随着网络技术的发展,网络安全问题也日益突出,泄漏、篡改、丢失等问题层出不穷,给企业造成了巨大的

    2024年02月14日
    浏览(44)
  • 以管理员身份修改hosts文件的方法及其在大数据中的应用

    以管理员身份修改hosts文件的方法及其在大数据中的应用 hosts文件是一个计算机网络中的重要配置文件,用于将主机名映射到相应的IP地址。以管理员身份修改hosts文件是一种常见的操作,可以用于实现特定网站的屏蔽、重定向或加速访问等功能。在大数据领域,修改hosts文件

    2024年02月08日
    浏览(41)
  • 解密RabbitMQ:你所不知道的端口及其重要性

    在当今互联网时代,消息中间件已成为实现分布式系统和微服务架构的关键组件之一。RabbitMQ作为最受欢迎的消息队列之一,不仅提供强大的消息传递功能,还隐藏了一系列神秘的端口。这些端口扮演着关键的角色,影响着RabbitMQ的性能和安全性。本文将深入研究RabbitMQ的不同

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包