Servlet 从入门到实战

本贴最后更新于 2795 天前,其中的信息可能已经时移俗易

Javaweb 的后端研发需要学习的是 tomcat+servlet+jsp+mysql 这些技术,其中的核心技术就是 servlet。本篇详细介绍 servlet。

Servlet 简介

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录。

简而言之呀,servlet 就是将从 web 界面或者 app 界面这些前端界面上获取的含有参数的请求 request 进行解析处理,用响应 response 返回这些界面需要的参数。

Servlet 环境配置

servlet 作为一个服务器端运行的后台服务程序,如果想要本地运行需要配置一系列的环境,简介如下:

JDK(Java Development Kit)

JDK 是一个软件开发工具包,包含了 java 的运行环境,java 工具和 java 基础的类库,有一点点 java 基础的同学应该知道这是什么的。Java Servlet 当然依赖 Java 环境。

JDK 完美配置教程链接:

windows:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html

mac:http://jingyan.baidu.com/article/1612d500afc297e20f1eee7f.html

这里说明下:跳转链接不是随便找的!我是过来人,基本都是我自己搜索过并且自己亲自实践安装配置成功了,哪些链接写得好才放在这里,大家放心跳转跟着配置即可。

配置成功后终端运行:java -version 进行测试是否安装成功。

  

web 服务器 Tomcat

Tomcat 是一个支持 Servlet 的 web 服务器,如果想在本地运行 Servlet 的话当然需要本地配置服务器。而 Tomcat 可以作为测试 Servlet 的独立服务器。

Tomcat 完美安装配置教程链接:

windows:http://blog.csdn.net/q_l_s/article/details/51736613

Mac:http://blog.csdn.net/huyisu/article/details/38372663

配置成功后测试是否安装成功:在上述教程链接中按照方法打开终端解压\bin 目录下,输入 startup.sh 在浏览器中输入:http://localhost:8080/ 进行测试。

  

Java 集成开发环境 IntelliJ IDEA

Java 当然需要个编写代码的环境。一般我们使用的工具叫 IDE(Integrated Development Environment 集成开发环境)

Java 的业界用的较多的两款开发软件是 Eclipse 和 IntelliJ IDEA。这里为什么要推荐 IDEA 呢?

原因有两点:第一就我个人经验而言,发现 Eclipse 在学校学习用的较多,而来公司的第一天就是自己配 IntelliJ IDEA,大型工程都是用 IDEA 的环境,比 Eclipse 更强大。第二就是我发现 IDEA 比 Eclipse 好用太多,所以建议大家要是开始学 Servlet 的话使用 IDEA,为自己当前学习和对以后的工作或者大项目都有好处。

IDEA 完美安装配置教程链接:

windows 系统:http://jingyan.baidu.com/article/fdbd4277d47cfbb89e3f48f3.html

mac 系统:http://jingyan.baidu.com/article/5552ef47e85780518ffbc991.html

(初次使用 IDEA 可能会不习惯,大家自己上网搜索如何改键成自己熟悉的编码形式)

MYSQL 数据库

作为后端,当然需要建立数据库存储数据,在 MYSQL 和 SQL SEVER 之间,建议大家使用 MYSQL 这种应用范围更为广泛的数据库(大型工程软件大部分都是用 mysql),所以会 SQL SEVER 的同学也不要嫌麻烦,二者语法差别不大,安装配置一下 MYSQL。

MYQSL 完美安装配置教程链接:

windows 系统:http://jingyan.baidu.com/article/6181c3e06d6804152ef15318.html

mac 系统:http://www.cnblogs.com/macro-cheng/archive/2011/10/25/mysql-001.html

MYSQL 安装完大家最好自己建库试一试。MYSQL 有自带的管理工具 workbench,但是推荐一款 mac 比较好用的 mysql 管理工具,Sequel Pro,只有 mac 版,安装比较简单,在这里不再赘述。
至此,学习 Servlet 的准备工作已经完成,下面介绍 Servlet 基本概念以及如何建立和使用。

Servlet 生命周期

一个 Servlet 的完整的生命周期(从创建到毁灭)包括:init()方法,service()方法,doGet()方法,doPost()方法,destroy()方法

init()方法 用于 Servlet 在服务器第一次启动时被加载时,init() 方法里可简单地创建或加载一些数据,一般用的不是很多。

destroy() 方法 在 Servlet 生命周期结束时被调用。用于让 Servlet 关闭数据库连接、停止后台线程等,执行类似的清理活动,一般用的也不是很多。

service()方法 是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

但 service()方法由容器调用,所以我们不需对 service()方法进行操作。

现在来到重点标红的 servlet 里的 doGet()和 doPost()方法

从浏览器到 Web 服务器,最终到后台程序。浏览器使用两种方法可将这些信息传递到 Web 服务器,分别为 GET 方法和 POST 方法。

GET 方法

页面请求发送已编码的用户信息。页面和已编码的信息中间用 ? 字符分隔表示,

如:www.baidu.com?key1=value1&key2=value2

doGet()方法

doGet()方法可以处理一个 GET 请求---URL 的正常请求(或者来自于一个未指定 METHOD 的 HTML 表单)。

POST 方法

向后台程序传递信息的比较可靠的方法。POST 方法打包信息的方式与 GET 方法基本相同,但是 POST 方法不是把信息作为 URL 中 ? 字符后的文本字符串进行发送,而是把这些信息作为一个单独的消息。消息以标准输出的形式传到后台程序,您可以解析和使用这些标准输出。Servlet 使用 doPost() 方法处理这种类型的请求。

doPost()方法

doPost() 方法处理一个 POST 请求---一个特别指定了 METHOD 为 POST 的 HTML 表单。

我们开发 servlet 主要是写 servlet 中的 doGet()、doPost()方法,来处理前端请求并返回前端所需要的数据。

下面通过实例讲述 Servlet()

Servlet 实例【图文】

本篇通过图文实例给大家详细讲述如何建立一个 Servlet,配置好运行环境并成功连接到 MYSQL 的数据库,进行数据的查询展示。

项目创建:IDEA -> Create New Project

选择 Project SDK(自己装的 JDK 版本,系统没提示的话自己选择 JDK 目录),下个界面自己选择工程存储目录和工程名,我起名为 DemoServlet

了解了文件目录,我们继续往下配置,菜单栏 ->run -> Edit Configurations 下进行配置

进去后点击左上角 + 号(注意不要选择 default),添加 tomcat server->local ,配置 修改 name,我这里改为了 tomcat;然后 Deployment 里可以加个 war 包,点击 OK

配置完成以后,选择菜单栏->file->project structure ,来添加一些我们需要的包

选择 Modules-> Dependencies 点击下面 + 号 添加 如图所示的几个包,第一个(含 jsp-api 和 servlet-api)可以在 tomcat 的解压文件夹的\lib 里导入,第二个大家可以去下载下,是连接 mysql 的包,附上下载地址:

http://download.csdn.net/detail/oyuntaolianwu/5822697

注意:一定要选 Export,不然可能会报错连接不上数据库

配置完成以后,新建我们的 Servlet,选中 Servlet 文件夹-> 右键-> new ->Servlet,我的命名为:Servlet 和文件夹名保持一致。

IDEA 里自带简单的数据库管理工具,在视图的最右边可以找到,Database,这里我们选择添加 Data Sourse -> MySQL

这里大家要去自己的 MYSQL 里建立 Database 和 User,工具为 MYSQL Workbench 或者 Sequel Pro,建立了后可在 IDEA 里点 Test Connection 测试是否能够成功连接。 IDEA 里可以连接了数据库以后实现建表和添加数据,点开 IDEA 里的控制界面执行建表以及数据插入语句:

CREATE TABLE `websites` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
 `url` varchar(255) NOT NULL DEFAULT '',
 `alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
 `country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'),
   ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'),
   ('4', '微博', 'http://weibo.com/', '20', 'CN'),
   ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');

数据库的表和数据建好以后,我们编辑 Servlet,写一个简单连接自己建立的 mysql 库里的一个表的例子

package Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.io.*;

/**
 * Created by weber on 2017/4/20.
 */
@WebServlet("/Servlet")
public class Servlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
 // JDBC 驱动名及数据库 URL
 static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
 static final String DB_URL = "jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=false";

 // 数据库的用户名与密码,需要根据自己的设置
 static final String USER = "weber";
 static final String PASS = "123456";
 protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
 doGet(request, response);
 }
 protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

 Connection conn = null;
 Statement stmt = null;
 // 设置响应内容类型
 response.setContentType("text/html;charset=UTF-8");
 PrintWriter out = response.getWriter();
 String title = "Servlet Mysql 测试";
 String docType = "\n";
 out.println(docType +
	 "\n" +
	 "" + title + "\n" +
	 "\n" +
	 "" + title + "\n");

 try{
 // 注册 JDBC 驱动器
 Class.forName(JDBC_DRIVER);

 // 打开一个连接
 conn = DriverManager.getConnection(DB_URL,USER,PASS);

 // 执行 SQL 查询
 stmt = conn.createStatement();
 String sql;
 sql = "SELECT id, name, url FROM websites " ;
 ResultSet rs = stmt.executeQuery(sql);

 // 展开结果集数据库
 while(rs.next()){
 // 通过字段检索
 int id  = rs.getInt("id");
 String name = rs.getString("name");
 String url = rs.getString("url");

 // 输出数据
 out.println("ID: " + id);
 out.println(", 站点名称: " + name);
 out.println(", 站点 URL: " + url);
 out.println("");
 }
 out.println("");

 // 完成后关闭
 rs.close();
 stmt.close();
 conn.close();
 } catch(SQLException se) {
 // 处理 JDBC 错误
 se.printStackTrace();
 } catch(Exception e) {
 // 处理 Class.forName 错误
 e.printStackTrace();
 }finally{
 // 最后是用于关闭资源的块
 try{
 if(stmt!=null)
 stmt.close();
 }catch(SQLException se2){
 }
 try{
 if(conn!=null)
 conn.close();
 }catch(SQLException se){
 se.printStackTrace();
 }
 }

 }
}

代码附上

这里我们在 web.xml 里配置 Servlet 的 mapping,就是配置 Servlet 的前端路径,这样我们可以在浏览器里输入 localhost:8080/test 来访问查看

一个 Servlet 基本写完了,这里我们运行 project,打开浏览器输入 localhost:8080/test 来查看是否 Servlet 建立成功,并且成功连接到数据库,输出结果如下。

至此,一个能成功连接到数据库的 Servlet 的 Demo 已经基本完成,下篇介绍如何将 Servlet 搭建到服务器上,实现和 app/web 的具体交互。

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    看上去花了不小的功夫呀[em00] 不过格式有点小问题,可以再调整一下,哈哈哈

  • someone

    [em04]在调整