基于servlet的单表增删改查功能

目录

第一步:设计数据库表

第二步:准备前端页面,怎删改查页面的运行

第三步:搭建IDEA的运行环境

第四步:后端代码的实现以及前端代码的改造

前置:封装JDBC代码

1、实现用户点击【部门列表】按钮跳转到部门列表页面

2、在部门列表中实现【详情】页的展示

 3、在部门列表页面中实现【删除】功能

4、 在部门列表页面中实现【添加】功能

注意:【添加】功能是POST请求

5、在部门列表中实现【修改】功能

优化一下上述代码

进一步优化

引入session机制和cookie机制以及jsp机制 


第一步:设计数据库表

# 部门表
drop table if exists dept;
create table dept(
	deptno int primary key,
    dname varchar(255),
    loc varchar(255)
);
insert into dept(deptno, dname, loc) values(10, 'XiaoShouBu', 'BEIJING');
insert into dept(deptno, dname, loc) values(20, 'YanFaBu', 'SHANGHAI');
insert into dept(deptno, dname, loc) values(30, 'JiShuBu', 'GUANGZHOU');
insert into dept(deptno, dname, loc) values(40, 'MeiTiBu', 'SHENZHEN');
commit;
select * from dept;

第二步:准备前端页面,怎删改查页面的运行

                用户运行代码,出现欢迎页面,点击部门列表,进入部门列表页面

                

                在部门列表页面进行怎删改查的操作:

核心代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>添加部门</title>
	</head>
	<body>
		<form action="list.html" method="get">
			部门编号<input type="text" name="deptno"/><br />
			部门名称<input type="text" name="dname"/><br />
			部门位置<input type="text" name="loc"/><br />
			<input type="submit" value="保存"/><br />
		</form>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>部门详情</title>
	</head>
	<body>
		<h1>部门详情</h1>
		<hr />
		部门编号<br />
		部门名称<br />
		部门位置<br />
		
		<input type="button" value="后退" onclick="window.history.back()"/>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>修改部门</title>
	</head>
	<body>
		<form action="list.html" method="get">
			部门编号<input type="text" name="deptno" value="2" readonly/><br />
			部门名称<input type="text" name="dname" value="研发部"/><br />
			部门位置<input type="text" name="loc" value="天津"/><br />
			<input type="submit" value="保存"/><br />
		</form>
	</body>
</html>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>部门列表页面</title>
	</head>
	<body>
		<script type="text/javascript">
			function del(dno){
				var ok = window.confirm("亲,真的要删吗")
				if(ok){
					//发送请求
					document.location.href = "/oa/dept/delete?deptno="+dno;
				}
			}
		</script>
		
		<h1>部门列表</h1>
		<hr />
		<table border="1px" align="center">
			<tr>
				<td>序号</td>
				<td>部门编号</td>
				<td>部门名称</td>
				<td>操作</td>
			</tr>
			<tr>
				<td>1</td>
				<td>10</td>
				<td>销售部</td>
				<td>
					<a href="javascript:void(0)" onclick="del(10)">删除</a>
					<a href="edit.html">修改</a>
					<a href="dtail.html">详情</a>
				</td>
			</tr>
			<tr>
				<td>2</td>
				<td>20</td>
				<td>研发部</td>
				<td>
					<a href="javascript:void(0)" onclick="del(20)">删除</a>
					<a href="edit.html">修改</a>
					<a href="dtail.html">详情</a>
				</td>
			</tr>
			<tr>
				<td>3</td>
				<td>30</td>
				<td>运营部</td>
				<td>
					<a href="javascript:void(0)" onclick="del(30)">删除</a>
					<a href="edit.html">修改</a>
					<a href="dtail.html">详情</a>
				</td>
			</tr>
			<td>
				<a href="add.html">添加</a>
			</td>
		</table>
	</body>
</html>

第三步:搭建IDEA的运行环境

        tomcat:apache-tomcat-7.0.52

        IDEA:IntelliJ IDEA 2018.2.8

        所需要的架包:mysql-connector-java-5.1.7-bin.jar;

                                  jstl.jar;

                                  standard.jar

第四步:后端代码的实现以及前端代码的改造

前置:封装JDBC代码

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/bjpowernode
user=root
password=123456
package com.servlet.oa.utils;

import java.sql.*;
import java.util.ResourceBundle;

/**
 *JDBC工具类
 **/
public class DButil {
    //静态变量,在类加载时执行
    //属性资源绑定
    private static ResourceBundle bundle = ResourceBundle.getBundle("resources.jdbc");
  //根据key获取value
    private static String driver=bundle.getString("driver");
    private static String url=bundle.getString("url");;
    private static String user=bundle.getString("user");;
    private static String password=bundle.getString("password");;

    //注册驱动
    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    public static Connection getConnection() throws SQLException {
        //获取连接
            Connection conn = DriverManager.getConnection(url,user,password);
            return conn;
    }
    //释放资源
    public static void close(Connection conn, Statement ps, ResultSet rs){
        if (rs == null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (ps == null) {
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn == null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }


    }
}

1、实现用户点击【部门列表】按钮跳转到部门列表页面

  • 修改前端页面中跳转按钮的超链接
    <a href="list.html">部门列表</a>
    <a href="/oa/dept/list">部门列表</a>

    这段代码是一个 HTML 超链接,当用户单击该链接时,会发送 GET 请求到 /oa/dept/list 路径,获取部门列表信息。

    其中,href 属性指定了链接的目标地址为 /oa/dept/list,在默认情况下浏览器会将目标地址作为相对路径来解析。如果想要指定绝对路径,可以在链接前面加上协议名称(http或https)和主机地址,例如 <a href="http://www.example.com/oa/dept/list">部门列表</a>

  • 编写xml文件:

    在 Java web 中,XML 文件主要有以下几个作用:

    1. 配置 web 应用:通过 web.xml 文件配置应用的基本信息,例如 URL 映射、Servlet 的初始化参数、错误页面等。

    2. 配置 Servlet:通过使用 Servlet 的注解或在 web.xml 配置文件中添加 servlet 元素的方式,来定义和配置 Servlet 的初始化参数、映射 URL 以及关联监听器等。

    3. 定义数据源:使用 context.xml 文件可以定义数据源信息,JNDI 因此可以向与服务器运行环境绑定的资源进行链接。

    4. 配置拦截器:通过编写 web.xml 文件中的 filter 和 filter-mapping 元素来配置过滤器,实现对请求和响应进行预处理和后处理,进行日志记录、字符编码设置、防止 XSS 攻击和 CSRF 攻击等操作。

    5. 定义目录结构:通过使用 ant 风格转换的规则来描述包和类路径。例如,将类库文件存放到 WEB-INF/lib 目录中,Java 类文件存放在 WEB-INF/classes 中。

    6. 这段代码是在 Web 应用程序中定义了一个 Servlet,并将其映射到 URL /dept/list 上。具体来说,此处的配置做了以下两件事情:

      使用 <servlet> 标签定义了一个名为 list 的 Servlet,它的 Java 类完整类名是 com.servlet.oa.web.action.DeptListServlet

      使用 <servlet-mapping> 标签将 Servlet 名称为 list 的 Servlet 映射到了 URL 模式为 /dept/list 上。这段配置使得当用户访问 /dept/list 时,Servlet 容器能够调用 com.servlet.oa.web.action.DeptListServlet 来响应该请求,并执行相关逻辑后生成相应内容返回给客户端。其中,<servlet> 标签中的 servlet-name 元素指定了 Servlet 的名称,该名称可被 <servlet-mapping> 中的 servlet-name 引用。<servlet-class> 元素指定了 Servlet 的实现类。

    7. <servlet-mapping> 标签中的 servlet-name 元素引用了之前定义的 Servlet 名称,<url-pattern> 元素则指定了要映射的 URL 模式,也就是客户端将访问的地址。此处请求路径为 /dept/list,这意味着所有以 /dept/list 路径开头的请求都会被交给 com.servlet.oa.web.action.DeptListServlet 这个 Servlet 进行处理。

          <!--查询部门列表-->
          <servlet>
              <servlet-name>list</servlet-name>
              <servlet-class>com.servlet.oa.web.action.DeptListServlet</servlet-class>
          </servlet>
          <servlet-mapping>
              <servlet-name>list</servlet-name>
              <url-pattern>/dept/list</url-pattern>
          </servlet-mapping>
  • 编写/oa/dept/list路径下的servlet代码

  • 在src目录下创建com.servlet.oa.web.action目录,在action目录下创建DeptListServlet.java文件,并在其中继承HttpSrevlet类,重写doGet方法

    package com.bjpowernode.oa.web.action;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    public class DeptListServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
        }
    }

    在doGet方法中,需要辨别【前端代码】中哪些是需要连接数据库进行动态展示的

            //获取应用的根路径
            String contextPath = request.getContextPath();
    
            //设置响应的内容类型及字符集,防止中文乱码的额出现
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
    
    
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("	<head>");
            out.println("		<meta charset='utf-8'>");
            out.println("		<title>部门列表页面</title>");
    
            out.println("<script type='text/javascript'>");
            out.println("        function del(dno){");
            out.println("    var ok = window.confirm('亲,真的要删吗')");
            out.println("    if(ok){");
            out.println("        //发送请求");
            out.println("        document.location.href = '"+contextPath+"/dept/delete?deptno='+dno;");
            out.println("    }");
            out.println("}");
            out.println("</script>");
    
            out.println("	</head>");
            out.println("	<body>");
    
            out.println("		<h1>部门列表</h1>");
            out.println("		<hr />");
            out.println("		<table border='1px' align='center'>");
            out.println("			<tr>");
            out.println("				<td>序号</td>");
            out.println("				<td>部门编号</td>");
            out.println("				<td>部门名称</td>");
            out.println("				<td>操作</td>");
            out.println("			</tr>");
                         //往上是死的
    
    
            //连接数据库,查询所有部门列表
            Connection conn = null;
            PreparedStatement ps = null;
            ResultSet rs = null;
            try {
                //获取连接
                conn = DButil.getConnection();
                //获取预编译的数据库操作对象
                String sql 
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值