html mysql servlet_Servlet+HTML+JDBC+MySQL组合运用小案例

本文通过一个登录案例详细讲解了Servlet、HTML、JDBC和MySQL的结合使用。首先介绍了Servlet的生命周期和配置,然后展示了如何使用Servlet接收表单数据,并通过JDBC连接MySQL数据库进行用户验证。最后,给出了完整的登录Servlet实现代码。

目    录(本篇字数:2147)

何为Servlet?

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。

Servlet生命周期

Servlet本身仅是一个接口,它并不是实现类。所以我们只能实现Servlet接口,通过接口里的方法来走一遍它的生命周期吧。

首先,我新建了一个 HelloServlet ,实现Servlet接口,载入接口提供的方法。代码如下:

package com.xww;

import java.io.IOException;

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet{

@Override

public void destroy() {

System.out.println("destroy");

}

@Override

public ServletConfig getServletConfig() {

return null;

}

@Override

public String getServletInfo() {

return null;

}

@Override

public void init(ServletConfig config) throws ServletException {

System.out.println("init");

}

@Override

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

System.out.println("service");

}

}

要想让它跑起来,我们还缺对它的配置。在 web.xml 中配置 Servlet 代码如下:

HelloServlet

com.xww.HelloServlet

HelloServlet

/hello

这里解释一下上面这几个属性的作用。 不用多说,但要注意的是在  中的  内容要与任意一个 中的  一致即可。原理就是在于  映射可以是一对多的。

这里指的是在访问时输入的 url,例如我们可以这样访问(首先确保服务器可以运行):

fdccdcb446f2f09b0fe1b32711ab25ff.png

从上图可以看出我访问了 4 次,这样就可以得出Servlet的生命周期了。

Servlet的生命周期:

先调用 init() 初始化,初始化完成之后便不再调用.

接着调用 service() 接受请求,之后每一次请求只调用 service() 方法.

在服务器关闭时,调用 destory() .Servlet接口使用

介绍了Servlet接口,接下来是关于Servlet的一些常用方法。首先,是Servlet提供的 init() 方法,这个方法里有了一个

ServletConfig 参数,我们可以利用 ServletConfig 来获取一下关键信息。例如:

1. 先在 web.xml 文件中加入如下代码来设置 web 应用的全局参数(键值对方式)

username

admin

password

12345

2. 我们现在可以通过 ServletConfig 来获取这个参数了,在 init() 方法中写入如下代码:

@Override

public void init(ServletConfig config) throws ServletException {

System.out.println("init");

ServletContext context = config.getServletContext();

String username = context.getInitParameter("username");

String password = context.getInitParameter("password");

System.out.println("username:" + username);

System.out.println("password:" + password);

}

借助 ServletContext 来获取 web 应用的全局参数值,其结果也如出一辙的打印到控制台

de1820d9fb1d4daabe8dddf1457539c7.png

3. 到此为止,还没使用到请求。接着我新建了一个 login.html 文件,简单的利用表单提交方式来配合 servlet 的功能。 login.html代码如下:

login.html

Login page.

UserName:

PassWord:

以上需要注意的是,action 内容要与配合调用的 servlet 的 一致。

4. 修改 HelloServlet 类,添加如下代码:

package com.xww;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.Servlet;

import javax.servlet.ServletConfig;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet{

private ServletContext servletContext;

@Override

public void destroy() {

System.out.println("destroy");

}

@Override

public ServletConfig getServletConfig() {

return null;

}

@Override

public String getServletInfo() {

return null;

}

@Override

public void init(ServletConfig config) throws ServletException {

System.out.println("init");

servletContext = config.getServletContext();

}

@Override

public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {

System.out.println("service");

// 获取请求的参数内容

String user = req.getParameter("user");

String pwd = req.getParameter("pwd");

System.out.println("请求:user:" + user);

System.out.println("请求:pwd:" + pwd);

// 获取 web 应用全局参数

String username = servletContext.getInitParameter("username");

String password = servletContext.getInitParameter("password");

System.out.println("配置:user:" + username);

System.out.println("配置:password:" + password);

PrintWriter out = res.getWriter();

if (username.equals(user) && password.equals(pwd)) {

out.println("login succeed");

}else{

out.println("login failed");

}

}

}

5. 验证是否能够登入成功,>当然可以登入了。

1863fd416fd33376a87c787c711ff058.png

f18817ce607065d5ea34cd35ecf809ce.png

HttpServlet类

此类是 Servlet 接口的实现类,通过继承 HttpServlet 可以简化不需要的代码。比如, Servlet 接口中的 getServletConfig() 、

getServletInfo() 、destroy() 等方法都是不经常去使用的。我们继承自 HttpServlet 类的代码就很简单明了:

public class LoginServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

}

}

一般地,我们经常会用到的两种请求方式:Get 、Post,通常会覆盖 doGet() 、doPost() 这两种方法。所以,在之后我们就直接继承 HttpServlet 类而不需要去实现 Servlet接口了,大大的简化了不必要的代码。

JDBC简介

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。(官方语言描述,看看就好。)

JDBC,它就像驱动一样,数据库比如:mysql、oracle、db2、sqlSever等,不同的产商肯定实现的方式都不一样,那就要求程序员得每一个数据库的操作都得学会,只有这样才能跟上需求的改变。所以,JDBC,它就站出来了。它为每个产生提供相同的接口,不管数据库底层如何实现。相当于在数据库与应用程序中间加了一层,这就是 JDBC。那么,加了这一层,程序员们就可以通过 JDBC 固定 API 来操作各种不同数据库了,相当机智。

JDBC 连接 MySQL 数据库

代码如下:

public class JdbcUtils {

public static Connection getConnection() throws Exception {

/**

* 步骤:

* 1. 声明 driver、jdbcUrl、user、password 四个变量

* 2. 新建 jdbc.properties 配置文件,使其在不改源码情况下,变更数据库

* 3. 获取 jdbc.properties 文件参数,利用Java反射和输入流方式获取

* 4. Class.forName(driver);加载驱动

* 5. 获取连接实例

*/

String driver = null;

String jdbcUrl = null;

String user = null;

String password = null;

InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

Properties properties = new Properties();

properties.load(inputStream);

driver = properties.getProperty("driver");

jdbcUrl = properties.getProperty("jdbcUrl");

user = properties.getProperty("user");

password = properties.getProperty("password");

Class.forName(driver);

Connection conn = (Connection) DriverManager.getConnection(jdbcUrl, user, password);

return conn;

}

public static void release(Statement statement, Connection conn, ResultSet result) {

try {

if (statement != null) {

statement.close();

}

} catch (Exception e) {

e.printStackTrace();

}

try {

if (conn != null) {

conn.close();

}

} catch (Exception e) {

e.printStackTrace();

}

try {

if (result != null) {

result.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

这里我写了一个Jdbc获取连接的工具类,只要调用 getConnection() 方法就可以连接成功了。注意一点:MySQL 数据库连接参数为如下(也就是上面代码中注释部分 jdbc.properties文件内容),否则将连不上,MySQL 端口和用户名都是默认的。

d2e5d277a1e6d8ac6ae7315a9804a3fa.png

上图的 person 代表的是你的数据库名称。

HttpServlet + Html + JDBC + MySQL案例

通过如上的几个知识点的综合,我写了一个小案例。在 login.html 中提交表单到 LoginServlet 利用 JDBC 连接 MySQL数据库 进行比对。若数据库中含有该账户,则登入成功,否则失败。

源代码:

public class LoginServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

req.setCharacterEncoding("utf-8");

Connection conn = null;

Statement statement = null;

ResultSet result = null;

PrintWriter out = resp.getWriter();

boolean isFind = false;

String user = req.getParameter("user");

String pwd = req.getParameter("pwd");

System.out.println("请求:user:" + user);

System.out.println("请求:pwd:" + pwd);

try {

conn = JdbcUtils.getConnection();

statement = conn.createStatement();

result = statement.executeQuery("SELECT * FROM user");

//循环遍历数据库,比对数据

while (result.next()) {

String db_user = result.getString("user");

String db_password = result.getString("password");

System.out.println("数据库:user:" + db_user);

System.out.println("数据库:pwd:" + db_password);

if (user.equals(db_user) && pwd.equals(db_password)) {

isFind = true;

break;

} else {

isFind = false;

}

}

if (isFind) {

out.println("find,login succeed");

} else {

out.println("not find,login failed");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

JdbcUtils.release(statement, conn, result);

}

}

}

MySQL数据库 user 表

3d07baeecae1197eaefe5d69de32b7ab.png

我们用 ‘李四’ 来测试一下,登入成功了。

f3543c643a81535d7e83472bbbd5cf73.png

5ecaa20d61f1fa953ac186a03a26a814.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值