Java Web--JBDC+servlet+JSP+Tomcat

项目的构成:

主要知识框架

题目:

Java数据库编程

在安装配置好Mysql数据库后,使用Java语言通过JDBC直接连接数据库,在数据库中建表并进行表数据的增删查改。

关键代码:

……

Class.forName(……); //加载数据库驱动名

String url=…..;  //数据连接的url

String name=……;  //数据库访问的用户名

String password=……;  //数据库访问的密码

Connection con= DriverManager.getConnection(url, name, password);

……

在安装配置好数据库Mysql后,需要使用Java编程完成如下任务:

(1)创建数据库表users,字段分别为username(主键,varchar(10))、pass(varchar(8));数据库表person,字段按分别为username(varchar(10),对应于users表的username)、name(主键,varchar(20))、age(int,可以为空)、teleno(char(11),可以为空);如表users中username则表person中也不能有相应的username的数据。

(2)在表users中插入4行数据,数据分别是(ly,123456)、(liming,345678)、(test, 11111)、(test1,12345),在表person中插入3行数据,数据分别为(ly,雷力)、(liming,李明,25)、(test,测试用户,20,13388449933);

(3)在person表中插入5行数据,分别为(ly,王五)、(test2,测试用户2)、(test1,测试用户1,33)、(test,张三,23,18877009966)、(admin,admin)。对于表中已有的username,则根据最新的数据修改其相应字段值;如该username不存在,则首先在表users中插入该username,默认的password为888888,然后才能将数据插入至person表。

(4)删除users表中test打头的username,同时按照规则一并删除person表相应的数据。

要求每个处理阶段均要在控制台打印出处理完成后的结果,格式按照制表方式输出,如:

表users

字段名xx      字段名xx        ….

xx                   xx

表person

字段名xx     字段名xx        ….

xx                  xx

其中,在使用Java对数据库进行增删改查的操作时,必须对数据库的访问进行代码封装,即要创建一个类或者多个类,这些类负责与数据库的进行交互,其它的类通过调用这些类中的方法来实现对数据库相应数据的操作,而且后续实验也需要使用本实验的封装类进行操作。如未进行代码封装,则实验基准分降低。

自此实验结束,按照要求提交源代码进行检查。

 


编写web页面,完成对实验一数据库的操作

1、编写页面如图2.6所示

2.6 数据库操作页面图

2、分别对应于2个表单编写后台处理逻辑(可以用JSP或Servlet进行处理),然后返回一个页面处理结果的页面,告知用户成功完成什么操作(如是进行了删除操作则信息相应改变),页面内有链接进行数据库数据的查询,如图2.7所示。

2.7 数据库操作页面图

3、点击”查看数据库数据”则跳转到如图2.8所示页面,将数据库数据在页面中呈现出来,页面内有返回数据库操作页面的链接,点击即可跳转到数据库操作页面。

2.8  数据库数据查询页面图

4、编码要求:重用实验一的JDBC封装类,通过该封装类来进行数据库的增删改查。

一、JBDC

使用泛型,java的反射机制:参考文章:reference1

(1)泛型:可以加强类型安全,减少类型转换

(2)java反射机制:可以取得任意一个已经class的内部信息,例如属性和方法

 两个实体类:

Person:

package entity;

public class Person {

    private String username;
    private String name;
    private String age;
    private String teleno;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getTeleno() {
        return teleno;
    }
    public void setTeleno(String teleno) {
        this.teleno = teleno;
    }
 
	public Person(String username, String name, String age, String teleno) {
		super();
		this.username = username;
		this.name = name;
		this.age = age;
		this.teleno = teleno;
	}
	public Person(String username,  String age, String teleno) {
		super();
		this.username = username;
		this.age = age;
		this.teleno = teleno;
	}
	public Person() {
		super();
	}
	@Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", teleno=" + teleno + "]";
    }
}

 

Users:

package entity;

public class Users {
    private String username;

    private String pass;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    
    
    public Users(String username, String pass) {
		super();
		this.username = username;
		this.pass = pass;
	}

    public Users(String pass) {
	super();
	this.pass = pass;
}
    public Users() {
	super();
}

    @Override
    public String toString() {
        return "Person [username=" + username + ", pass=" + pass+ "]";
    }
}

 DBUtil:数据库的连接,增删改查操作都在这里面。但是bug也在这里面,因为对于数据库的连接来说有很大的问题。但是这个地方我也没想明白。

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;

import com.mysql.jdbc.PreparedStatement;
 
 //公共数据库操作类
public class DBUtil {
	// 数据库连接地址
	public static String URL;
	// 用户名
	public static String USERNAME;
	// 密码
	public static String PASSWORD;
	// mysql的驱动类
	public static String DRIVER;

	private static ResourceBundle rb = ResourceBundle.getBundle("util.db-config");
	private DBUtil() {
	}
	
	// 使用静态块加载驱动程序
		static {
			URL = rb.getString("jdbc.url");
			USERNAME = rb.getString("jdbc.username");
			PASSWORD = rb.getString("jdbc.password");
			DRIVER = rb.getString("jdbc.driver");
			try {
				Class.forName(DRIVER);
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
		// 定义一个获取数据库连接的方法
		public static Connection getConn() {
			Connection conn = null;
			try {
				conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
			} catch (SQLException e) {
				e.printStackTrace();
				System.out.println("获取连接失败");
			}
			return conn;
		}

//	关闭数据库连接

	/*	public static void close(ResultSet rs, Connection conn,
				PreparedStatement ps) {
			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();
	            }
	        }
		}*/
		public static void close(Connection connection,
				PreparedStatement preparedStatement) {
			try {
				preparedStatement.close();
				connection.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}

		}
 
//插入、删除、修改
//有缺省
//	public static boolean insertUpdateDelete(String sql, Object[] params)throws SQLException  {
//		Connection connection = getConn();
//		PreparedStatement preparedStatement = null;
//		int resultCode = -1;
//		try {
//			preparedStatement = (PreparedStatement) connection
//					.prepareStatement(sql);
//			for (int i = 1; i < params.length + 1; i++) {
//				// 赋值的时候,索引是从1开始的
//				preparedStatement.setObject(i, params[i - 1]);
//			}
//			resultCode = preparedStatement.executeUpdate();
//		} catch (SQLException e) {
//			e.printStackTrace();
//		} finally {
//			// 关闭连接
//			close(connection, preparedStatement);
//		}
//		return resultCode == 1 ? true : false;
//	}
	/*增删改:0-失败 1-成功  -1-系统错误*/
	public static int insertUpdateDelete(String sql)throws SQLException, ClassNotFoundException{
		Connection connection = getConn();
		
		PreparedStatement preparedStatement = null;
		//ResultSet rs = null;
		int resultCode = -1;
//		使用PreparedStatement:是Statement的子接口,可以传入带占位符的SQL语句,提供了补充占位符变量的方法
		// resultCode执行sql返回的结果值
		try
		{
			preparedStatement = (PreparedStatement) connection
					.prepareStatement(sql);
			//rs = preparedStatement.getGeneratedKeys();
			resultCode = preparedStatement.executeUpdate();
		if(resultCode>0){
                //System.out.println("操作成功,受到影响的行数为:"+resultCode);
			return 1;    
        }
		else{
                //System.out.println("操作失败");
			return 0;
        }
		} catch(SQLException e){
			return -1;
			
		}catch(Exception e)
		{
			return -1;
		}finally {
			
			close(connection, preparedStatement);
		}
		//return resultCode == 1 ? true : false;
	}
	
 
//查询所有或者根据条件查询

	public static List<Object> select(String sql, Class classname,
			Object[] params) {
		// 获取数据库连接
		Connection connection = getConn();
		// 查询结果集
		List<Object> objectList = new ArrayList<Object>();
		try {
			
			PreparedStatement preparedStatement = (PreparedStatement) connection
					.prepareStatement(sql);
			// 如果有查询条件
			if (params != null) {
				for (int i = 1; i < params.length + 1; i++) {
					preparedStatement.setObject(i, params[i - 1]);
				}
			}

			ResultSet resultSet = preparedStatement.executeQuery();
			// 要查的列表数量
			int columnCount = resultSet.getMetaData().getColumnCount();
			while (resultSet.next()) {
				// 构建一个对象实例
				GenericClassBean<GenericClassBean> classBean = new GenericClassBean<GenericClassBean>(classname);
				Object beanObject = classBean.getClassBean(classBean);
 
				for (int i = 1; i <= columnCount; i++) {
					// 获取查询的字段名称
					String columnName = resultSet.getMetaData().getColumnName(i);
					// 获取查询的字段的值
					String value = resultSet.getString(i);
					// 给对象属性赋值
					GenericClassBean.setClassBeanPropertyValue(beanObject, columnName,
							value);
				}
				objectList.add(beanObject);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
 
		return objectList;
	}

	public static int select(String sql, int flag) {
		// TODO Auto-generated method stub
		Connection connection = getConn();
		
		try {
			
			PreparedStatement preparedStatement = (PreparedStatement) connection
					.prepareStatement(sql);
			ResultSet resultSet = preparedStatement.executeQuery();
			if(resultSet.next())
			{
				flag = 1;//不为空
			}
			else
			{
				flag = -2;//为空
			}
			// 要查的列表数量
			int columnCount = resultSet.getMetaData().getColumnCount();
			
			
			String[] colNames = new String[columnCount];
			for(int i=0; i<columnCount; i++)
			{
				colNames[i] = resultSet.getMetaData().getColumnName(i+1);
				System.out.print(colNames[i] +"\t" );
			}
			System.out.print("\n");
			while(resultSet.next())
			{
				for(String colName:colNames){
					if(resultSet.getString(colName)==null)
					{
						System.out.print(" ");
					}
					else
					System.out.print(resultSet.getString(colName) + "\t");
				}
				System.out.println();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return flag;
	}


}

 GenericClassBean:

package util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 
/**
 * 泛型类,获取实例化对象
 * 
 * @param <T>
 */
public class GenericClassBean<T> {
 
	private static Class beanClass;
 
	public GenericClassBean(Class beanClass) {
		this.beanClass = beanClass;
	}
 
	/**
	 * 获取对象示例
	 * 
	 * @param t
	 * @return
	 */
	public T getClassBean(T t) {
		try {
			t = (T) beanClass.newInstance();
		} catch (InstantiationException | IllegalAccessException e) {
			e.printStackTrace();
		}
		return t;
 
	}
 
	/**
	 * 给对象属性赋值
	 * 
	 * @param propertyName
	 *            对象的set方法名称
	 * @param paropertyValue
	 *            对象set方法set的值
	 */
	public static void setClassBeanPropertyValue(Object object,
			String propertyName, String paropertyValue) {
		Method method = null;
		/*
		 * propertyName对应的是对象的属性名称,和数据库列名称也要相同,例如User类的属性有username,
		 * 对应的数据库字段也是username,对应的方法名称就是setUsername
		 */
		propertyName = propertyName.substring(0, 1).toUpperCase()
				+ propertyName.substring(1);
		String setMethod = "set" + propertyName;
		try {
			// 找到对象的set方法
			method = beanClass.getMethod(setMethod, String.class);
		} catch (NoSuchMethodException | SecurityException e) {
			e.printStackTrace();
		}
		try {
			// 调用方法set方法给属性赋值
			method.invoke(object, paropertyValue);
		} catch (IllegalAccessException | IllegalArgumentException
				| InvocationTargetException e) {
			e.printStackTrace();
		}
	}
 
}

 一个用来测试的主函数:

package util;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import entity.Person;

public class MainTest {
	
	private static final boolean False = false;

	public static void menu()
	{
		System.out.println("\t请输入要进行的操作:\n");
		System.out.println("\t1:插入操作"+"\t2:删除操作"+"\t3:修改操作"+"\t4:查询操作"+"\t5:打印表"+"\t\t6:退出\n" );
	}
//	public static void print_table(String table)
//	{
//		String operate = "select * from " + table;
//		DBUtil.select(operate);
//	}
	
	public static String get_first_object(String str)//获取sql语句中的key
	{
		Pattern p1=Pattern.compile("\'(.*?)\'");
		 Matcher m = p1.matcher(str);
		ArrayList<String> list = new ArrayList<String>();
		while (m.find()) {
		list.add(m.group().trim().replace("\'","")+" ");
      }
		String object = list.get(0);
		return object;
	}
	


	public static void main(String[] args) throws SQLException, ClassNotFoundException {
		
		
//		String selectSql_3 = "select * from person";
//		List<Object> productList = DBUtil.select(selectSql_3, Person.class,
//				null);
//		System.out.print(productList.size());
		
//		for (int i = 0; i < productList.size(); i++) {
//			Person pro = (Person) productList.get(i);
//		System.out.println("name"+pro.getName());
//			
//		}
		String uname2 = "lyy";
		String sql_query = "select * from users";
		int flag = -1;
		flag = DBUtil.select(sql_query, flag);
		
		System.out.print(flag);
		
		
   
		/*String uname = "";
		String Default = "delete from person where username = " + "'"+uname+ "'";
		int f = DBUtil.insertUpdateDelete(Default);
		System.out.println(f);*/
//		String uname2 = "ly";
//		String sql_query = "select * from users"; 
//		List<Object> productList = DBUtil.select(sql_query , Person.class,
//			null);
//		System.out.print(productList.size());

		
		}
}
	


Mysql数据库的连接配置文件:

jdbc.url=jdbc:mysql://localhost:3306/my_sql?useUnicode=true&characterEncoding=utf-8&useSSL=false
jdbc.username=root
jdbc.password=1234
jdbc.driver=com.mysql.jdbc.Driver

二、servelet

看了这个博客感觉只写一个servelet就可以了,但是我。。还是太菜了。对JSP不太熟悉,对一些事件的响应不太会处理,所以用了两个servelet。参考博客:reference2

后来看一个相关的教学视频,里面的老师说对数据库的增删改查每种功能对应一个servelet。。。没什么经验,也不知道谁是对的。

参考:reference3 这个教程真的太棒了。很喜欢里面的老师,讲的很清楚。

关于post和get里面要分别写点什么还需要去学习。 

 MyController.java

package Myservlet;

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

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 entity.Users;
import util.DBUtil;

/**
 * Servlet implementation class MyController
 */
@WebServlet("/MyController")
public class MyController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private Object userList;
      
    public MyController() {
        super();
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//response.getWriter().append("Served at: ").append(request.getContextPath());
		doPost(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//doGet(request, response);
		request.setCharacterEncoding("utf-8");
		//获取前端的请求码
		String requestCode = request.getParameter("requestCode");
		int code = Integer.valueOf(requestCode);
		int flag = -1;
        switch(code)
		{
        
		case 1:
			response.setContentType("text/html; charset=utf-8");
			response.setCharacterEncoding("utf-8");
			flag = -1;
			String uname = request.getParameter("username");
			String nname = request.getParameter("name");
//			int aage = Integer.parseInt(request.getParameter("age"));
			String aage = request.getParameter("age");
			String tele = request.getParameter("teleno");

			String sql = "insert into person values('" + uname + "','" + nname+ "','" + aage +"','"+ tele + "')";
			
			try {
				flag = DBUtil.insertUpdateDelete(sql);
			} catch (ClassNotFoundException | SQLException e) {
				e.printStackTrace();
			}
			response.setContentType("text/html; charset=utf-8");
			response.setCharacterEncoding("utf-8");

			if(flag==1)   
			{
				response.getWriter().write("数据库操作结果:   " + "成功插入person  " + uname);				
			}
			else
			{
				//response.getWriter().write("数据库操作结果:   " + "插入失败");
				response.getWriter().write("数据库操作结果:   " + "成功插入person  " + uname);	
				String Default = "insert into users values('" + uname + "','888888')";
				
				try {
					DBUtil.insertUpdateDelete(Default);
				} catch (ClassNotFoundException | SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					flag = DBUtil.insertUpdateDelete(sql);
				} catch (ClassNotFoundException | SQLException e) {
					e.printStackTrace();
				}
				
			}
			
			response.getWriter().write("<br>"+"<a href='/JDBC_JSP_MVC/Queryallservlet'>查看数据库数据</a>");
			break;
		case 2:
			flag = -1;
			int flag2 = -1;
			response.setContentType("text/html; charset=utf-8");
			response.setCharacterEncoding("utf-8");
			
			String uname2 = request.getParameter("username");
			String sql2 = "delete from users where username = " + "'"+uname2+ "'";
			String sql_query = "select * from users where username = '" + uname2 + "'"; 
			 flag2 = DBUtil.select(sql_query, flag2);
			if(flag2 == -2)
			{
				response.getWriter().write("数据库操作结果:  该用户不存在");
			}
			else
			{
			try {
				flag = DBUtil.insertUpdateDelete(sql2);
			} catch (ClassNotFoundException | SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			//response.getWriter().write(flag+"");
			
			if(flag==1)
			{
				response.getWriter().write("数据库操作结果:   " + "成功从users表中删除  " + uname2);				
			}
			/*else if(flag == 0)
			{
				//response.getWriter().write("数据库操作结果:   " + "删除失败");
			   response.getWriter().write("数据库操作结果:  该用户不存在");
			}*/
			else
			{
				//response.getWriter().write("数据库操作结果:   " + "删除失败");
			   response.getWriter().write("数据库操作结果:   " + "成功从users表中删除  " + uname2);
               String Default2 = "delete from person where username = " + "'"+uname2+ "'";
				
				try {
					DBUtil.insertUpdateDelete(Default2);
				} catch (ClassNotFoundException | SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				try {
					flag = DBUtil.insertUpdateDelete(sql2);
				} catch (ClassNotFoundException | SQLException e) {
					e.printStackTrace();
				}
			}
			}
			response.getWriter().write("<br>"+"<a href='/JDBC_JSP_MVC/Queryallservlet'>查看数据库数据</a>");
			break;
		}
	}

}

 Queryallservlet.java

package Myservlet;

import java.io.IOException;
import java.util.List;

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 entity.Person;
import entity.Users;
import util.DBUtil;


@WebServlet("/Queryallservlet")
public class Queryallservlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public Queryallservlet() {
        super();

    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String sql1 = "select * from users";
		List<Object> usersList = DBUtil.select(sql1, Users.class,
				null);
		String sql2 = "select * from person";
		List<Object> personList = DBUtil.select(sql2, Person.class,
				null);
		request.setAttribute("usersList", usersList);
		request.setAttribute("personList", personList);
		request.getRequestDispatcher("DB_operate_result.jsp").forward(request, response);
		
		
	}

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

}

三、JSP部分

DB_operate_result.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@page import="java.util.List"%>
<%@ page import = "util.DBUtil" %>
<%@ page import = "entity.Users" %>
<%@ page import = "entity.Person" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>数据库操作结果:</title>
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
 <h1>数据表user信息</h1>
    <table>
        <tr>
            <th>username</th>
            <th>password</th>
        </tr>
        <%
		List<Object> usersList = (List<Object>)request.getAttribute("usersList");
		for(int i = 0; i < usersList.size(); i++)
		{
		
			Users user = (Users) usersList.get(i);
		%>
			<tr>
            <td><%= user.getUsername()%></td>
            <td><%= user.getPass()%></td>
            </tr>
         <% 
		  
		}
        %>
</table>

 <h1>数据表person信息</h1>
    <table>
        <tr>
            <th>username</th>
            <th>name</th>
            <th>age</th>
            <th>teleno</th>
        </tr>
        <%
		List<Object> personList = (List<Object>)request.getAttribute("personList");
		for(int i = 0; i < personList.size(); i++)
		{
		
			Person p = (Person) personList.get(i);
		%>
		<tr>
		<td><%= p.getUsername()%></td>
		<td><%= p.getName()%></td>
		<td><%= p.getAge()%></td>
		<td><%= p.getTeleno()%></td>
		</tr>
   
        <%
		}
        %>
        </table>
        <p><a href="insert_delete.jsp">返回数据库操作</a></p>

</body>
</html>

insert_delete.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>数据库操作页面</title>
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<%!
String blanknull(String s)
{
  return (s == null) ? "" : s;
}
%>
<form action="MyController" method = "POST">
            <input type = "hidden" name = "requestCode" value = "1"/><br>
            <table>
            <tr><th colspan="8">数据表person插入信息:</th></tr>
            <tr>
                <td>username</td>
                <td width="500px"><input type="text" name="username" onkeyup="this.value=this.value.replace(/\s+/g,'')"/></td>
            </tr>
            <tr>
                <td>name</td>
                <td><input type="text" name="name" onkeyup="this.value=this.value.replace(/\s+/g,'')"/></td>
            </tr>
            <tr>
                <td>age</td>
                <td><input type="text" name="age" /></td>
            </tr>
            <tr>
                <td>teleno</td>
                <td><input type="text" name="teleno"/></td>
            </tr>
            <tr><td colspan="8"><input type="submit" value="插入"></td></tr>
    </table>
        <br>
    </form>
    <form action="MyController" method = "POST">
    <input type = "hidden" name = "requestCode" value = "2"/><br>
        <table>
            <tr><th colspan="8">数据表user删除信息:</th></tr>   
            <tr>
                <td>username</td>
                <td width="500px"><input type="text" name="username" onkeyup="this.value=this.value.replace(/\s+/g,'')"/></td>
            </tr>
            <tr>
                <td colspan="8"><input type="submit" value="删除" /></td>
            </tr>   
        </table>
    </form>

</body>
</html>

style.css 

@charset "UTF-8";
body
{
    width: 50%;
    margin: 0 auto;
    text-align: center;
}
table {
    margin: 0 auto;
    border-collapse:collapse;
}
table, th, td{
    border: 1px solid black;
}

th, td{
    padding: 5px 10px;
}

关于这部分其实我还有很多的疑问,来日方长,慢慢解决,总有一天我会明白的。

JSP表单传值:reference4

Web.xml文件配置:reference5

 项目的github地址:https://github.com/grace55555/my_first_repository.git

有什么错误的地方或是什么有帮助的指点请留言。感谢。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值