MyEclipse 8.6 + JBoss 6.0 + JDK 1.6.13 + EJB 3.0
EJB实现登录
1. 配置JBoss数据源
a) 数据源参考配置文件
jboss-6.0.0.Final/docs/examples/jca/**-ds.xml
b) 将配置文件放到站点根目录下
jboss-6.0.0.Final/server/default/deploy
c) 将connector加入站点
server/default/lib
d) 配置相关的参数
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://xxx:3306/xxx</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>xxx</user-name>
<password>xxx</password>
e) 启动JBoss
2. 创建数据库表
CREATE TABLE user ( id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, name varchar(255) DEFAULT NULL, password varchar(255) DEFAULT NULL, );
3. 编写实体Bean
User.java
package com.wgb.bean.entity; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.EntityListeners; import javax.persistence.Id; import com.wgb.bean.UserListener; /** * @className: User.java * @classDescription: * @function: * @author: Wentasy * @createTime: 2012-12-4 下午08:00:32 * @modifyTime: * @modifyReason: * @since: JDK 1.6 */ @Entity @EntityListeners(UserListener.class) public class User implements Serializable{ private int id; private String name; private String password; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
4. 创建对数据库进行操作的Session Bean
UserDao.java
package com.wgb.dao; import java.util.List; import com.wgb.bean.entity.User; /** * @className: UserDao.java * @classDescription: * @function: * @author: Wentasy * @createTime: 2012-12-4 下午08:02:46 * @modifyTime: * @modifyReason: * @since: JDK 1.6 */ public interface UserDao { public boolean login(String name, String password); }
UserDaoImpl.java
package com.wgb.dao.impl; import java.util.Iterator; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; import com.wgb.bean.entity.User; import com.wgb.dao.UserDao; /** * @className: UserDaoImpl.java * @classDescription: * @function: * @author: Wentasy * @createTime: 2012-12-4 下午08:03:25 * @modifyTime: * @modifyReason: * @since: JDK 1.6 */ @Stateless @Remote ({UserDao.class}) public class UserDaoImpl{ @PersistenceContext private EntityManager em; @SuppressWarnings("unchecked") public boolean login(String name, String password) { boolean isValid = false; Query query = em.createQuery("from User u where u.name=?1 and u.password=?2"); // Query query = em.createNativeQuery("select * from user u where u.id = ?"); query.setParameter(1, name); query.setParameter(2, password); List<User> list = query.getResultList(); if(list.isEmpty()){ isValid = false; }else{ isValid = true; } // Iterator<User> it = list.iterator(); // while(it.hasNext()){ // User u = it.next(); // if(u.getName().equals(name) && u.getPassword().equals(password)){ // isValid = true; // } // } return isValid; } }
5. 编写登录界面
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>登录页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <h1>登录</h1> <form action=<%=path %>/servlet/LoginAction method="post"> 用户名:<input type="text" name="username"><br> 密 码:<input type="password" name="passwd"><br> <input type="submit" value="登录"> <input type="reset" value="重置"> </form> </body> </html>
login_suc.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>登录成功页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <P><font color="red" align="center" size="+1">恭喜您!登录成功!</font></P> <% String username = request.getParameter("username"); String password = request.getParameter("passwd"); %> <% out.println("姓名:" + username); %> <br> <% out.println("输入密码:" + password); %> </body> </html>
6. 编写对登录进行处理的Servlet
LoginAction
package com.wgb.bean; import java.io.IOException; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.wgb.dao.UserDao; import com.wgb.dao.impl.UserDaoImpl; public class LoginAction extends HttpServlet { /** * Constructor of the object. */ public LoginAction() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = request.getParameter("username"); System.out.println(name); String pwd = request.getParameter("passwd"); System.out.println(pwd); UserDao userDao = null; try { InitialContext ctx = new InitialContext(); userDao = (UserDao)ctx.lookup("UserDaoImpl/remote"); } catch (NamingException e) { e.printStackTrace(); } if(userDao.login(name, pwd)){ request.getRequestDispatcher("/wgb/login_suc.jsp").forward(request, response); }else{ request.getRequestDispatcher("/wgb/login.jsp").forward(request, response); } } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { // Put your code here } }
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>LoginAction</servlet-name> <servlet-class>com.wgb.bean.LoginAction</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginAction</servlet-name> <url-pattern>/servlet/LoginAction</url-pattern> </servlet-mapping> </web-app>