你给我翻译翻译,什么叫做servlet。附带登录项目。

先整点专业的。

概念:
(1)Servlet(Server Applet),全称Java Servlet。是用Java编写的服务器端程序,其主要功能在于交互式地浏览和 修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个 Servlet接口的类,一般情况下,人们将Servlet理解为后者。

(2) Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下 Servlet只用来扩展基于HTTP协议的Web服务器。

Servlet就是个服务器程序,写这个就是写个服务器程序,要运行在服务器中,服务器就是tomcat,IBM WebSphere 这种东西。
所以流程就是

①整个服务器
②写Servlet的代码,写客户端的代码,然后再让Servlet和客户端交互
③连接数据库,与服务器进行交互

(3) Servlet工作模式:
① 客户端发送请求至服务器
② 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
③ 服务器将响应返回客户端

例子:

  • ①客户端给服务器发个消息,克里斯开下门
  • ②服务器让servlet开门,servlet问客户端要干嘛,客户端说你把卢本伟叫出来,然后servlet就告诉服务器说客户端要卢本伟
  • ③然后服务器把卢本伟给了客户端。

很好,那么我们已经掌握了servlet是什么了,
并且知道servlet怎么运作了,
那么我们来写个ez的项目。

需求:登录

非常简单的需求,无非就是要以下东西。

  1. 一个网页,来让用户输入账号密码。
  2. 一个服务器来运行servlet
  3. 一个数据库来存数据
  4. 一个简单的业务逻辑,验证账号密码。

根据让卢本伟开门的流程,这个需求的流程如下

  1. 用户输入账号密码点登录
  2. 服务器接收到账号密码。
  3. 服务器把账号密码传入数据库查询
  4. 数据库向返回查到了或是没查到
  5. 服务器向网页返回登陆成功或是没成功

还有几点必须的但可以轻易的找到教程的东西。
①配置服务器,我用的tomcat。
②下载数据库,我用的MySQL。
③掌握jdbc的知识。
④配置servlet。

如果不知道jdbc是啥的话,可以先面向百度。

准备就绪了后我们先来整个前端的页面。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>登录</h1>
<form action="/login" method="post">
    username:<input type="text" name="uname"><br>
    password:<input type="password" name="upass"><br>
    <input type="submit" value="登录">
</form>
</body>
</html>

在这里插入图片描述
页面就长这个样子。

然后我们写个数据库的驱动,让服务器和数据库连在一起。

package com.jzl.web;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConnection {
    private static final String driver = "com.mysql.jdbc.Driver";// 数据库驱动,这个直接抄
    private static final String url = "jdbc:mysql://localhost:3306/jzl";   //"jzl"是指我的数据库的库名   3306是端口,这个不能直接抄,要看一下
    private static final String username = "root";         //  数据库用户名
    private static final String password ="";         //  数据库密码,我没有密码,直接空字符就行了
    private static Connection conn = null;                 //  连接对象
    
    // 静态代码块加载数据库驱动,这里直接抄
    static {
        try {
            Class.forName(driver);  
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 返回数据库连接对象,直接抄
    public static Connection getConnection() throws Exception {
        if (conn == null) {
            conn = DriverManager.getConnection(url, username, password);
            return conn;
        }
        return conn;
    }

//这里验证一下,看看conn连上了没。
    public static void main(String[] args) {
        try {
            Connection conn = DBConnection.getConnection();
            if (conn != null) {
                System.out.println("数据库连接正常");
            } else {
                System.out.println("数据库连接异常");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

驱动写好了,我们先不写服务器和前端页面怎么操作,先写服务器和数据库互动代码。

package com.jzl.web;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class LoginCheck {

	//定义全局变量,别问我为什么,直接抄

	//给返回给服务器的变量赋值个false,能登陆,还是不能登录。
    boolean returnValue = false;
    	 
    //给数据库查询语句赋值
    String sql = "SELECT * FROM user";

	//下面三个懂的都懂,不懂就直接抄,实在想弄懂百度一下批处理
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;


	//验证账号密码的,传入账号密码。
    public boolean LoginSuccess(String username, String password) throws Exception {
    
 		//连接数据库。
        try {
        	//这里连接了
            conn = DBConnection.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);
            
            //当rs能找到下一行就找,找不到就返回一开始我们设置的那个变量,是个null
            while (rs.next()) {
                String userName = rs.getString("username");
                String passWord = rs.getString("password");
                if (userName.equals(username) && passWord.equals(password)) {
                    //   如果用户名和密码都和数据库的一样,就返回true
                    returnValue = true;
                    break;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return returnValue;
    }


	//关闭两个连接的方法,懂的都懂,不懂就直接抄。
    public void shut() {
        try {
            rs.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        try {
            stmt.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

}

OK,现在我们已经做好了数据库和服务器的连接,我们再来写服务器的程序。

package com.jzl.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理get请求,直接抄
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理post请求
        //这个是处理编码的,别问问就是无脑utf-8,嗯记就行了
        req.setCharacterEncoding("utf-8");

        //1.接收参数  getParameter方法可以根据表单组件名获取提交的数据,下面的uname,upass就是名字,在html的代码里有,       
        //别直接抄,你先看一下你的表单组件名
        String uname = req.getParameter("uname");
        String upass = req.getParameter("upass");
        System.out.println("uname="+uname+",upass="+upass);

		// 构建登陆对象
        LoginCheck db = new LoginCheck(); 
        // 取得用户名和密码
        boolean canLogin = false;
        try {
        	//这个方法还记不记得,前面写的那个类的第一个方法,返回布尔的
            canLogin = db.LoginSuccess(uname, upass);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
		// 根据登陆情况,跳转页面,页面想展示的内容可以写一个html来展示。
        if (canLogin) {
            System.out.println("用户名和密码正确");
            req.getRequestDispatcher("/success.html").forward(req,resp);
            db.shut();
        } else {
            req.getRequestDispatcher("/error.html").forward(req, resp);
            System.out.println("用户名和密码错误");
            db.shut();
        }
    }

    @Override
    public void destroy() {
        System.out.println("销毁方法");
    }

    @Override
    public void init() throws ServletException {

    }
}

可能出现的问题
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
直接把你的mysql的jar包丢到tomcat的lib文件夹里。

需要改xml配置文件,来不及解释了,看不懂就硬抄吧。
由上至下
1.你想起的名字
2.你的class文件所在地
3.重复输入名字
4.表单名

<?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>
        <servlet-name>loginServlet</servlet-name>
        <servlet-class>com.jzl.web.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>loginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
    </servlet-mapping>
</web-app>

数据库部分太简单了,具体步骤掠过,直接建个库创个user表添加账号密码就行了。

这玩意一定要先把思路弄对,先想清楚要做什么,然后再去做,一边做一边想人容易崩溃。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值