Servlet

Servlet

​ 用于开发动态web的技术。

​ 是一个接口,定义了Java被浏览器访问到的规则。

​ 步骤:

​ 编写类,实现Servlet接口

​ 把已完成的java类部署至web服务器

Servlet接口

​ 有两个实现类 HttpServlet GenericServlet

​ 通常需要重写doPost、doGet

​ eg:

​ 1.构建Maven项目。

​ 2.prom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rz</groupId>
    <artifactId>java-web</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>servlet-01</module>
    </modules>


    <dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
        </dependency>
    </dependencies>
</project>

​ 3.创建web子工程

​ 4.web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">
  
</web-app>

5.创建Servlet实现类

public class ServletDemo extends HttpServlet {

    //可以相互调用,业务逻辑一致
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter(); //相应流
        writer.print("Hello");

    }

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

6.编写Servlet的映射

​ web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.rz.servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

7.配置Tomcat

8.开启测试

​ 访问/hello

Servlet原理

​ 由Web服务器调用。

浏览器 - 发生请求 - web容器 1.产生Servlet
						 2.产生请求  Request
						 2.产生响应	Reponse
						 3.调用Servlet的    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
						 3.请求体拿到请求后会把响应交给Response
						 4.web容器读取响应信息
						 5.响应给客户端
		【可重写Servlet实现类,使请求、响应方法改变】

ServletContext

​ 它会为每个Web程序创建ServletContext对象,使它代表当前的web应用

​ 有利于 数据共享、相互调用

1.数据共享

发送内容的servlet

public class ServletDemo extends HttpServlet {

    //可以相互调用,业务逻辑一致
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();

        String username = "Tom";
        context.setAttribute("name",username); //将数据保存在getServletContext中

    }

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

获取内容的servlet

public class getServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        String name = (String) context.getAttribute("name");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print(name);
    }
}

相对应的web-xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.rz.servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>get</servlet-name>
        <servlet-class>com.rz.servlet.getServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>get</servlet-name>
        <url-pattern>/get</url-pattern>
    </servlet-mapping>
</web-app>

测试过程:

​ 先访问 /hello -> /get 成功显示 “Tom”

2.获取初始化参数

​ web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">

    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost:3306/mybatis</param-value>
    </context-param>

    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.rz.servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>

class

public class ServletDemo extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context = this.getServletContext();

        String url = context.getInitParameter("url");
        System.out.println(url);//jdbc:mysql://localhost:3306/mybatis
    }

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

3.请求转发

context.getRequestDispatcher("url:").forward(res,resp);

​ [路径不变化、但内容可以是请求到的内容]

​ ( A -> B -> C)

4.请求资源文件[new Properties()]

HttpServletResponse

​ 用于负责响应的作用

源码相关方法

​ 发送数据的方法

ServletOutputStream getOutputStream() throws IOException;

PrintWriter getWriter() throws IOException;

​ 向浏览器发送响应头的方法

void setCharacterEncoding(String var1);

void setContentLength(int var1);

void setContentLengthLong(long var1);

void setContentType(String var1);

void setDateHeader(String var1, long var2);

void addDateHeader(String var1, long var2);

void setHeader(String var1, String var2);

void addHeader(String var1, String var2);

void setIntHeader(String var1, int var2);

void addIntHeader(String var1, int var2);

常见应用

1.向浏览器输出数据

字符输出流:PrintWriter getWriter()
字节输出流:ServletOutputStream getOutputStream()

2.下载文件

​ 获取下载文件路径

​ 下载文件的名字

​ 设置浏览器支持所下载的数据

​ 获取下载文件的输入流

​ 创建缓冲区

​ 获取OutputStream对象

​ 将FileOutputStream流写入buffer缓冲区

​ 使用OutputStram将缓冲区的数据输出到客户端

class

public class ServletDemo extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.
        String realPath = this.getServletContext().getRealPath("/FilePath-要下载的文件路径");
        //2
        String fileName = realPath.substring(realPath.lastIndexOf("\\" + 1));
        //3
        resp.setHeader("Content-Disposition","attachment;filename="+fileName);
        //4
        FileInputStream inputStream = new FileInputStream(realPath);
        //5
        int len = 0;
        byte[] bytes = new byte[1024];
        //6.
        ServletOutputStream outputStream = resp.getOutputStream();
        //7.
        while ((len = inputStream.read(bytes))>0){
            outputStream.write(bytes,0,len);
        }
        inputStream.close();
        outputStream.close();

    }

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

web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">



    <servlet>
        <servlet-name>reps</servlet-name>
        <servlet-class>com.rz.servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>reps</servlet-name>
        <url-pattern>/reps</url-pattern>
    </servlet-mapping>

</web-app>

3.重定向

​ web资源收到客户端请求,通知那个web资源,该过程为重定向

sendRedirect

则在浏览器中输入要访问的 rediect,则网页会自动跳转为 想访问的页面

web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                            http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0"
         metadata-complete="true">



    <servlet>
        <servlet-name>rediect</servlet-name>
        <servlet-class>com.rz.servlet.ServletDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>rediect</servlet-name>
        <url-pattern>/rediect</url-pattern>
    </servlet-mapping>

</web-app>

class

public class ServletDemo extends HttpServlet {

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

        resp.sendRedirect("/web-path");
    }

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

原理:

resp.setHeader("Location","/web-path");
resp.setStatus(302);

重定向和转发的区别

​ 共同点

​ 页面都会调整

​ 不同点

​ 请求转发时,url不会变化

​ 重定向时,url会产生变化

HttpServletRequest

用于负责请求的作用,当用户浏览服务器时,会通过HTTP协议访问服务器,则HTTP会把所有的信息都封装到HttpServletRequest中。

获取前端的参数

+String getParameter(String var1)String
+String[] getParameterValues(String var1):String[]

请求转发

getRequestDispatcher("/Path").forward(req,resp)//其中 "/" 代表当前Web应用
内容概要:本文档主要介绍了Intel Edge Peak (EP) 解决方案,涵盖从零到边缘高峰的软件配置和服务管理。EP解决方案旨在简化客户的入门门槛,提供一系列工具和服务,包括Edge Software Provisioner (ESP),用于构建和缓存操作系统镜像和软件栈;Device Management System (DMS),用于远程集群或本地集群管理;以及Autonomous Clustering for the Edge (ACE),用于自动化边缘集群的创建和管理。文档详细描述了从软件发布、设备制造、运输、安装到最终设备激活的全过程,并强调了在不同应用场景(如公共设施、工业厂房、海上油井和移动医院)下的具体部署步骤和技术细节。此外,文档还探讨了安全设备注册(FDO)、集群管理、密钥轮换和备份等关键操作。 适合人群:具备一定IT基础设施和边缘计算基础知识的技术人员,特别是负责边缘设备部署和管理的系统集成商和运维人员。 使用场景及目标:①帮助系统集成商和客户简化边缘设备的初始配置和后续管理;②确保设备在不同网络环境下的安全启动和注册;③支持大规模边缘设备的自动化集群管理和应用程序编排;④提供详细的密钥管理和集群维护指南,确保系统的长期稳定运行。 其他说明:本文档是详细描述了Edge Peak技术及其应用案例。文档不仅提供了技术实现的指导,还涵盖了策略配置、安全性和扩展性的考虑,帮助用户全面理解和实施Intel的边缘计算解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值