Web对数据库的增删改查(servlet+jsp+javaBean增删改查)

Posted 辉常努腻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web对数据库的增删改查(servlet+jsp+javaBean增删改查)相关的知识,希望对你有一定的参考价值。

1.开始之前的准备(servlet+jsp+javaBean增删改查)

  • jsp:页面的请求和展示

    • 在前台主要学了jsp进行页面的请求和展示
  • java后台

  • mysql数据库

    • 学习了java如何进行数据库增删改查
      • JDBC
      • JDBC重构Dao
        • Dao进行sql语句
    • 将数据库的获取结果响应到页面上
  • 页面向后台进行请求

    • 请求:(url:http://xx.8080/student.do)
    • servlet进行响应
  • jsp+servlet+javaBean+mysql === M2

  • 代码准备

    • StudentServlet.java

      • package com.Li;
        
        import java.io.IOException;
        
        import javax.servlet.ServletException;
        import javax.servlet.http.HttpServlet;
        import javax.servlet.http.HttpServletRequest;
        import javax.servlet.http.HttpServletResponse;
        
        /**
         * @desc Student 模块的 Servlet
         * @author Li Ya Hui 
         * @time   2021年6月2日 上午8:34:22
         */
        public class StudentServlet extends HttpServlet {
        
            @Override
            protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                System.out.println("Student--->service");
            }
        }
        
    • index.jsp

      • <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
        <!DOCTYPE html>
        <html>
            <head>
                <meta charset="UTF-8">
                <title>JSP+Servlet+JavaBean实现表单的增删改查</title>
            </head>
            <body>
                <a href="<%=request.getContextPath()%>/student.do">Student模块的全部查询 </a>
            </body>
        </html>
        
    • web.xml

      • <servlet>
            <servlet-name>ser</servlet-name>
            <servlet-class>com.Li.StudentServlet</servlet-class>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>ser</servlet-name>
            <url-pattern>/studnet.do</url-pattern>
        </servlet-mapping>
        

2.查询

  • 首先创建一个Dao(连接数据库)

  • 然后创建一个查询的类StudnetService实例化Dao(StudnetService)

  • 在StudentServlet里创建一个StudnetService对象的query方法

  • query方法将数据转成list<map>然后再存储到request对象里去

  • 在StudentServlet里service方法里获取链接里的method如果匹配 调用 query查询方法

  • 在主页面里写一个超链接,超链接为<a href="<%=request.getContextPath()%>/student.do?method=query"> Student模块的全部查询 </a>

  • method的参数为query代表我的一个匹配参数

  • 当servlet匹配成功时,会将request.getRequestDispatcher("/jsps/studnet/list_student.jsp").forward(request, response);发送请求

  • 子页面接收数据的代码(list_student.jsp)

    • <%@page import="java.util.Map"%>
      <%@page import="java.util.List"%>
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>Student 模块的查询展示界面</title>
      <style type="text/css">
      	*{
      		margin: 0;
      		padding: 0;
      	}
      	table{
      	border-width:2px;
      		border-color: red;
      		text-align: center;
      	}
      </style>
      </head>
      <body>
      	<table border="1">
      		<tr>
      			<td>学号</td>
      			<td>姓名</td>
      			<td>年龄</td>
      			<td>性别</td>
      			<td>操作</td>
      		</tr>
      		<%
      			List list = (List) request.getAttribute("list");
      			for(int i = 0 ; i < list.size() ; i++)
      			{
      				Map map =(Map) list.get(i);
      		%>
      		<tr>
      			<td><%=map.get("sno") %></td>
      			<td><%=map.get("sname") %></td>
      			<td><%=map.get("sage") %></td>
      			<td><%=map.get("ssex") %></td>
      			<td>
      				<a href="#">添加</a>
      				<a href="#">修改</a>
      				<a href="#">删除</a>
      			</td>
      		</tr>
      		<%
      			}
      		%>
      	</table>
      </body>
      </html>
      
  • 配置web.xml

    • <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://JAVA.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
        <display-name>WebM2Demo001</display-name>
        <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
          <welcome-file>default.html</welcome-file>
          <welcome-file>default.htm</welcome-file>
          <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
        <servlet>
        	<servlet-name>StudentServlet</servlet-name>
        	<servlet-class>com.Li.student.StudentServlet</servlet-class>
        </servlet>
        <servlet-mapping>
        	<servlet-name>StudentServlet</servlet-name>
        	<url-pattern>/student.do</url-pattern>
        </servlet-mapping>
      </web-app>
      

3.删除

  • 删除的第一步,首先给删除的按钮加上链接:<a href="<%=request.getContextPath()%>/student.do?method=delete&sno=<%=map.get("sno") %>">删除</a>

  • method=delete 制造关键字

  • sno=<%=map.get(“sno”) %> 制造主键

  • 在StudentServlet的service方法里添加method=delete时的方法,调用delete方法

  • delete方法里调用StudentService里的deleteBySno方法

    • /**
      	 * @desc 根据学号删除了一条学生信息
      	 * @param sno
      	 * @throws SQLException 
      	 * @throws ClassNotFoundException 
      	 */
      	public void deleteBySno(String sno) throws ClassNotFoundException, SQLException {
      		// 删除
      		dao.executeUpdate(" delete from student where sno='"+sno+"'");
      	}
      
  • 在StudentServlet的delete方法里进行重定向

    • //2.调用studentService中的方法执行sql语句实现删除该条记录
      studentservice.deleteBySno(sno);
      //3.重定向:刷新   重新指向新的页面  简介进行刷新页面
      response.sendRedirect(request.getContextPath()+"/student.do?method=query");
      

4.添加

  • 添加的第一步,首先给添加按钮加上链接:<a href="<%=request.getContextPath()%>/student.do?method=addPage">添加</a>

  • method=addPage 代表要进入信息添加页面

  • 新建student模块添加页面

    • <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>student模块的添加页面</title>
      <style type="text/css">
      	*{
      		margin:0;
      		padding:0;	
      	}
      
      </style>
      </head>
      <body>
      	<form action="<%=request.getContextPath()%>/student.do?method=add" method="post">
      		<table border="2" algin="center">
      			<tr>
      				<td>姓名</td>
      				<td><input type="text" name="sname" value=""/></td>
      			</tr>
      			<tr>
      				<td>年龄</td>
      				<td><input type="text" name="sage" value=""/></td>
      			</tr>
      			<tr>
      				<td>性别</td>
      				<td><input type="text" name="ssex" value=""/></td>
      			</tr>
      			<tr>
      				<td colspan="2"><input type="submit" style="display:block;margin:auto;" value="提交"/></td>
      			</tr>
      		</table>
      	</form>
      </body>
      </html>
      
  • 在添加页面的表单里提交地址为:action="<%=request.getContextPath()%>/student.do?method=add"

  • 因为表单存在英文,当前前台向后台用form表单传输数据时,需要设定编码request.setCharacterEncoding("utf-8");

  • 在StudentService里service判断里添加else if(“addPage”.equals(method)) {this.addPage(request,response);
    }

  • 在StudentService里service判断里添加

    else if("add".equals(method)) {
        this.add(request,response);
    }
    
  • 在StudentService里添加add数据方法

    • /**
      	 * @desc 保存添加页面的数据
      	 * @param request
      	 * @param response
      	 * @throws SQLException 
      	 * @throws ClassNotFoundException 
      	 * @throws IOException 
      	 */
      	private void add(HttpServletRequest request, HttpServletResponse response) throws ClassNotFoundException, SQLException, IOException {
      		System.out.println("StudentServlet--->add()");
      		//1.接值
      		String sname = request.getParameter("sname");
      		String sage = request.getParameter("sage");
      		String ssex = request.getParameter("ssex");
      		
      		System.out.println(sname+sage+ssex);
      		//2.调用StudentService中的方法执行sql语句实现将数据保存到mysql数据库中
      		studentservice.save(sname,sage,ssex);
      		
      		//3.进行重定向(刷新)
      		response.sendRedirect(request.getContextPath()+"/student.do?method=query");
      	}
      
  • 还需要在StudentService里添加一个save保存方法

    • /**
      	 * @desc 根据前台的信息从而添加一条学生信息到数据库
      	 * @param sname
      	 * @param sage
      	 * @param ssex
      	 * @throws SQLException 
      	 * @throws ClassNotFoundException 
      	 */
      	public void save(String sname, String sage, String ssex) throws ClassNotFoundException, SQLException {
      		dao.executeUpdate("insert into student values ('"+UUID.randomUUID().toString().substring(0, 9)+"','"+sname+"','"+Integer.parseInt(sage)+"','"+ssex+"')");
      	}
      
  • 测试添加数据(完成)

5.修改

5.1.进入修改的页面

  • 首先讲展示数据页面的修改连接改为

    • <a href="<%=request.getContextPath()%>/student.do?method=editPage&sno=<%=map.get("sno")%>">修改</a>
      
  • method=editPage 代表将进入修改信息界面内 并且将此数据的sno作为参数传入

  • 然后将StudentServlet里的service方法method关键字判断加入editPage

    • else if("editPage".equals(method)) 
      {
          this.editPage(request,response);
      }
      
  • 然后创建一个editPage函数

    • /**
      	 * @desc 跳转到学生信息修改页面  转发
      	 * @param request
      	 * @param response
      	 * @throws SQLException 
      	 * @throws ClassNotFoundException 
      	 * @throws IOException 
      	 * @throws ServletException 
      	 * @throws  
      	 */
      private void editPage(HttpServletRequest request, HttpServletResponse response) throws ClassNotFoundException, SQLException, IOException, ServletException {
          System.out.println("StudentServlet--->editPage");
          //1.接值
          String sno = request.getParameter("sno");
          System.out.println(sno);
          //2.根据传递过来的sno查询该条数据信息
          Map<String, Object> map = studentservice.queryOneBySno(sno);	
          System.out.println(map);
          //3.存值
          request.setAttribute("map", map);
          //4.转发地址  
         request.getRequestDispatcher("/jsps/studnet/edit_student.jsp").forward(request, response);
      }
      
  • 我们发现,现在需要一个方法来根据sno查找数据 studentservice.queryOneBySno(sno)

  • 在StudentService 里创建方法

    • /**
      	 * @desc 4.根据sno查询一条数据
      	 * @param sno
      	 * @return
      	 * @throws SQLException 
      	 * @throws ClassNotFoundException 
      	 */
      	public Map<String, Object> queryOneBySno(String sno) throws ClassNotFoundException, SQLException {
      		return dao.executeQueryForMap("select * from student where sno = '"+sno+"'");
      	}
      
  • 接下来数据已经存入到了 request 并且已经转到了修改页面,只剩下了 “ 喷数据 ”