带你吃透Servlet核心编程上篇(完整图文教程)(中)

简介: 文章目录1 走进Servlet1.1 Servlet简介1.2 第一个Servlet程序1.3 Servlet程序如何定位到url地址1.4 Servlet的生命周期方法1.5 Servlet请求的分发处理1.6 通过继承HttpServlet类实现Servlet程序2 Servlet体系2.1 Servlet继承体系2.2 ServletConfig类的使用

1.5 Servlet请求的分发处理

表单的提交方式分为POST和GET两种请求方式,但是service方法只有一个,如何实现分发处理呢?

首先在webapp文件夹下创建一个页面,以get方式提交表单给资源文件hello:

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

HelloServlet中的service方法修改如下:

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //向下转型
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String method = httpServletRequest.getMethod();
        //请求分发处理
        String post = "POST";
        String get = "GET";
        if(post.equals(method)){
            System.out.println("POST方式");
        }else if (get.equals(method)){
            System.out.println("GET方式");
        }
    }

getMethod方法可以返回一个String值,用于判断是POST请求还是GET请求,运行结果如下:


该例子中,简单介绍了如何判断请求方式,并打印。实际中,如果分发处理的代码都写在service方法中,会显得过于臃肿。

因此,在实际开发中,分发处理的具体操作会单独写成方法,供service调用。例如:doGet()、doPost()方法。


1.6 通过继承HttpServlet类实现Servlet程序

在实际开发中,我们很少通过实现Servlet方法的方式去实现Servlet程序,更多的是采用继承子类的方式来实现。大致步骤如下:


编写一个类去继承 HttpServlet 类;

根据业务需要重写 doGet 和 doPost 方法(分发处理的具体方法);

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

需要注意的是,在HttpServlet类中,已经帮我们分发处理完毕了


案例代码如下:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 通过继承的方式实现Servlet
 */
public class HelloServlet2 extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("do Get具体操作");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("do Post具体操作");
    }
}

除了自己重写以外,在实际开发中有一种更加便捷的方式:

使用IDEA菜单生成Servlet程序


创建的时候可以选择取消注解,会自动配置xml文件,只需要手动添加mapping即可:


2 Servlet体系

2.1 Servlet继承体系



Servlet接口: 负责定义Servlet程序的访问规范;

GenericServlet类: 实现了Servlet接口,做了很多空实现。持有一个ServletConfig类的空引用,并对ServletConfig的使用做了些方法;

HttpService抽象类: 实现了service方法,并实现了请求的分发处理。GET和POST请求的方式分别对应doGet与doPost方法。

自定Servlet程序: 根据自己的需要去重写doGet与doPost方法即可。

2.2 ServletConfig类的使用

ServletConfig类是Servlet程序的信息类。

Servlet程序和ServletConfig对象都是由Tomcat负责创建,我们只负责使用。

Servlet程序默认第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。


ServletConfig的作用简介:

相关文章
|
13天前
|
关系型数据库 MySQL Java
Servlet+MySQL增删改查 原文出自[易百教程] 转载请保留原文链接: https://www.yiibai.com/geek/1391
对于任何项目开发,创建,读取,更新和删除(CRUD)记录操作是应用程序的一个最重要部分。
50 20
|
7月前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n),利用`request.getLocale()`获取用户区域设置,通过`DateFormat`类格式化特定区域的日期。示例代码演示了根据用户区域显示相应日期,强调了处理多语言网站的关键方法,如`getCountry()`、`getLanguage()`等。
52 6
|
5月前
|
安全 Java API
Java中的Servlet编程详解
Java中的Servlet编程详解
|
5月前
|
前端开发 Java 应用服务中间件
JavaEE:Servlet后端搭建部署 一条龙全教程
JavaEE:Servlet后端搭建部署 一条龙全教程
|
7月前
|
Java API
Servlet 教程 之 Servlet 发送电子邮件 2
使用Servlet发送HTML邮件需要JavaMail API和JAF。在示例中,Servlet创建MimeMessage对象,设置发件人、收件人、主题及HTML内容,然后通过Transport.send()发送。确保相关jar在CLASSPATH中。当Servlet被调用时,它会向指定邮箱发送带有HTML标题的邮件。
57 11
|
7月前
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
58 8
|
7月前
|
开发框架 缓存 Java
JSP 教程 之 Eclipse JSP/Servlet 环境搭建 1
本教程指导如何使用Eclipse搭建JSP/Servlet开发环境。需下载Eclipse J2EE和Tomcat,将Tomcat解压至无中文和空格的D盘目录。启动Tomcat后,服务器运行,通过浏览器访问`http://localhost:8080/`。在Tomcat的webapps\ROOT目录创建test.jsp文件,输入代码并访问`http://localhost:8080/test.jsp`以验证环境配置成功。
105 1
|
7月前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
68 6
|
7月前
|
自然语言处理 定位技术
Servlet 教程 之 Servlet 国际化 4
Servlet教程之国际化讲解了如何根据用户区域设置展示多语言内容。关键术语包括国际化(i18n)、本地化(l10n)和区域设置(locale)。Servlet通过`request.getLocale()`获取区域设置,并使用`NumberFormat`类格式化特定区域的货币。示例代码展示了如何根据客户端locale显示货币格式。
44 3
|
7月前
|
定位技术
Servlet 教程 之 Servlet 国际化 3
Servlet教程展示了如何实现国际化(i18n)和本地化(l10n)。通过request对象的getLocale()获取用户区域设置,利用DateFormat进行特定区域的日期格式化。示例代码显示了根据用户浏览器设置显示相应语言和文化的日期。
42 2