Java教程

Java中servlet和重定位、转发,以及简单的登陆注册界面的实现

本文主要是介绍Java中servlet和重定位、转发,以及简单的登陆注册界面的实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.Servlet注解和配置文件的写法

1.1配置文件的写法【如果Servlet版本低的话】

1.需要在web.xml文件中写配置

去找到这个资源web.xml

首先创建一个测试类继承HttpServlet并重写doGet和doPost方法

package com.javacoffee.test;

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 Test extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是XML配置文件写法");
    }
}

然后找到web.xml文件进行配置

<?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起一个名字,这个名字要和一个标签servlet-mapping对应-->
        <servlet-name>Test</servlet-name>
        <!--        servlet-class是servle所对应的类-->
        <servlet-class>com.javacoffee.test.Test</servlet-class>
        <!--        设置为1是当tomcat服务器已启动就会加载这个类-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!--      url-pattern  找到这个资源的入门,类似于咱们写的@WebServlet("/webxml")  -->
    <!--       可以写多个url-pattern  相当于给资源起了很多的名字
            但是请求只有一个<servlet-name> Test
    -->
    <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/Test</url-pattern>
    </servlet-mapping>
</web-app>

1.2注解的写法【以后用这个】

这种写只能是Servlet版本是3.0以上的版本才可以使用注解,

现在咱们都是3.0以上的了。所以以后用注解的写法。从这地方可以说明一个问题

去xml的写法,xml太麻烦了。咱们ssm框架 大部分都是xml,后来出来一个springboot

把xml省去了,加了好多的注解。

package com.javacoffee.test;

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.io.IOException;

@WebServlet("/Test")
public class Test extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("这是XML注解写法");
    }
}

2.Servlet的生命周期  

Servlet在执行的时候,经历过这些过程:

1.construct

2.init

3.service

4.destory

阶段1:

Servlet这个类在Tomcat中进行了实例化,提供给Tomcat使用

阶段2:

Servlet的初始化

阶段3:

Servlet对外提供服务,相当于doGet和doPost方法

阶段4:

servlet进行销毁,可以手动销毁,调用destroy方法,咱们一般不用调用,tomcat只要关闭就会销毁Servlet


3.获取前端请求的参数

想要学好Servlet必须紧紧围绕着两个东西

请求和响应这两个概念。

问大家一个问题?咱们现在写的代码只是进行请求,然后再响应到客户端。

请求的时候带数据给Servlet了没?没有带数据给Servlet

现在咱们要讲在请求的时候前端带数据到Servlet里面。咱们Servlet要接受前端给我的这个数据

首先先在web文件下面创建一个html文件,在里面写上表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="TestServlet" method="get">
    用户名:<input type="text" name="username"><br>
    密  码:<input type="password" name="password"><br>
    <input type="submit" name="提交">
</form>
</body>
</html>

出来的结果是这样


 接着创建TestServlet类

package com.javacoffee.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.io.IOException;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //前端发送数据到我这servlet了,我这个Servlet能不能接一些数据?
        //前端发送求过来,说明和request 对象
        //http:localhost:8080/login.html?user=gouda&pwd=123456
        //这个getParameter方法就是获取请求对象的参数的,通过
        //前端input标签name的属性值获取的
        //解决post请求时候的乱码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //在TestServlet界面输出
        response.getWriter().println("姓名:"+username+",密码:"+password);
    }
}

因为我是用的get请求方式,所以可以在网址url里面看到用户名和密码

 

4.中文乱码的解决方案

请求时候的中文乱码的问题:
  前端发送数据到Servlet  如果是post请求的话,input输入中文数据的时候,Servlet接到的数据是乱码的。
  request.setCharacterEncoding("utf-8");
响应时候的中文乱码的问题:
  Servlet响应数据到客户端的时候,如果是中文的话,会乱码
  response.setContentType("text/html;charset=utf-8");
 

5.重定向和转发【重要】

web网站上面有一些跳转按钮。比如 登录成功以后跳转到主页面!!!

6.1重定向

用户通过浏览器发送一个请求,Tomcat服务器接收这个请求,会给浏览器发送一个状态码302

并设置一个重定向的路径,浏览器如果接收到,了这个302的状态码以后,就会去自动加载服务器设置的路径。

一个页面跳转到另外一个页面(场景)

登录页面跳转到主页

denglu.html===>TestLoginServlet=>target.html

特征:

1.重定向的过程是浏览器(客户端)的行为

2.实际上浏览器做了几次请求 (当点击登录按钮的时候做了两次请求)(TestServlet,loginSeccess.html)

3.注意上一次请求的request对象会丢失

4.重定向有一个非常明显的特征,浏览器的url变化了

5.重定向可以重定向到网络的任意资源(比如京东淘宝等网络资源)

response.sendRedirect("target.html");就这一行代码,但是这一行代码必须写在doget或者dopost

首先是一个登陆页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="TestServlet" method="post">
    用户名:<input type="text" name="username"><br>
    密  码:<input type="password" name="password"><br>
    <input type="submit" name="提交">
</form>
</body>
</html>

然后是登陆成功页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆成功页面</title>
</head>
<body>
<div style="color: red; font-size: 30px">这是重定向跳转的页面!</div>
</body>
</html>

接着是TestServlet类

package com.javacoffee.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.io.IOException;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //前端发送数据到我这servlet了,我这个Servlet能不能接一些数据?
        //前端发送求过来,说明和request 对象
        //http:localhost:8080/login.html?user=gouda&pwd=123456
        //这个getParameter方法就是获取请求对象的参数的,通过
        //前端input标签name的属性值获取的
        //解决post请求时候的乱码
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //登录以后跳转到主页
        //重定向
        //这个TestServlet里面的数据是不能传给loginSeccess.html
        response.sendRedirect("loginSeccess.html");
    }
}

6.2转发

用户发送请求到服务器

服务器接收当前请求

会调用内部方式(转发)处理该请求

最终把响应给客户端

特征:

1.转发是服务器的行为

2.浏览器在那个过程中只有一次行为

3.转发可以带有数据 request对象中

4.url不会发生任何变化的

5.转发只能在当前项目中进行转发,不能转发外部的资源


package com.javacoffee.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.io.IOException;

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //给当前的request对象设置一些数据,request对象带有数据
        request.setAttribute("username",username);
         /*
        可以通过request对象转发到其他资源(另外一个Servlet)里面
        * */
        //转发会将一个Servlet里面数据带到另外一个servlet里面
        request.getRequestDispatcher("TestServlet1").forward(request,response);


    }
}

TestServlet1类

package com.javacoffee.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.io.IOException;

@WebServlet("/TestServlet1")
public class TestServlet1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //接受从TestServlet传过来的数据
        String username1 = (String) request.getAttribute("username");
        //在界面显示出来
        response.getWriter().append(username1);

    }
}

 

 

6.3综合案例(实现简单的注册登录修改删除界面)

简单的注册登录删除修改页面

注册,存放数据到数据库中

点击登录按钮(判断前端传给我的数据在数据库中是否存在)(通过查询来进行)

如果用户名和密码都是正确我才让你登录,转发到主页面

转发到主页

然后可以进行增删

前端界面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册界面</title>
    <style>
        body{
            background-color: pink;
        }
        div{
            position: absolute;
            top: 10px;
            left: 500px;
            width: 500px;
            height: 500px;
            background-color:darkkhaki;
        }

    </style>
</head>
<body>
<div>
<p style="font-size: 50px;color: red">欢迎来到注册界面!</p>
<form action="RegServlet" method="post">
    请输入用户名:<input type="text" name="username" id="input1"><br>
    请输入密码:<input type="password" name="password" id="input2"><br>
    <input type="submit" name="确定注册"  style="width: 100px">&nbsp;&nbsp;
    <input type="reset" name="清空" style="width: 100px">
    <br>
</form>
</div>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: 86156
  Date: 2021/9/10
  Time: 22:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆成功页面</title>
</head>
<body>
<div style="background-color: pink;font-size: 80px">恭喜<%=request.getAttribute("username")%>注册成功!!!</div>

<form action="Login.html" method="get">
    <input type="submit" name="去登陆" value="去登陆!" style="width: 100px;height: 30px">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <style>
        body{
            background-color: pink;
        }
        div{
            position: absolute;
            top: 10px;
            left: 500px;
        }

    </style>
</head>
<body>
<div>
    <p style="font-size: 50px;color: red;background-color: pink">欢迎来到登录界面!</p>
    <form action="LoginServlet" method="post">
        用户名:<input type="text" name="username"><br>
        密&nbsp;&nbsp;&nbsp;码:<input type="password" name="pwd"><br>
        <input type="submit" name="登录">
    </form>
</div>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: 86156
  Date: 2021/9/10
  Time: 22:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登陆成功</title>
</head>
<body>
<div >
    <p style="font-size: 50px">删除用户</p>
    <form action="DeleteServlet" method="post">
       要删除的用户的用户名 <input type="text" name="username"><br>
        <input type="submit" name="删除" value="删除!" style="width: 100px">
    </form>
</div>
<br><br><br>
<div >
    <p style="font-size: 50px">修改用户</p>
    <form action="UpdateServlet" method="post">
        要修改的用户的用户名 <input type="text" name="lastUsername"><br>
        新用户名: <input type="text" name="newUsername"><br>
        新密码: <input type="password" name="newPassword"><br>
        <input type="submit" name="修改" value="修改!" style="width: 100px">
    </form>
</div>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: 86156
  Date: 2021/9/10
  Time: 22:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>删除成功</title>
</head>
<body>
<form action="LoginSuccess.jsp" method="get">
    <input type="submit" name="返回" value="返回" style="width: 100px;height: 50px">
</form>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: 86156
  Date: 2021/9/10
  Time: 22:47
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>修改成功</title>
</head>
<body>
<form action="LoginSuccess.jsp" method="get">
    <input type="submit" name="返回" value="返回" style="width: 100px;height: 50px">
</form>
</body>
</html>

我是通过c3p0连接数据库的,具体怎么连接可以查看我之前写的博客

接着是数据库建表

util层用了自己封装的JdbcUtil BaseDao类获取增删改查操作

package com.javacoffee.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

/**
 * 1.完成驱动的自动加载
 * 2.完成必要的数据处理 url  user  password
 * 3.完成connection这个方法
 * 4.完成统一的close方法
 */
public class JdbcUtil {

    //为什么呢么是static修饰的?是因为getConnection是静态方法,
    //静态方法中不能使用非静态的后成员属性
    private static ComboPooledDataSource pool = new ComboPooledDataSource();
    //简化getConnection方法的写法
//封装一个静态的方法,获取connetion对象
    public static Connection getConnection() {
        Connection connection = null;
        try {
            connection = pool.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }

    //现在封装的时候,我不知道需要关闭哪个资源
    //有的需要关闭一个,有的需要关闭两个,有的需要关闭三个
    //关闭一个资源  connection
    public static void close(Connection connection) {
        close(connection, null, null);
    }
    //关闭两个资源 connection statement
    public static void close(Connection connection, Statement statement) {
        close(connection, statement, null);
    }
    //关闭三个资源的 connection  statement   resultSet
    public static void close(Connection connection, Statement statement, ResultSet resultSet) {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}
package com.javacoffee.util;

import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class BaseDao {
    /**
     * 完成一个统一的增删改的方法
     *  方法名字叫  update
     *  方法需要参数:
     *      1.String sql
     *      2.需要sql语句对应的参数
     *          参数不确定的,因为你不知道你写的sql语句,具体是需要几个参数
     *          放一个数组进来,Object[]   因为Object可以存放不同类型的数据
     *      3.返回值
     *          int   受影响的行数
     *
     */
    public int update(String sql, Object[] parameters) throws SQLException {
        if (sql == null) {
            throw new SQLException("sql is null");
        }
        //1.获取数据库的连接
        Connection connection = JdbcUtil.getConnection();
        //2.获取数据库预处理搬运工对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //3.现在我不知道这个sql语句有几个?
        //3.获取参数元数据对象,获取参数的个数
        //insert into work(name, age,info) values(?,?,?)
        int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
        //4.对sql里面的?进行赋值   三个?  setObject  三次   两个?  setObject两个
        for (int i = 1; i <=  parameterCount; i++) {
            /*
            * String sql = "insert into work(name, age, info) values(?,?,?)";
        Object[] objs = {"杨仔", 78, "年出生的警察局"};
        *
            * */
//            preparedStatement.setObject(1,"杨仔");
//            preparedStatement.setObject(2,78);
//            preparedStatement.setObject(3,"出生的警察局");
            preparedStatement.setObject(i, parameters[i-1]);

        }
        //5.执行sql语句
        int i = preparedStatement.executeUpdate();
        //6.关闭资源
        JdbcUtil.close(connection, preparedStatement);
        //7.返回受影响的行数
        return i;

    }
    /**
     * 完成统一的查询方法
     *      1、查询一条数据可以
     *      2、查询多条数据可以
     *      3.查询任意类型的数据
     *      方法的分析:
     *          方法名字: query
     *          方法的参数:
     *              1.sql
     *              2.sql占位符,使用的Object数组
     *              3.需要第三个参数
     *                      大家想一个问题,比如查询的是work表,要把work‘这个表数据赋值给Work实体类
     *                      再查询person表,咱们把person表中数据赋值给Person类。赋值的实体类固定吗?
     *                      让他具有普适性,需要的是一个对象。如果是Object需要强转,怕出错
     *                      用反射!!! 使用的是Class<T>
     *             方法的返回值:
     *                  List<T>
     *
     *
     */
    public <T> List<T> query(String sql, Object[] parameters, Class<T> cls) throws SQLException {
        if (sql == null || cls == null) {
            throw new NullPointerException();
        }
        //1.获取connection对象
        Connection connection = JdbcUtil.getConnection();
        //2.预处理sql语句  select* from work where id = ?
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        //3.处理sql语句里面的?  获取参数的个数
        int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
        //4.给?进行赋值
        //什么时候执行这个for循环进行setObject呢?
        //select * from work where id = ?
        //Objects[] objs = {10,20}
        //写健壮一点,来一些判断 数组中的个数和sql参数是否保持一致
        //是因为数组中的值刚好赋值给sql的?
        if(parameters != null && parameterCount == parameters.length) {
            for (int i = 1; i <= parameterCount; i++) {
                preparedStatement.setObject(i, parameters[i - 1]);
            }
        }
        //5.执行sql语句,和增删改 不一样之处,因为查询的时候返回的是一个ResultSet对象
        ResultSet resultSet = preparedStatement.executeQuery();
        //6.准备一个List集合  ,目的是放对象的,把多个对象或者一个对象放到这个集合中
        //有一个问题?你知道是哪个对象吗?
        ArrayList<T> ts = new ArrayList<>();
        //7.获取结果集元数据对象,获取字段的名字,还有列数(字段的个数),去获取数据表中的行数据
        ResultSetMetaData metaData = resultSet.getMetaData();
        //8.获取字段的个数
        int columnCount = metaData.getColumnCount();
        //9.遍历数据
        while (resultSet.next()) {//控制行数
            //10.通过Class类对象获取某一个类的对象  Work.class
            // Person.class
            //Teacher.class
            // 就是一个Class类对象
            //  Work work = new Work();
            T t = null;//t相当于new 的对象  比如你传的是Work.class
            //这个t  new的work对象
            //比如你传的是Person.class 这个t就是 new的person对象
            try {
                t = cls.getConstructor(null).newInstance(null);

            for (int i = 1; i <= columnCount; i++) {//控制的列数
                //比如  id   name  age  info 这些字段是通过for循环获取出来的
                //11.获取字段的名字,通过结果集获取数据库的名字
                //当i=1  获取  id字段  i=2 获取name字段名字 ......
                String columnName = metaData.getColumnName(i);//字段的名字
                //12.通过字段获取对应的值
                Object value = resultSet.getObject(columnName);
                //13.将值存到对象中,将对象存到集合中,但是现在没有对象
                //new Work();//相当于把他写死了,封装,普适性。
                //t.setId()//现在呢开始对对象进行赋值?咋办?
                //columnName  字段的名字,所以规定数据表中字段的名字一定要和
                //实体类中 成员属性一致。
                //
                //BeanUtils.setProperty(work, id, 1);
                //BeanUtils.setProperty(work, name, "狗蛋");
                BeanUtils.setProperty(t, columnName, value);
            }
            } catch (Exception e) {
                e.printStackTrace();
            }
            //第一个的while循环对t  对象 进行一次赋值   第二次while循环对t再进行一次赋值
            //14.将这个t存到list集合中
            ts.add(t);
        }
        //15.close
        JdbcUtil.close(connection, preparedStatement, resultSet);
        //16.返回值
        //如果这个集合的长度不等于0,就证明这个集合里面有数据,返回整个集合。
        //如果这个集合长度为0,就证明这个集合里面没有数据,返回null
        return ts.size()!= 0 ? ts: null;//三目运算符
    }
}

Dao层

package com.javacoffee.dao;

import com.javacoffee.entity.User;
import com.javacoffee.util.BaseDao;

import java.sql.SQLException;
import java.util.List;

public class UserDao extends BaseDao {

    public void regint(Object[] parameters) throws SQLException {
        String sql = "insert into user(username,password) values (?,?)";
        super.update(sql,parameters);
    }

    public void delete(Object[] parameters) throws SQLException {
        String sql = "delete from user where username = ?";
        super.update(sql,parameters);
    }

    public void update(Object[] parameters) throws SQLException {
        String sql = "update user set username = ?,password = ? where username = ?";
        super.update(sql,parameters);
    }


    public  List<User> login(Object[] parameters) throws SQLException, ClassNotFoundException {
        String sql = "select * from user where username = ? and password = ?";
        return super.query(sql, parameters,User.class);
    }
}

entity层

package com.javacoffee.entity;

public class User {
    private int id;
    private String username;
    private String password;

    public User(){}

    public User(int id,String name, String password) {
        this.id=id;
        this.username = name;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

service层

package com.javacoffee.servlet;

import com.javacoffee.dao.UserDao;

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.io.IOException;
import java.sql.SQLException;

@WebServlet("/DeleteServlet")
public class DeleteServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        Object[] objects = {username};
        UserDao userDao = new UserDao();
        try {
            userDao.delete(objects);
            request.getRequestDispatcher("DeleteSuccess.jsp").forward(request,response);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
package com.javacoffee.servlet;

import com.javacoffee.dao.UserDao;
import com.javacoffee.entity.User;

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.io.IOException;
import java.sql.SQLException;
import java.util.List;

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        String pwd = request.getParameter("pwd");
        Object[] objects = {username,pwd};
        UserDao userDao = new UserDao();
        try {
            List<User> login = userDao.login(objects);
            if (login != null){
                request.getRequestDispatcher("/LoginSuccess.jsp").forward(request,response);
            }else {
                response.getWriter().append("登陆失败!");
            }
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
}
package com.javacoffee.servlet;

import com.javacoffee.dao.UserDao;

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.io.IOException;
import java.sql.SQLException;

@WebServlet("/RegServlet")
public class RegServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        Object[] objects = {username,password};
        UserDao userDao = new UserDao();
        try {
            userDao.regint(objects);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        request.setAttribute("username",username);
        request.getRequestDispatcher("/success.jsp").forward(request,response);
    }
}
package com.javacoffee.servlet;

import com.javacoffee.dao.UserDao;

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.io.IOException;
import java.sql.SQLException;

@WebServlet("/UpdateServlet")
public class UpdateServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String lastUsername = request.getParameter("lastUsername");
        String newUsername = request.getParameter("newUsername");
        String newPassword = request.getParameter("newPassword");
        Object[] objects = {newUsername,newPassword,lastUsername};
        UserDao userDao = new UserDao();
        try {
            userDao.update(objects);
            request.getRequestDispatcher("UpdateSuccess.jsp").forward(request,response);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

效果图:我就是简单的做了做 有很多bug没修复 界面也很丑哈哈哈

 

 

 

 如果有需要源码的同志们可留言

这篇关于Java中servlet和重定位、转发,以及简单的登陆注册界面的实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!