Java Web应用程序集成的jQuery UI选项卡(水平和垂直)示例
jQuery UI建立在jQuery JavaScript库的基础上,可帮助Web开发人员创建具有不同效果类型的出色网页。
今天,我们将研究jQuery UI Tabs功能,该功能可用于轻松在视图页面中创建选项卡。
我们将在一个简单的Java Web应用程序中使用它,用户可以其中注册然后登录。
注册和登录表单都将是主页的一部分,位于两个不同的选项卡中。
只是为了获得一个想法,下图显示了将所有点滴整合后的Web应用程序主页。
Java Web应用程序设置
下图显示了我们的Web应用程序的最终结构。
在继续进行代码之前,我们需要使用必需的JS和CSS库设置应用程序。
在Eclipse中创建"动态Web项目",您可以选择任何名称,但是如果要使用与我的项目相同的名称,请使用jQueryUITabsLoginExample。
创建项目后,将其转换为Maven项目,以便我们可以添加所需的依赖项。我正在使用MySQL DB存储用户信息,下面的脚本可用于创建Users表。
由于我使用的是MySQL数据库,因此我们需要将MySQL Java驱动程序添加到项目中。
下面是我们最终的pom.xml,它简单明了。pom.xml
从https://jquery.com/download/下载jQuery JavaScript库,并将其放入js目录,如项目图像所示。
从https://jqueryui.com/download/下载jQuery UI库,您将获得很多JS和CSS文件。
您只需要为项目包括jquery-ui.js和jquery-ui.css文件。
jQuery UI提供了许多主题,我们可以将其用作基础主题,然后根据我们的要求对其进行自定义。
项目主页中的布局是Cupertino主题,您可以从"下载"页面中选择主题之一。
我们的项目设置现已准备就绪,现在可以移至业务逻辑部分。
模型类
我们有User类来映射数据库表,下面是User模型类的代码。
User.java
CREATE TABLE `Users` ( `email` varchar(30) NOT NULL DEFAULT '', `name` varchar(30) NOT NULL DEFAULT '', `password` varchar(30) NOT NULL DEFAULT '', `address` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`email`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据库连接实用程序类
我们有一个简单的实用程序类用于数据库连接,它没有经过优化,仅出于示例目的。
JDBCUtil.java
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jQueryUITabsLoginExample</groupId> <artifactId>jQueryUITabsLoginExample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.0.5</version> </dependency> </dependencies> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> <finalName>${project.artifactId}</finalName> </build> </project>
DAO实施类
UseDAO接口定义了针对用户表操作公开的服务合同。
UserDAO.java
package com.theitroad.servlet.model; public class User { private String name; private String email; private String password; private String address; public User(){} public User(String name, String email, String password, String address){ this.name=name; this.email=email; this.password=password; this.address=address; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
下面是实现类,我们也可以使用Hibernate或者任何其他ORM工具进行实现。
UserDAOImpl.java
package com.theitroad.servlet.jdbc; import java.sql.Connection; import java.sql.DriverManager; public class JDBCUtil { private static Connection connection = null; public static Connection getConnection() { if (connection != null) return connection; else { //database URL String dbUrl = "jdbc:mysql://localhost/TestDB"; try { Class.forName("com.mysql.jdbc.Driver"); //set the url, username and password for the database connection = DriverManager.getConnection(dbUrl, "hyman", "hyman123"); } catch (Exception e) { e.printStackTrace(); } return connection; } } }
Servlet类和配置
我们有两个用于注册和登录过程的servlet控制器类。
存在一些简单的验证以避免常见错误。
RegistrationController.java
package com.theitroad.servlet.dao; import com.theitroad.servlet.model.User; public interface UserDAO { public int createUser(User user); public User loginUser(User user); }
LoginController.java
package com.theitroad.servlet.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import com.theitroad.servlet.jdbc.JDBCUtil; import com.theitroad.servlet.model.User; public class UserDAOImpl implements UserDAO { private Connection dbConnection; private PreparedStatement pStmt; private String SQL_SELECT = "SELECT name, address FROM users WHERE email = ? AND password = ?"; private String SQL_INSERT = "INSERT INTO users (name,email,password,address) VALUES (?,?,?,?)"; public UserDAOImpl() { dbConnection = JDBCUtil.getConnection(); } public User loginUser(User user) { try { pStmt = dbConnection.prepareStatement(SQL_SELECT); pStmt.setString(1, user.getEmail()); pStmt.setString(2, user.getPassword()); ResultSet rs = pStmt.executeQuery(); while (rs.next()) { user.setName(rs.getString("name")); user.setAddress(rs.getString("address")); } } catch (Exception e) { System.err.println(e.getMessage()); } return user; } public int createUser(User user) { int result = 0; try { pStmt = dbConnection.prepareStatement(SQL_INSERT); pStmt.setString(1, user.getName()); pStmt.setString(2, user.getEmail()); pStmt.setString(3, user.getPassword()); pStmt.setString(4, user.getAddress()); result = pStmt.executeUpdate(); } catch (Exception e) { System.err.println(e.getMessage()); } return result; } }
现在该在web.xml文件中配置这些servlet了,下面是最终的web.xml文件。
web.xml
package com.theitroad.servlet.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.theitroad.servlet.dao.UserDAO; import com.theitroad.servlet.dao.UserDAOImpl; import com.theitroad.servlet.model.User; public class RegistrationController extends HttpServlet { private static final long serialVersionUID = -4006561145676424435L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("name"); String email = request.getParameter("email"); String password = request.getParameter("password"); String address = request.getParameter("address"); if ((name == null || "".equals(name)) || (email == null || "".equals(email)) || (password == null || "".equals(password)) || (address == null || "".equals(address))) { String error = "Mandatory Parameters Missing"; request.getSession().setAttribute("errorReg", error); response.sendRedirect("index.jsp#register"); } else { User user = new User(name, email, password, address); UserDAO userDAO = new UserDAOImpl(); int result = userDAO.createUser(user); if (result == 1) { request.getSession().removeAttribute("errorReg"); response.sendRedirect("success.jsp"); }else{ request.getSession().setAttribute("errorReg", "Internal Server Error, Please try again later."); response.sendRedirect("index.jsp#register"); } } } }
项目CSS文件
以下是我们用于查看页面的自定义CSS文件。
style.css
package com.theitroad.servlet.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.theitroad.servlet.dao.UserDAO; import com.theitroad.servlet.dao.UserDAOImpl; import com.theitroad.servlet.model.User; public class LoginController extends HttpServlet { private static final long serialVersionUID = -4602272917509602701L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String error; String email = request.getParameter("email"); String password = request.getParameter("password"); User user = new User(); user.setEmail(email); user.setPassword(password); HttpSession session = request.getSession(); UserDAO userDAO = new UserDAOImpl(); User userDB = userDAO.loginUser(user); if (userDB.getName() == null) { error = "Invalid Email or password"; session.setAttribute("error", error); response.sendRedirect("index.jsp"); } else { session.setAttribute("user", userDB.getName()); session.removeAttribute("error"); response.sendRedirect("welcome.jsp"); } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if ("logout".equalsIgnoreCase(request.getParameter("param"))) { HttpSession session = request.getSession(); if(session != null){ session.invalidate(); } response.sendRedirect("index.jsp"); } } }
jQuery UI选项卡查看页面
以下是主页JSP代码,我们其中使用jQuery UI标签。
index.jsp
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xmlns:web="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>jQueryTabsWebAppExample</display-name> <servlet> <servlet-name>LoginController</servlet-name> <servlet-class>com.theitroad.servlet.controller.LoginController </servlet-class> </servlet> <servlet> <servlet-name>RegistrationController</servlet-name> <servlet-class>com.theitroad.servlet.controller.RegistrationController </servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginController</servlet-name> <url-pattern>/LoginController</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>RegistrationController</servlet-name> <url-pattern>/RegistrationController</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
用于创建标签的jQuery JS代码是:
body { background-color: #e7e7e7; font-family: Helvetica; font-size: 14px; color: #666; margin: 0px; padding: 0px; } .wrapper { width: 900px; height: 500px; margin: 0 auto; background: white; margin: 0 auto; } .container { min-height: 400px; border-top: 1px solid gray; padding: 50px; }
上面的代码会将选项卡div转换为不同的选项卡。
对于不同的标签,此div应该具有无序的元素列表,对我们来说
<!DOCTYPE html> <html> <head> <title>Login and Registration Page</title> <link rel="stylesheet" href="css/jquery-ui.css"> <link rel="stylesheet" href="css/style.css"> <script src="js/jquery-1.11.1.js"></script> <script src="js/jquery-ui.js"></script> <script> $(function() { $( "#tabs" ).tabs(); }); </script> </head> <body> <div class="wrapper"> <div class="container"> <div id="tabs"> <ul> <li><a href="#login">Login</a></li> <li><a href="#register">Register</a></li> </ul> <div id="login"> <% if((String)session.getAttribute("error") != null){ %> <h4>Invalid Email or Password. Please try again.</h4> <%} %> <form method="post" action="LoginController"> <label for="email">Email:</label> <br <input type="text" name="email" id="email" <br <label for="password">Password:</label> <br <input type="password" name="password" id="password" <br <br <input type="submit" value="Login"> </form> </div> <div id="register"> <% if((String)session.getAttribute("errorReg") != null){ %> <h4><%=session.getAttribute("errorReg") %></h4> <%} %> <form method="post" action="RegistrationController"> <label for="name">Name:</label><br <input type="text" name="name" id="name" <br <label for="email">Email:</label><br <input type="text" name="email" id="email" <br <label for="password">Password:</label><br <input type="password" name="password" id="password" <br <label for="address">Address:</label><br <input type="text" name="address" id="address" <br <br <input type="submit" value="Register"> </form> </div> </div> </div> </div> </body> </html>
请注意,每个列表项都包含锚定URL,它们应该是将构成选项卡视图的其他div元素。
这就是为什么我们还有两个div的原因-登录和注册。
就是这样,JSP页面的其他部分是简单HTML和JSP scriptlet。
我知道我们不应该使用scriptlet,但这只是一个例子,我也不想其中添加其他技术,如果您到目前为止还没有猜到,我是在谈论JSTL。
我们有几个简单的JSP页面,用于注册成功和登录成功。
success.jsp
$(function() { $( "#tabs" ).tabs(); });
welcome.jsp
<ul> <li><a href="#login">Login</a></li> <li><a href="#register">Register</a></li> </ul>
jQuery UI Tabs项目测试
我们的Web应用程序已准备就绪,只需构建和部署项目即可。
以下是不同页面的一些图像。
jQuery UI垂直选项卡示例
默认情况下,jQuery UI创建水平选项卡。
但是我们也可以添加一些另外的jQuery代码来创建垂直标签。
下面是带有垂直选项卡的JSP页面的另一种形式。
index-vertical.jsp
<!DOCTYPE html> <html> <head> <title>Registration Success Page</title> <link rel="stylesheet" href="css/jquery-ui.css"> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="wrapper"> <div class="container"> <h4> You have been successfully registered. [ <a href="index.jsp">Back to login page</a> ] </h4> </div> </div> </body> </html>