Servlet 概述

    技术2026-05-13  9

    Servlet 是 JAVA EE 范畴,我们在学 JAVA 的时候课本的第一章都会说 JAVA 有三个分支,分别为 JAVA SE、JAVA EE 和 JAVA ME,对应的分别是标准平台、企业级平台和移动手机平台。

    所以我们在编写 Servlet 程序的时候就得先安装 JAVA EE SDK,因为 Servlet 是用于部署在服务器的,所以我们需要在本机安装一个服务器软件,我们选择免费的 Tomcat。

    刚才说了,Servlet 是用于支持网页应用的,所以我们得有一定的 HTML 基础、CSS 基础和 Javascript 基础。

    我们通过模拟提交登录表单概述 Servlet 的工作与开发流程:

    1、编写网页文件

    网页文件时呈现在用户面前的文件,炫丽的效果会使用户心情愉悦,所以某些大中型公司都会有专门的美工部门,编写 CSS 文件和 Javascript 文件来美化我们的 HTML 网页,是的具有更抢眼的表现力。我们在此仅仅实现最基本的 HTML 网页。精简的代码如下:

      1: <form> 2: Username:<input type="text" name="username"/> br> 3: Password:<input type="password" name="password"/> br> 4: <input type="submit" value="Submit"/> 5: form> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
    2、Servlet 程序的编写

    Servlet 的编写可以再 MyEclipse 或者 Eclipse EE 中进行,当然其他的文本编辑器也可以,如 Notepad++。

    Servlet 的用途是对浏览器提按照 HTTP 协议提交过来的文件进行解析。编写的 Servlet 文件应该继承自 HttpServlet,HttpServlet 是一个抽象类,里面定义了很多对 HTTP 协议进行解析的方法,如 doPost 与 doGet 等等,我们可以通过覆盖特定的方法实现我们自己的特俗要求。我们可以编写代码如下:

      1: import java.io.IOException; 2:   3: import javax.servlet.ServletException; 4: import javax.servlet.http.HttpServlet; 5: import javax.servlet.http.HttpServletRequest; 6: import javax.servlet.http.HttpServletResponse; 7:   8: public class LoginServlet extends HttpServlet { 9:   10: @Override 11: public void doGet(HttpServletRequest req, HttpServletResponse resp) 12: throws ServletException, IOException { 13: String username = req.getParameter("username"); 14: String password = req.getParameter("password"); 15: System.out.println(username); 16: System.out.println(password); 17:   18: resp.setContentType("text/html;charset=gb2312"); 19: resp.getWriter().println("Login succeed!"); 20: } 21:   22: @Override 23: public void doPost(HttpServletRequest req, HttpServletResponse resp) 24: throws ServletException, IOException { 25: doGet(req,resp); 26: } 27:   28: } .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

    上面的代码覆盖了 HttpServlet 的 doGet 和 doPost 方法,而 doPost 方法仅仅是对 doGet 方法的调用。这样一来,无论浏览器的 HTML 网页采用何种发生提交,我们都可以做出同样的反应。由于涉及到密码的提交,我们选择 POST 提交方式。编译后保存备用。

    3、认识 Tomcat

    Tomcat 是 Apache 出品的一款优秀的开源的免费的 JSP 服务器。使用 Tomcat 前得先确保电脑安装了 JDK 或者 JRE,并且正确配置了 JAVA_HOME。

    打开 Tomcat 服务器的方法是进入 Tomcat 安装目录,进入 bin 文件夹,Linux/Unix 用户双击 startup.sh 启动,Windows 用户双击 startup.bat 启动。

    我们还要了解一下 Tomcat 的一些目录结构:

    以后我们接触最多的就是 webapps 目录了,这个目录顾名思义是给我们存放网页和 Servlet 文件的地方,也提供了一些模板示例。我们可以参照里面的示例创建文件系统。注意将第二步编译好的 LoginServlet.class 放在对应目录。

    4、配置 web.xml

    配置 web.xml 文件时一个较为头疼的事情,可以参照下面的代码进行配置:

      1: xml version="1.0" encoding="UTF-8"?> 2: <web-app version="2.5" 3: xmlns="http://java.sun.com/xml/ns/javaee" 4: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 5: xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 6: http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 7: <servlet> 8: <servlet-name>LoginServlet servlet-name> 9: <servlet-class>LoginServlet servlet-class> 10: servlet> 11: <servlet-mapping> 12: <servlet-name>LoginServlet servlet-name> 13: <url-pattern>/login url-pattern> 14: servlet-mapping> 15: web-app> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

    配置上面的 web.xml ,我们可以从 Tomcat 提供的示例文件里面复制 web.xml 到自己的目录进行修改完成,注意 标签的内容是 /login ,“/”不能丢。

    5、修改 HTML 文件

    接下来的步骤是修改之前的 HTML 文件,使得 HTML 文件与 Servlet 相关联,代码如下:

      1: <form action="login" method="post"> 2: Username:<input type="text" name="username"/> br> 3: Password:<input type="password" name="password"/> br> 4: <input type="submit" value="Submit"/> 5: form> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

    注意到 action 属性的值是 login 而不是 /login,切记。

    此外,如果不好理解上面的 action="login",可以看看下面的代码,假设我们的项目名称叫做 loginApp:

      1: <form action="http://localhost/loginApp/login" method="post"> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }

    这两个 action 在此处的作用是一样的。注意修改后的 HTML 文件要配置到服务器。

    6、尝试访问

    假设我们的 HTML 文件名称为 loginSv.html。

    通过调用浏览器输入网址 localhost/loginApp/loginSv.html 测试通过服务器对页面的调用以及对页面的处理。

    7、简单分析

    当用户登录 localhost/loginApp/loginSv.html 时候,Tomcat 会根据传入的地址截取出项目的名称 loginApp 然后到 loginApp里面找 loginSvl.html 反馈给用户浏览器。当用户在 loginSv.html 中点击 submit 按钮时,浏览器会自动提交表单给服务器,Tomcat 根据传来的 action 在 web.xml 中对应到 标签,由此一直向上找到 、 然后调用对应的 Servlet Class 对提交的表单进行解析操作。

    Tomcat 依照 Servlet Class 的完整路径,利用反射机制,对 Servlet Class 进行实例化,调用里面的 service() 方法,service() 方法判断并调用正确的处理方法进行处理,如调用 doPost() ,doPost() 依照我们的业务逻辑进行相应工作,如获取参数,进行参数验证,连接服务器,返回字符串等待。

    ---EOF---

    tiny man , huge ego…

    最新回复(0)