【JavaWeb】03 Servlet 其一 HelloServlet

什么是 Servlet?

Servlet = Server + Applet  即:服务应用程序

1、Servlet 是 JavaEE 规范之一。规范就是接口
2、Servlet 就 JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
3、Servlet 是运行在服务器上的一个 java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。
 

手动实现 Servlet 程序

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

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

 

3、到 web.xml 中去配置 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">

    <!-- servlet标签给Tomcat配置Servlet类【Servlet程序】 -->
    <servlet>
        <!-- servlet-name 给我们的Servlet类设置一个别名 Alias -->
        <servlet-name>helloServlet</servlet-name>

        <!-- 这个Servlet类的完整限定名 -->
        <servlet-class>cn.dai.servlet.HelloServlet</servlet-class>
    </servlet>

    <!-- Servlet类的网路映射路径 -->
    <servlet-mapping>
        <!-- 我们所映射的别名 【告诉服务器当前配置的地址是给哪个Servlet程序使用的】-->
        <servlet-name>helloServlet</servlet-name>

        <!-- 访问路径 -->
        <url-pattern>/helloServlet</url-pattern>
    </servlet-mapping>

</web-app>

 

启动服务器访问,可以看到service方法是一定被调用了
 
 

为什么访问失败?

常见的错误 1:url-pattern 中配置的路径没有以斜杠打头

 

常见错误 2:servlet-name 配置的值不存在:

 

常见错误 3:servlet-class 标签的全类名配置错误:

 
 

从url 地址到 Servlet 程序的访问 

 

 

端口号占用问题:

找到占用端口,结束进程

 

根据PID提供的进程号,进入任务管理器找到该进程结束即可

 
 
 
 
 

Servlet的作用域:

1、执行 Servlet 构造器方法

2、执行 init 初始化方法  

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

3、执行 service 方法

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

4、执行 destroy 销毁方法

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

 

演示结果:

 

GET 和 POST 请求的分发处理

实际上远不止这两种请求的方式,共有7中请求方式

主要的常用的是这两种,而大部分的请求就是get请求

Post请求方式主要就是两种

一个是表单提交发送

二个是Ajax异步通信

 

首先编写一个Post表单提交的网页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="http://localhost:8080/JavaWeb/helloServlet" method="post">
    测试
    <input type="submit">
</form>
</body>
</html>

 

重写service方法

  @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse){
        System.out.println("HelloServlet 被访问了");
        
        // 类型强转,ServletRequest 是一个接口,而HttpServletRequest是一个实现类
        HttpServletRequest httpServlet = ( HttpServletRequest) servletRequest;
    
        // 该请求对象可以获取请求的方式是哪种
        String method = httpServlet.getMethod();
        System.out.println(method);
    }

 

测试

使用表单提交访问就会呈现POST

反之直接URL访问则会是GET

 

由此我们可以这样对两种请求方式进行分别处理

// 服务方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse){
        System.out.println("HelloServlet 被访问了");

        // 类型强转,ServletRequest 是一个接口,而HttpServletRequest是一个实现类
        HttpServletRequest httpServlet = ( HttpServletRequest) servletRequest;

        // 该请求对象可以获取请求的方式是哪种
        String method = httpServlet.getMethod();
        System.out.println(method);
        
        // 我们可以做一个判断,然后分别对不同的请求分开处理
        if (method.equals("POST")) doPost();
        else if (method.equals("GET")) doGet();
    }
    
    void doGet(){
        System.out.println("doGet方法调用");
    }
    
    void doPost(){
        System.out.println("doPost方法调用");
    }

 

虚拟网路位置,Servlet的后缀分为了新旧两种方式:

xxx/xxx.do
xxx/xxx.action

这是官方的Servlet路由推荐写法

 

 

 

posted @ 2020-05-01 20:10  emdzz  阅读(229)  评论(0)    收藏  举报