使用Maven开发用户模块的CRUD(增删改查)
《使用Maven开发Web应用详细步骤》教程中介绍了怎样实现一个简单的 Web 应用,讲述了创建 Web 应用、编写代码、在 pom.xml 中配置相关的构件、最后发布测试,接下来再介绍一个经典的实现了 CRUD 的用户 Web 管理应用。
这里用的是 MySQL 数据库。建议先安装好数据库,然后创建一个数据库,用如下脚本初始化表。
UserService.java(用户服务类)代码如下所示:
AddUserServlet.java(添加用户Servlet)代码如下所示:
DeleteUserServlet.java(删除用户Servlet)代码如下所示:
创建 Web 工程和初始化数据库
首先,按照教程前面的指导创建一个 Web 工程,创建好工程后,下一步就是初始化数据库了。这里用的是 MySQL 数据库。建议先安装好数据库,然后创建一个数据库,用如下脚本初始化表。
CREATE TABLE mvn_user( ur_id int(11) NOT NULL AUTO_INCREMENT, ur_user_name varchar(255) DEFAULT NULL, ur_password varchar(255) DEFAULT NULL, ur_age int(11) DEFAULT NULL, ur_status varchar(255) DEFAULT NULL, PRIMARY KEY (ur_id) ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; INSERT INTO mvn_user(ur_user_name,ur_password,ur_age,ur_status) VALUES ('zhangsan', '123', 11, 'Active'); INSERT INTO mvn_user(ur_user_name,ur_password,ur_age,ur_status) VALUES ('lisi', '123', 13, 'Inactive'); INSERT INTO mvn_user(ur_user_name,ur_password,ur_age,ur_status) VALUES ('wangwu', '123', 13, 'Active');
添加相关依赖
在整个 Demo 应用中,需要在创建 Web 工程后,额外添加 4 个依赖,分别是 jstl 依赖、MySQL 数据库驱动依赖、JUnit 4.7 依赖和 json-lib 依赖。它们的依赖配置文件如下:<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
添加注册代码
MvnUser.java(用户实体类)代码如下所示:public class MvnUser { private int urId; private String urUserName; private String urPassword; private int urAge; private String urStatus; public int getUrId() { return urId; } public void setUrId(int urId) { this.urId = urId; } public String getUrUserName() { return urUserName; } public void setUrUserName(String urUserName) { this.urUserName = urUserName; } public String getUrPassword() { return urPassword; } public void setUrPassword(String urPassword) { this.urPassword = urPassword; } public int getUrAge() { return urAge; } public void setUrAge(int urAge) { this.urAge = urAge; } public String getUrStatus() { return urStatus; } public void setUrStatus(String urStatus) { this.urStatus = urStatus; } }DBConnection.java(连接数据库的公共类)代码如下所示:
import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; /** * 获取连接的一个工具类,继承Properties,实现如下封装: * 1 读取db.properties文件 * 2 获取Connection连接的方法 * 3 关闭资源的方法 * * @author Noble * @version 1.0 */ public class DBConnection extends Properties { private static DBConnection DB_CONN = null; /** * 构造器方法,被私有化,封装读取db.properties逻辑 * */ private DBConnection() throws Exception { InputStream in = DBConnection.class.getClassLoader().getResourceAsStream("db.properties"); this.load(in); // 加载驱动类 Class.forName(this.getProperty("driverName")); } /** * 单例模式实现,获取DBConnection实例的静态方法 * * @return DBConnection DBConnection实例 * @throws Exception 初始化db.properties出现问题时,会抛异常 */ public static DBConnection getInstance() throws Exception { if (DB_CONN == null) { DB_CONN = new DBConnection(); } return DB_CONN; } /** * 基于驱动和db.properties中配置的连接数据库的信息,创建一个新连接返回 * * @return Connection 创建的新连接对象 * */ public Connection getConnection() { Connection conn = null; String url = this.getProperty("url"); String userName = this.getProperty("userName"); String password = this.getProperty("password"); // try { conn = DriverManager.getConnection(url, userName, password); } catch (Exception e) { throw new RuntimeException("数据库连接错误,请与管理员联系"); } return conn; } /** * 关闭操作数据库后的资源 * * @param conn Connection对象 * @param stmt Statement或Statement的子类对象 * @param rs ResultSet对象 */ public void close(Connection conn, Statement stmt, ResultSet rs) { try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } }MvnUserDAO.java(用户的 DAO 持久层类)代码如下所示:
/**import**/ /** * MvnUser实体对象的持久层代码,封装了对MvnUser实体对象的CRUD方法 * * @author Noble * @version 1.0 */ public class MvnUserDAO { /** * 在数据库中,添加一个新的MvnUser对象 * * @param user 需要添加的用户实体对象,该对象需要有用户名、密码、年龄和状态属性 * * @return void * @throws RuntimeException 添加失败或出现其它意外 */ public void addUser(MvnUser user) { DBConnection dbConn = null; Connection conn = null; PreparedStatement pstmt = null; try { // 获取DBConnection实例 dbConn = DBConnection.getInstance(); String sql = "insert into mvn_user (ur_user_name,ur_password,ur_age,ur_status) values(?,?,?,?)"; // 获取连接对象 conn = dbConn.getConnection(); // 基于连接和sql,获取一个预处理Statement对象 pstmt = conn.prepareStatement(sql); // 设置sql中占位符的值 pstmt.setString(1, user.getUrUserName()); pstmt.setString(2, user.getUrPassword()); pstmt.setInt(3, user.getUrAge()); pstmt.setString(4, user.getUrStatus()); // 执行预处理 pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { // 关闭资源 if (dbConn != null) dbConn.close(conn, pstmt, null); } } /** * 更新MvnUser对象。该对象中需要设置年龄、状态和id属性,属性和状态是要更新的新值,id为条件 * * @param user 需要更新的MvnUser对象 * * @return void * @throws RuntimeException 更新失败或出现其它意外 */ public void update(MvnUser user) { DBConnection dbConn = null; Connection conn = null; PreparedStatement pstmt = null; try { dbConn = DBConnection.getInstance(); String sql = "update mvn_user set ur_age=?,ur_status=? where ur_id=?"; conn = dbConn.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setInt(1, user.getUrAge()); pstmt.setString(2, user.getUrStatus()); pstmt.setInt(3, user.getUrId()); pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { if (dbConn != null) dbConn.close(conn, pstmt, null); } } /** * 删除MvnUser对象,该对象中需要有要删除对象的id属性,id属性为删除条件 * * @param user 要删除的MvnUser对象 * * @return void * @throws RuntimeException 删除失败或出现其它意外 */ public void deleteUser(MvnUser user) { DBConnection dbConn = null; Connection conn = null; PreparedStatement pstmt = null; try { dbConn = DBConnection.getInstance(); String sql = "delete from mvn_user where ur_id=?"; conn = dbConn.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setInt(1, user.getUrId()); pstmt.executeUpdate(); } catch (Exception e) { throw new RuntimeException(e); } finally { if (dbConn != null) dbConn.close(conn, pstmt, null); } } /** * 根据id查询对应的MvnUser对象 * * @param id 要查询的MvnUser对象的id * @return MvnUser id对应的MvnUser对象,如果没有对象,返回null * @throws RuntimeException 出现意外情况 */ public MvnUser findUserById(int id) { MvnUser user = null; DBConnection dbConn = null; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { dbConn = DBConnection.getInstance(); String sql = "select * from mvn_user where ur_id=?"; conn = dbConn.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); rs = pstmt.executeQuery(); if (rs.next()) { user = new MvnUser(); user.setUrAge(rs.getInt("ur_age")); user.setUrId(rs.getInt("ur_id")); user.setUrPassword(rs.getString("ur_password")); user.setUrStatus(rs.getString("ur_status")); user.setUrUserName(rs.getString("ur_user_name")); } } catch (Exception e) { throw new RuntimeException(e); } finally { if (dbConn != null) dbConn.close(conn, pstmt, rs); } return user; } /** * 根据用户名查询对应的MvnUser对象 * * @param userName 要查询的MvnUser对象的用户名 * @return MvnUser 用户对应的MvnUser对象,如果没有对象,返回null * @throws RuntimeException 出现意外情况 */ public MvnUser findUserByUserName(String userName) { MvnUser user = null; DBConnection dbConn = null; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { dbConn = DBConnection.getInstance(); String sql = "select * from mvn_user where ur_user_name=?"; conn = dbConn.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, userName); rs = pstmt.executeQuery(); if (rs.next()) { user = new MvnUser(); user.setUrAge(rs.getInt("ur_age")); user.setUrId(rs.getInt("ur_id")); user.setUrPassword(rs.getString("ur_password")); user.setUrStatus(rs.getString("ur_status")); user.setUrUserName(rs.getString("ur_user_name")); } } catch (Exception e) { throw new RuntimeException(e); } finally { if (dbConn != null) dbConn.close(conn, pstmt, rs); } return user; } /** * 查找数据库中所有的用户对象,以List集合的形式返回 * * @return List<MvnUser> 所有用户对象的集合 * @throws RuntimeException 出现意外情况 */ public List<MvnUser> findUsers() { List<MvnUser> userList = null; DBConnection dbConn = null; Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { dbConn = DBConnection.getInstance(); String sql = "select * from mvn_user order by ur_id"; conn = dbConn.getConnection(); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); if (rs != null) { userList = new ArrayList<MvnUser>(); MvnUser user = null; while (rs.next()) { user = new MvnUser(); user.setUrAge(rs.getInt("ur_age")); user.setUrId(rs.getInt("ur_id")); user.setUrPassword(rs.getString("ur_password")); user.setUrStatus(rs.getString("ur_status")); user.setUrUserName(rs.getString("ur_user_name")); userList.add(user); } } } catch (Exception e) { throw new RuntimeException(e); } finally { if (dbConn != null) dbConn.close(conn, pstmt, rs); } return userList; } }
UserService.java(用户服务类)代码如下所示:
/** * 对用CRUD操作的服务层,封装了CRUD在持久化前的必要业务逻辑 * * @author Noble * @version 1.0 */ public class UserService { private MvnUserDAO userDAO = new MvnUserDAO(); /** * 创建新的用户 * * @param user 要创建的用户对象 * @return void * @throws RuntimeException 当用户信息不全或用户名已经存在的时候,都会抛出异常 */ public void createUser(MvnUser user) { // 验证基本的用户信息 if (user == null || user.getUrUserName() == null || user.getUrPassword() == null) { throw new RuntimeException("用户信息不合法"); } // 根据用户名查询用户对象 MvnUser u = userDAO.findUserByUserName(user.getUrUserName()); // 如果能查询到用户对象,说明用户已经存在,抛异常 if (u != null) { throw new RuntimeException(user.getUrUserName() + " 用户已存在"); } // 调用dao代码,添加一个新用户 userDAO.addUser(user); } /** * 更新id对应用户的年龄和状态信息 * * @param age 要更新用户的新年龄 * @param status 要更新用户的新状态 * @param id 要更新用户的id,这是更新的条件 * * @return void */ public void editUser(int age, String status, int id) { MvnUser user = this.userDAO.findUserById(id); user.setUrAge(age); user.setUrStatus(status); this.userDAO.update(user); } public void deleteUser(int id) { MvnUser user = this.userDAO.findUserById(id); this.userDAO.deleteUser(user); } public MvnUser searchUser(int id) { MvnUser user = this.userDAO.findUserById(id); return user; } public MvnUser searchUser(String userName) { MvnUser user = this.userDAO.findUserByUserName(userName); return user; } public List<MvnUser> searchUsers() { List<MvnUser> userList = this.userDAO.findUsers(); return userList; } }
AddUserServlet.java(添加用户Servlet)代码如下所示:
/** import **/ /** * Servlet implementation class AddUserServlet */ public class AddUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取要添加用户的信息 String userName = request.getParameter("userName"); String password = request.getParameter("password"); String ageStr = request.getParameter("age"); String status = request.getParameter("status"); int age = 0; try { // 将年龄字符串,转变成数字(数据库中需要数字类型) age = Integer.parseInt(ageStr); } catch (Exception e) { } // 封装成MvnUser对象 MvnUser user = new MvnUser(); user.setUrAge(age); user.setUrPassword(password); user.setUrStatus(status); user.setUrUserName(userName); UserService userService = new UserService(); String msg = "添加成功"; try { // 调用service,创建用户 userService.createUser(user); } catch (Exception e) { e.printStackTrace(); msg = "添加失败:" + e.getMessage(); } // 返回添加后的结果提示信息 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(msg); } }
DeleteUserServlet.java(删除用户Servlet)代码如下所示:
/**import**/ /** * Servlet implementation class DeleteUserServlet */ public class DeleteUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String idStr = request.getParameter("id"); int id = 0; try { id = Integer.parseInt(idStr); } catch (Exception e) { } UserService userService = new UserService(); String msg = "删除成功"; try { userService.deleteUser(id); } catch (Exception e) { e.printStackTrace(); msg = "删除失败:" + e.getMessage(); } response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(msg); out.flush(); out.close(); } }EditUserServlet.java(修改用户Servlet)代码如下所示:
/** import **/ /** * Servlet implementation class EditUserServlet */ public class EditUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String idStr = request.getParameter("id"); String status = request.getParameter("status"); String ageStr = request.getParameter("age"); int id = 0, age = 0; try { id = Integer.parseInt(idStr); } catch (Exception e) { } try { age = Integer.parseInt(ageStr); } catch (Exception e) { } UserService userService = new UserService(); String msg = "修改成功"; try { userService.editUser(age, status, id); } catch (Exception e) { e.printStackTrace(); msg = "修改失败:" + e.getMessage(); } response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.print(msg); out.flush(); out.close(); } }SearchUserServlet.java(根据用户 Id 或用户名查找用户 Servlet)代码如下所示:
/** import **/ /** * Servlet implementation class SearchUserServlet */ public class SearchUserServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取查询的方式(根据id查询还是根据用户名查询) String type = request.getParameter("type"); UserService userService = new UserService(); MvnUser user = null; // 根据id查询 if ("byId".equals(type)) { // 获取id String idStr = request.getParameter("id"); int id = 0; try { id = Integer.parseInt(idStr); } catch (Exception e) { } user = userService.searchUser(id); } else { // 根据用户名查询 String userName = request.getParameter("userName"); user = userService.searchUser(userName); } // 设置返回的响应为json响应 response.setContentType("text/json;charset=UTF-8"); PrintWriter out = response.getWriter(); // 将查询的用户对象,转变成json格式的字符串,写入响应返回 out.print(JSONObject.fromObject(user)); out.flush(); out.close(); } }SearchUsersServlet.java(查询所有用户Servlet)代码如下所示:
/** import **/ /** * Servlet implementation class SearchUsersServlet */ public class SearchUsersServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse * response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { UserService userService = new UserService(); List<MvnUser> userList = userService.searchUsers(); // 将查询出的用户集合,写于request属性中 request.setAttribute("userList", userList); // 转向 userList.jsp页面 request.getRequestDispatcher("/userList.jsp").forward(request, response); } }userList.jsp(显示用户列表 jsp)代码如下所示:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <table width="100%" border="1"> <tr> <td width="51" bgcolor="#CCCCCC"> <div align="center"> <strong><span class="STYLE2">选择</span></strong> </div> </td> <td width="111" bgcolor="#CCCCCC"> <div align="center"> <strong>序号</strong> </div> </td> <td width="137" bgcolor="#CCCCCC"> <div align="center"> <strong>用户名</strong> </div> </td> <td width="105" bgcolor="#CCCCCC"> <div align="center"> <strong>年龄</strong> </div> </td> <td width="101" bgcolor="#CCCCCC"> <div align="center"> <strong>状态</strong> </div> </td> </tr> <c:forEach items="${userList }" var="_user" varStatus="status"> <tr> <c:choose> <c:when test="${status.index%2==0 }"> <tr bgcolor="#FFFFFF"> </c:when> <c:otherwise> <tr bgcolor="#99FFFF"> </c:otherwise> </c:choose> <td><input type="checkbox" name="checkbox" value="${_user.urId }"></td> <td>${status.index+1 }</td> <td>${_user.urUserName }</td> <td>${_user.urAge }</td> <td>${_user.urStatus }</td> </tr> </c:forEach> </table>index.jsp,进入首页(框架 jsp),代码如下所示:
<%@page contentType="text/html" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>测试用户CRUD操作</title> <script type="text/javascript" src="js/jquery-1.8.2.min.js"></script> <script type="text/javascript"> $(document).ready(function() { // 页面加载完后,自动发searchUsersServlet请求,加载到userListDiv中显示 $("#userListDiv").load("searchUsersServlet"); }); // 新增 按钮事件触发函数 function toAdd() { // 获取addForm中的请求信息 var _data = $("#addForm").serialize(); //alert(_data); // 发添加新用户的Ajax请求 $.ajax({ type : 'post', url : 'addUserServlet', data : _data, success : function(msg) { alert(msg); // 更新最新的用户列表信息 $("#userListDiv").load("searchUsersServlet"); } }); } function toEdit() { var _data = $("#editForm").serialize(); alert(_data); $.ajax({ type : 'post', url : 'editUserServlet', data : _data, success : function(msg) { alert(msg); $("#userListDiv").load("searchUsersServlet"); } }); } function toDelete() { var chks = $("input[name='checkbox']:checked"); if (chks.length == 0) { alert("请选择要删除的用户"); } else if (chks.length > 1) { alert("一次只能删除一个用户"); } else { var to = confirm("您确定要删除选中的用户?"); if (to) { var _data = "id=" + chks.val(); $.ajax({ type : 'post', data : _data, url : 'deleteUserServlet', success : function(msg) { alert(msg); $("#userListDiv").load("searchUsersServlet"); } }); } } } function toShowAdd() { $("#LayerAdd").show(1000); } function toShowEdit() { //alert($("input[name='checkbox']:checked").length); var chks = $("input[name='checkbox']:checked"); if (chks.length == 0) { alert("请选择要编辑的用户"); } else if (chks.length > 1) { alert("一次只能修改一个用户"); } else { var _data = "id=" + chks.val(); $.ajax({ type : 'post', data : _data, url : 'searchUserServlet?type=byId', dataType : 'json', success : function(msg) { $("#editForm #id").val(msg.urId); $("#editForm #userName").val(msg.urUserName); $("#editForm #age").val(msg.urAge); $("#editForm #status").val(msg.urStatus); //alert($("#editForm #age").val()); $("#LayerEdit").show(1000); } }); } } function toCloseAdd() { $("#LayerAdd").hide(1000); } function toCloseEdit() { $("#LayerEdit").hide(1000); } </script> <style type="text/css"> <!-- .STYLE2 { color: #000000 } #LayerAdd { position: absolute; left: 113px; top: 183px; width: 434px; height: 193px; z-index: 1; background-color: #99FFFF; display: none; } #LayerEdit { position: absolute; left: 113px; top: 183px; width: 434px; height: 193px; z-index: 1; background-color: #99FFFF; display: none; } --> </style> </head> <body> <div id="LayerAdd"> <form name="addForm" name="addForm" id="addForm" method="post" action=""> <table width="98%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td colspan="2" align="center"><strong><BR>添加新用户<br></strong></td> </tr> <tr> <td width="47%" align="right">用户名:</td> <td width="53%"><input name="userName" type="text" id="userName"></td> </tr> <tr> <td align="right">密码:</td> <td><input name="password" type="password" id="password"></td> </tr> <tr> <td align="right">年龄:</td> <td><input name="age" type="text" id="age"></td> </tr> <tr> <td colspan="2"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="button" name="Submit4" value="添加" onclick="toAdd()"> <input type="button" name="Submit5" value="关闭" onclick="toCloseAdd()"> </td> </tr> </table> </form> </div> <div id="LayerEdit"> <form name="editForm" id="editForm" method="post" action=""> <input type="hidden" name="id" id="id" /> <table width="98%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td colspan="2" align="center"> <strong><br>修改用户信息<br> </strong> </td> </tr> <tr> <td width="47%" align="right">用户名:</td> <td width="53%"> <input name="userName" type="text" id="userName" readonly="readonly"> </td> </tr> <tr> <td align="right">年龄:</td> <td><input name="age" type="text" id="age"></td> </tr> <tr> <td align="right">状态:</td> <td> <select name="status" id="status"> <option value="Active">Active</option> <option value="Inactive">Inactive</option> <option value="Locked">Locked</option> <option value="Deleted">Deleted</option> </select> </td> </tr> <tr> <td colspan="2"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="button" name="Submit4" value="修改" onclick="toEdit()"> <input type="button" name="Submit5" value="关闭" onclick="toCloseEdit()"> </td> </tr> </table> </form> </div> <p> </p> <p>测试用户CRUD页面</p> <table width="539" border="1"> <tr> <td colspan="5" align="right"> <input type="button" name="Submit" value="新增" onclick="toShowAdd()"> <input type="submit" name="Submit2" value="修改" onclick="toShowEdit()"> <input type="button" name="Submit3" value="删除" onclick="toDelete()"> </td> </tr> <tr> <td> <div id="userListDiv"></div> </td> </tr> </table> <p> </p> </body> </html>db.properties,数据库信息配置文件,代码如下所示:
userName=root
password=root
url=jdbc:mysql://localhost:3306/mvn_db
driverName=com.mysql.jdbc.Driver
构建项目
代码写好了,接下来是在 pom.xml 中添加发布 Web 应用和同 Web 服务器相关的插件,这些在前面的简易 Web 案例中已提到,这里就直接贴出当前 Web 应用到的插件配置,代码如下:<build> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> <version>6.1.26</version> <configuration> <webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.5</source> <target>1.5</target> </configuration> </plugin> </plugins> </build>
测试
右击“工程”,选择 Run As→Maven build… 命令,在 Goals 后面输入“jetty:run”目标,运行 jetty 服务器。在浏览器中输入“http://localhost:8080/MvnDemo03/index.jsp”进行运行测试。所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算