IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 超详细Servlet讲解 -> 正文阅读

[Java知识库]超详细Servlet讲解

Servlet详解

概述:sun公司开发动态web的一门技术,在这些API中提供了个接口叫Servlet,开发一个Servlet程序只需要编写接口的实现类,并部署到web服务器中。

Servlet配置步骤

  1. 构建一个普通maven项目,删掉src包,作为maven主工程。在pom.xml中添加servlet,jsp的依赖。直接网上搜maven repository,在里面根据关键字搜索,找个靠谱的把代码粘贴到新建的<dependencies>标签里,报红线点开maven右边栏刷新下载即可,如

    <dependencies>
            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>4.0.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.3.1</version>
                <scope>provided</scope>
            </dependency>
    
        </dependencies>
    
  2. 在主项目里创建子Moudel,点上小对勾,选中maven-...-webapp,再给子项目起名,然后查看目录、配置文件、仓库的路径对不对(可能会默认在C盘新建),子工程就建好了。

    主项目的pom.xml文件中会有<modules>标签,子项目会自动继承,相当于有<parent>标签,主项目中的jar包子项目可以直接使用

  3. maven环境优化,修改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>
    

    再讲maven结构搭建完整,在main目录下补java目录和resources

  4. 编写Servlet程序,即创建实现类继承HttpServlet(一个Servlet的半实现类),重写主要方法

    public class HelloServelt extends HttpServlet {
        //get和post只是请求实现的不同方式,业务逻辑一样,可以互相调用
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            PrintWriter writer = resp.getWriter();//响应流
            writer.println("Hello,servlet!!!");//页面显示
            System.out.println("进入doGet");//控制台打印
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  5. 注册及编写servlet的映射(在web.xml中)

    因为Java程序要通过浏览器访问,浏览器连接web服务器,所以我们需要在web服务器中注册写的servlet,提供一个访问路径

    <!--注册servlet-->
      <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.Yong.servlet.HelloServelt</servlet-class>
      </servlet>
    
      <!--servlet的请求路径,注意前面加“/”-->
      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/Hello</url-pattern>
      </servlet-mapping>
    
  6. 配置tomcat

    点击工具栏的run,Edit Configurations,点加号,选small tomcat,修改name为Tomcat 9(好看而已),根据需求看是否要该项目路径,默认为子项目名,applyok

  7. 启动测试,localhost:8080/项目路径/servlet请求路径,会生成一个target

Ps:Mapping问题

一个servlet可以指定一个映射路径(如上文),也可以指定多个路径,通用路径,指定后缀前缀(*.)等,只写/*为默认路径。但指定的固有映射路径优先级最高,找不到才回去走默认路径。


Servlet运行原理


ServletContext

概述:web容器在启动时,会为每一个web程序创建一个对应的ServletContext对象,来代表当前的web应用。常用于共享和保存数据。主要功能有:

  1. 可通过对象.setAttribute(属性,值对象)设置属性并赋值(类似于键值对),同一个包下其他servlet程序通过this.getServletContext()获取该对象,再调用getAttribute(属性)取值,需要强制转型。
  2. 获取初始化参数:先在web.xml中添加参数标签,再调用getInitParameter()
  3. 请求转发:getRequestDispatcher("/请求路径").forward(req,reps),相当于自己访问不到委托别人去访问,但还是自己的路径不变。
  4. 读取资源文件propertiesgetResourceAsStream("/资源路径"),再new Properties().load(流对象)下载流,prop.getProperty(资源文件里的属性)取值。

HttpServletResponse

背景:服务器在接到浏览器得http请求后,会分别创建HttpServletResponse和HttpServletRequest对象,用于存放响应信息和请求参数。

常见应用:

  1. 向浏览器输出消息

    getOutputStream()getWriter()(有中文字符时使用,可能造成字符串丢失),还有对应的向浏览器发送响应头,响应状态码的方法

  2. 下载文件

    //1. 获取要下载文件的路径
            String realPath = "D:\\IDEA\\javaweb-02-servlet\\response\\src\\main\\resources\\1.jpg";
            //2. 获取下载的文件名,通过路径最后一个”/“后的字符串,第一个”/“是转义字符
            String filename = realPath.substring(realPath.lastIndexOf("\\")+1);
            //3. 设置让浏览器支持下载,搜索下载文件的消息头头格式(响应的配置信息,包含附件)
            resp.setContentType("text/html;charset=UTF-8");//浏览器根据该类型来指定程序解析对应类型的文件
            resp.setHeader("Content-Disposition","attachment;filename="+filename);
            //4. 获取下载文件的输入流
            FileInputStream is = new FileInputStream(realPath);
            //5. 创建缓冲区
            int len = 0;
            byte[] buffer = new byte[1024];
            //6. 获取OutputStream输出流对象
            ServletOutputStream os = resp.getOutputStream();
            //7. 将输入流写入缓冲区,使用输出流将缓冲区中的数据送到客户端
            while ((len = is.read(buffer)) != -1){
                os.write(buffer,0,len);
            }
            is.close();//释放资源
            os.close();
            //注册servlet并编写映射
            //配置tomcat,把deployment目录设置为当前子项目的webapp
    

HttpServletRequest

与Response相对,有许多get开头的方法可以获取前端参数信息,还主要应用于请求转发。


页面跳转

  • 重定向(302)

    一种客户端行文,从本质上讲等同于两次请求,前一次请求对象不会保存,地址栏的URL会改变。resp.sendRedirect("/项目路径/其他servlet地址")

  • 请求转发(307)

    一种服务器的行为,客户端只有一次请求,服务器端转发后会将请求对象保存,地址栏中的URL地址不会改变,得到响应后服务器端再将响应发给客户端。

    req.getRequestDispatcher("/其他servlet地址").forward(req,resp);

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:15:56  更:2021-08-17 15:16:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:27:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码