极简Java Web项目-纯Servlet实现前后端贯通+MySql数据库增、删、改、查。(没有框架、没有service、没有dao)

xiaoxiao2021-02-28  57

作为一位萌新,在上手java的时候,我们能想到的,是越简单越好,越简洁越好,我不要什么业务分层、不要什么高深框架,我只要最简洁、能让我一眼就看明白流程的实现方式,那么,这个适合你!

采用前端一个页面+Servlet即可搞定。听起来是不是美滋滋?

1.前端一个页面,长这样,具体的自己实现,就两个input 一个选择项,两个button。

2.java代码

直接上Servlet(增)

public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取前端传来的参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String sex = req.getParameter("sex"); try { //1.加载驱动 (这一步是反射原理) Class.forName("com.mysql.jdbc.Driver"); //2.建立数据库连接 String url="jdbc:mysql://localhost:3306/jdbc_test"; Connection connection = DriverManager.getConnection(url, "root", "88888888"); //3.准备sql语句 String sql = "INSERT INTO info VALUES(?,?,?)"; PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1,username); preparedStatement.setString(2,password); preparedStatement.setString(3,sex); //4.执行语句 preparedStatement.executeUpdate();//与execute的区别 //5.关闭资源 preparedStatement.close(); connection.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } System.out.println("执行结束了!快跑去数据库看看吧!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); } }

删除和修改与增加原理相同,只是sql语句的不同。

完完整整的流程就在上面了。

思考几个问题:

1. 为什么LoginServlet需要继承HttpServlet ? HttpServlet在哪个jsr包中?

2.为什么写serialVersionUid?

3.增、删、改三种操作中,前端传来的参数,是通过什么流程被servlet获取的,并入和操纵数据库的?

4.executeUpdate()与 execute()的区别?

解答:

1.在客户端请求时,由服务器调用HttpServlet的Service方法,其内部调用是根据当前请求是GET还是POST的提交dao请求来做出具体调用哪一个方法,而在HttpServlet里边没有具体实现这个是一模板方法,由用户自己实现业务逻辑。

2.序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。 有两种生成方式: 一个是默认的1L,比如:private static final long serialVersionUID = 1L; 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如: private static final long serialVersionUID = xxxxL; (暂时了解一下吧)

3.前端的参数,通过请求发送给后端servlet,servlet调用request.getPameter()方法,来获取参数内容。

通过JDBC连接数据库,通过PreparedStatement发送sql语句,由executeUpdate()执行。

4.相同点:execute与executeUpdate的相同点:都可以执行增加,删除,修改

不同1: execute可以执行查询语句 然后通过getResultSet,把结果集取出来 executeUpdate不能执行查询语句 不同2: execute返回boolean类型,true表示执行的是查询语句,false表示执行的是insert,delete,update等等 executeUpdate返回的是int,表示有多少条数据受到了影响

离小白又远了一步,好难受。 

关于查

ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()){ System.out.println("姓名:"+resultSet.getString("username")+" 密码:"+resultSet.getString("password")+"性别:"+resultSet.getString("sex")); }

在上面增删改的基础上,加上一个结果集获取查询到的结果,使用的方法是executeQuery()

之后使用while遍历,在控制台输出内容。

注意:不能使用增强for循环。我在面试的时候就别这个东西坑了。

 

转载请注明原文地址: https://www.6miu.com/read-2627715.html

最新回复(0)