JavaWeb学习(二)--- Servlet

Servlet

简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet 的任务

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Servlet实例

准备

1.新建一个Web项目

在这里插入图片描述
在这里插入图片描述

2.在src下建一个包

在这里插入图片描述

3.在你创建的包下,new一个Servlet

在这里插入图片描述

在这里插入图片描述

4.new成功后,会直接进入web.xml

在这里插入图片描述

5.点开你创建的Servlet,会发现飘红

在这里插入图片描述

将鼠标放在servlet上,按ALT Enter两个键

在这里插入图片描述
在这里插入图片描述

然后IDEA会自动导入Servlet需要的包

6.配置Tomcat

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一个Servlet代码

1.编写Servlet类

package priv.sehun.Servlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class ServletDemo extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {

        //防止乱码
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        String str = "你好,世界";
        //将字符串响应到网页
        response.getWriter().println(str);


    }
}

2.配置web.xml

在这里插入图片描述

    <servlet>
        <servlet-name>ServletDemo</servlet-name>
        <servlet-class>priv.sehun.Servlet.ServletDemo</servlet-class>
    </servlet>

    <!--====================================================================-->
    <servlet-mapping>
        <servlet-name>ServletDemo</servlet-name>
        <url-pattern>/haha</url-pattern>
    </servlet-mapping>

3.运行

在这里插入图片描述
在这里插入图片描述

4.在浏览器访问查看

localhost:8080/Demo/haha

5.运行结果:

在这里插入图片描述

6.注意

每修改一次代码,都要运行一次,然后再访问查看

在这里插入图片描述

其他示例

一个动态刷新的图片验证码

运行结果如下:每隔两秒自动刷新

在这里插入图片描述
在这里插入图片描述

主要代码:

package priv.sehun.Servlet;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //自动刷新网页
        resp.setHeader("refresh","2");

        //制作一个图片作为验证码
        BufferedImage image = new BufferedImage(500,100,BufferedImage.TYPE_3BYTE_BGR);

        //设置图片的属性
        Graphics2D graphics = image.createGraphics();
        graphics.setColor(Color.pink);
        Font font = new Font(null,Font.BOLD,100);
        graphics.setFont(font);
        //往图片里写入随机数
        String num = String.valueOf(newRandom());
        graphics.drawString(num,100,80);


        //让浏览器知道我们给的是一张图片
        resp.setContentType("image/jpg");

        //ImageIO默认是使用缓存目录,可以通过ImageIO.setUseCache(false)来设置,更改缓存策略,不使用文件目录缓存,使用内存缓存
        //不加这行代码可能会到505界面
        ImageIO.setUseCache(false);
        //让网站去打开图片
        ImageIO.write(image,"jpg",resp.getOutputStream());

    }
    //生成随机数
    public int newRandom(){
        int num = (int)(Math.random()*9+1)*79779;
        return num;
    }

}

配置web.xml

    <servlet>
        <servlet-name>ServletDemo2</servlet-name>
        <servlet-class>priv.sehun.Servlet.ServletDemo2</servlet-class>
    </servlet>

 <!--====================================================================-->

    <servlet-mapping>
        <servlet-name>ServletDemo2</servlet-name>
        <url-pattern>/code</url-pattern>
    </servlet-mapping>
通过servletContext对象读取网站配置文件

1.新建一个properties文件

在这里插入图片描述

name=百香果女孩
age=18
info=博君一肖使我快乐
url=jdbc:mysql://localhost:3306/smbms

2.编写servlet类

package priv.sehun.Servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

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

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.获得配置文件的路径
        String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/resources/database.properties");

        Properties properties = new Properties();
        FileInputStream is = new FileInputStream(realPath);

        //把文件流加载到配置文件的对象中;
        properties.load(is);

        String name = properties.getProperty("name");
        String age = properties.getProperty("age");
        String info = properties.getProperty("info");
        String url = properties.getProperty("url");


        //响应到网页
        resp.getWriter().println(name);
        resp.getWriter().println(age);
        resp.getWriter().println(info);
        resp.getWriter().println(url);

    }
}

3.配置web.xml

   <servlet>
        <servlet-name>Servlet3</servlet-name>
        <servlet-class>priv.sehun.Servlet.ServletDemo3</servlet-class>
    </servlet>
<!--====================================================================-->
    <servlet-mapping>
        <servlet-name>Servlet3</servlet-name>
        <url-pattern>/s</url-pattern>
    </servlet-mapping>

4.运行结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值