Servlet入门必备知识

举报
执久呀 发表于 2022/07/25 07:09:58 2022/07/25
【摘要】 ​目录什么是Servlet手动实现Servlet程序 常见的配置错误 Servlet-url如何定位到Servlet程序去访问Servlet生命周期Servlet生命周期总结 Servlet 请求的分发处理什么是Servlet1、servlet是javaEE规范之一。规范就是接口2、servlet就是javaweb三大组件之一。三大组件分别是:servlet程序、Filter过滤器、List...

目录

什么是Servlet

手动实现Servlet程序

 常见的配置错误

 Servlet-url如何定位到Servlet程序去访问

Servlet生命周期

Servlet生命周期总结 

Servlet 请求的分发处理


什么是Servlet

1、servlet是javaEE规范之一。规范就是接口

2、servlet就是javaweb三大组件之一。三大组件分别是:servlet程序、Filter过滤器、Listenter监听器。

3、servlet是运行在服务器上的一个java小程序,它可以接受客服端发送过来得请求,并响应数据给客服端。

手动实现Servlet程序

步骤:

1、编写一个类去实现Servlet接口

2、实现service方法,处理请求,并相应数据

3、到web.xml中配置Servlet程序的访问地址


创建一个servlet模块,和步骤之前tomcat类似

编辑

在src下创建一个类去实现Servlet接口,快捷键Alt+insert选择实现方法,回车即可

编辑

 新建的这个类如是: 

package com.servlet;

import javax.servlet.*;
import java.io.IOException;

public class HelloServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * service方法是专门用来处理请求和响应的(只要执行这个类就会访问)
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello servlet被访问了");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


 3.到web.xml配置,在web-app标签里写入如下

<!--servlet标签给Tomcat配置Servlet程序-->
    <servlet>
        <!-- servlet-name给Servlet程序起一个别名(一般别名起为类名)-->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class是Servlet程序的全类名 -->
        <servlet-class>com.servlet.HelloServlet</servlet-class>
    </servlet>

    <!--servlet-mapping标签是给Servlet程序配置访问地址    -->
    <servlet-mapping>
        <!-- servlet-name是告诉服务器我当前配置的地址是给哪一个Servlet程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--url-pattern配置访问地址
           /  斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径     <br/>
           /hello  表示地址为:http://ip:port/工程路径/hello    <br/>
        -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

4、我们在index.jsp下写入一些内容,然后启动

编辑

 结果:

编辑

 前面在Tomcat也说过了,只写到工程名,没有资源名默认访问index,index目录下的内容会呈现到浏览器上

我们前面给这个配置了路径为hello,我们在加上就会访问servlet程序

编辑

 常见的配置错误

①起的路径名是随意起的,没有任何相关性,这虽然没有任何问题,但是不好分辨

②,路径没有以斜杆开头,如:

  <url-pattern>hello</url-pattern>

这样会导致出错

编辑

 所以一般起名字前得加/,正确写法:

  <url-pattern>hello</url-pattern>

 ③、在名字不同编辑

 在idea还可以有提示,有些编辑器就不会给提示,运行之后


编辑

 在servlet-mapping配置访问地址时,要和前面起的别名一致

④、标签的全类名写错、漏写

全类名是要写出实现Servlet接口那个类所在的位置,写错、少写都会报错,

圈起来的要一致 

编辑

 Servlet-url如何定位到Servlet程序去访问

编辑

 其中,一个端口号只能给一个工程,一个工程可以占用多个端口号,(工程就是文件夹,资源就是文件夹里的目录)

Servlet生命周期

之前的类

package com.servlet;

import javax.servlet.*;
import java.io.IOException;

public class HelloServlet implements Servlet {
    public HelloServlet() {
        System.out.println("1 构造器");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 init初始化方法");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /**
     * service方法是专门用来处理请求和响应的(只要执行这个类就会访问)
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3 Servlet==hello servlet被访问了");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4 destroy销毁方法");
    }
}

当我们启动,访问http://localhost:8080/01_servlet/hello

编辑

 一开始出现1 2 3,后面一直刷新就一直出现3,退出程序出现4

编辑

Servlet生命周期总结 

1.执行setvlet构造器方法

2.执行init初始化方法

 第一和第二步是在第一次访问的时候创建servlet程序会调用,

3.执行servlet方法

第三步,每次访问都会调用

4.执行destroy销毁方法

第四步,在web工程停止的时候调用

Servlet 请求的分发处理

我们使用表单提交时,有get(非加密)和post(加密)两种提交方式

创建一个表单a.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="http://localhost:8080/02_servlet/hello" method="post">
    <input type="submit">
</form>
</body>
</html>

 在实现的Servlet接口的类,中的重写的service方法中

   @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3 Servlet==hello servlet被访问了");
        //类型转化,因为HttpServletRequest有getMethod方法
        HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
        //getMethod识别当前提交方式是get还是post,分别返回"GET"和"POST"
         String method=httpServletRequest.getMethod();

         if("GET".equals(method)){
             //为了防冗余和更好的维护,定义方法
            // System.out.println("get请求");
             doGet();
         }else if ("POST".equals(method)){
             // System.out.println("post请求");
             doPost();
         }
    }
        public void doGet(){
            System.out.println("get请求");
        }
        public void doPost(){
            System.out.println("post请求");
        }


启动服务器,后如图所示

编辑

 运行在浏览器后,每次提交都会访问service方法,并打印出对应的method

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。