Tải bản đầy đủ (.pdf) (17 trang)

Thực hành EJB (Enterprise Java Bean) Lab 5

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (927.44 KB, 17 trang )

Enterprise Application Development in Java EE

Lab 05
Singleton Session Beans
Mục tiêu
- Thao tác với Singleton Session Beans

Phần I Bài tập step by step
Bài 1
Tạo project EJB với Singleton Session Beans có interface là Remote cho phép đăng ký,
đăng nhập User của ChatRoom:
UserChat
Column

Data Type

Characteristic

Description

UserID

Int

PK, Auto Increment(1,1)

Mã User

UserName

Nvarchar(50)



Not Null

Tên đăng nhập

Password

Nvarchar(50)

Not Null

Mã đăng nhập

Ucreated

Date

Not Null

Ngày đăng ký

Mail

Nvarchar(50)

Allow Null

Mail của User

Address


Nvarchar(100)

Allow Null

Địa chỉ

Phone

Nvarchar(50)

Allow Null

Số điện thoại

Project thực hiện các công việc sau:
- Tạo class UserChat tương ứng với bảng UserChat trong CSDL
- Tạo Singleton Session Bean Remote gồm các phương thức sau:
+ registerUser: Đăng ký User
+ login: Đăng nhập User

IT Research Department

@BKAP 2015

Page 1 / 17


Enterprise Application Development in Java EE
Step 1: Tạo Table UserChat trong Database EJB và các procedure thực hiện nghiệp vụ

registerUser, login
 Tạo Database EJB và Table UserChat
Create DataBase EJB
go
USE [EJB]
GO
/****** Object: Table [dbo].[UserChat] Script Date: 6/3/2016 11:31:31 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[UserChat](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[UserName] [nvarchar](50) NOT NULL,
[Password] [nvarchar](50) NOT NULL,
[UCreated] [date] NOT NULL,
[Mail] [nvarchar](50) NULL,
[Address] [nvarchar](100) NULL,
[Phone] [nvarchar](50) NULL,
[StatusLogin] [int] NULL,
CONSTRAINT [PK_EUser] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS =
ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

 Tạo Procedure
 checkLogin

USE [EJB]
GO
CREATE PROCEDURE [dbo].[checkLogin]
@userName nvarchar(50),
@password nvarchar(50),
@checkNumber int OUTPUT,
@numberOnline int OUTPUT
AS
BEGIN
SELECT @checkNumber = COUNT(*) FROM UserChat u WHERE u.UserName = @userName and u.Password
= @password
if @checkNumber > 0
BEGIN
UPDATE UserChat
SET StatusLogin = 1;
SELECT @numberOnline = COUNT(*) FROM UserChat u WHERE u.StatusLogin = 1;
END
END

IT Research Department

@BKAP 2015

Page 2 / 17


Enterprise Application Development in Java EE
 registerUser
USE [EJB]
GO

CREATE PROCEDURE [dbo].[registerUser]
@userName nvarchar(50),
@password nvarchar(50),
@mail nvarchar(50),
@address nvarchar(100),
@phone nvarchar(50)
AS
BEGIN
DECLARE @date date;
SET @date = GETDATE();
INSERT INTO UserChat
VALUES (@userName,@password,@date,@mail,@address,@phone,0)
END

Step 2: Tạo Project EJB tên Session05 với Session Bean là Singleton - tên S05SingletonBean
và Interface là Remote – tên S05InterfaceRemote (Như đã hướng dẫn ở Lab trước)

IT Research Department

@BKAP 2015

Page 3 / 17


Enterprise Application Development in Java EE

 Cấu trúc ứng dụng sau khi hoàn thành

Step 3: Khai báo các phương thức nghiệp vụ trên S05SingletonBeanRemote
S05SingletonBeanRemote.java

package bean;
import javax.ejb.Remote;
/**
*
* @author Quang
*/
@Remote
public interface S05SingletonBeanRemote {
public String registerUser(String userName, String password, String mail, String address, String phone);
public int login(String userName, String password);
}

Step 4: Xây dựng java class DBConnection kết nối với DataBase SQL Server 2012 (Đặt trong
package util)
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
*
* @author admin
*/
public class DBConnection {

IT Research Department

@BKAP 2015

Page 4 / 17



Enterprise Application Development in Java EE
private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=EJB";
private static final String DB_DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private static final String user_db = "sa";
private static final String pass_db = "Gacon1984";
public static Connection getDBConnection() {
Connection conn = null;
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
conn = DriverManager.getConnection(URL, user_db, pass_db);
} catch (SQLException ex) {
ex.printStackTrace();
}
return conn;
}
}

Step 5: Thực thi các phương thức nghiệp vụ trên S05SingletonBean
S03_04StatelessBean.java
package bean;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Types;
import javax.ejb.Singleton;
import util.DBConnection;

/**
*
* @author Quang
*/
@Singleton
public class S05SingletonBean implements S05SingletonBeanRemote {
@Override
public String registerUser(String userName, String password, String mail, String address, String phone) {
Connection conn = null;
CallableStatement callableStatement = null;
try {
conn = DBConnection.getDBConnection();
String registerUser = "{call registerUser(?,?,?,?,?)}";
callableStatement = conn.prepareCall(registerUser);
callableStatement.setString(1, userName);
callableStatement.setString(2, password);
callableStatement.setString(3, mail);
callableStatement.setString(4, address);
callableStatement.setString(5, password);
callableStatement.executeUpdate();

IT Research Department

@BKAP 2015

Page 5 / 17


Enterprise Application Development in Java EE
return "Success";

} catch (Exception e) {
e.printStackTrace();
return "Error";
}
}
@Override
public int login(String userName, String password) {
Connection conn = null;
CallableStatement callableStatement = null;
int check = 0;
int numberOnline = 0;
try {
conn = DBConnection.getDBConnection();
String checkLogin = "{call checkLogin(?,?,?,?)}";
callableStatement = conn.prepareCall(checkLogin);
callableStatement.setString(1, userName);
callableStatement.setString(2, password);
callableStatement.registerOutParameter(3, Types.INTEGER);
callableStatement.registerOutParameter(4, Types.INTEGER);
callableStatement.execute();
check = callableStatement.getInt(3);
numberOnline = callableStatement.getInt(4);
} catch (Exception e) {
e.printStackTrace();
}
if (check > 0) {
return numberOnline;
} else {
return 0;
}

}
}

Step 6: Build and Deploy Project Session05
Step 7: Tạo Project Web Application với Framework là Struts2 làm các client cho User đăng
ký và đăng nhập

IT Research Department

@BKAP 2015

Page 6 / 17


Enterprise Application Development in Java EE

IT Research Department

@BKAP 2015

Page 7 / 17


Enterprise Application Development in Java EE

IT Research Department

@BKAP 2015

Page 8 / 17



Enterprise Application Development in Java EE
Step 8: Tạo Entity Class tên UserChat như table UserChat trong package entities (Có
get,set, constructor)
UserChat.java
package entities;
import java.util.Date;
/**
*
* @author Quang
*/
public class UserChat {
private int userID;
private String userName;
private String password;
private Date uCreated;
private String mail;
private String address;
private String phone;
public UserChat() {
}
public int getUserID() {
return userID;
}
public void setUserID(int userID) {
this.userID = userID;
}
public String getUserName() {
return userName;

}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getuCreated() {
return uCreated;
}
public void setuCreated(Date uCreated) {
this.uCreated = uCreated;

IT Research Department

@BKAP 2015

Page 9 / 17


Enterprise Application Development in Java EE
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;

}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}

Step 9: Tạo css cho roomchat
Chat.css
.content {
width: 600px;
height: 400px;
overflow: auto;
border: 1px solid #991111;
}
.msg-input {
width: 400px;
border: 1px solid #119911;
}

Step 10: Tạo các trang jsp để cho User đăng ký (register.jsp), đăng nhập (login.jsp) và chat
(roomchat.jsp)

 register.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Chat Room Register</title>
</head>
<body>

User Registration


<s:form action="register" method="Post">

IT Research Department

@BKAP 2015

Page 10 / 17


Enterprise Application Development in Java EE
<s:textfield label="User Name" name="userRegister.userName"/>
<s:password label="Password" name="userRegister.password"/>
<s:textfield label="Mail" name="userRegister.mail"/>
<s:textfield label="Address" name="userRegister.address"/>
<s:textfield label="Phone" name="userRegister.phone"/>
<s:submit value="Register"/>
</s:form>
</body>
</html>


 login.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login Room Chat</title>
</head>
<body>

Login


<s:form action="login" method="Post">
<s:textfield label="User Name" name="userLogin.userName"/>
<s:password label="Password" name="userLogin.password"/>
<s:submit value="Login"/>
</s:form>
<a href="register.jsp">Đăng Ký</a>
</body>
</html>

 roomchat.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri=" /><%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<c:if test="${userName == null}">
<c:redirect url="login.jsp" />
</c:if>
<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Room Chat Page</title>
<link href="css/chat.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<s:form action="message" method="post">
<div style="color: red">
Your name: <span id="userName">${userName}</span>
--Number Online: <span id="userName">${numberOnline}</span>
</div>
<div id="content" class="content"></div>
<div>
<s:textarea cssClass="msg-input" name="message" label="Input Text Here"/>
<s:submit value="Send" name="send"/>

IT Research Department

@BKAP 2015

Page 11 / 17


Enterprise Application Development in Java EE
</div>
</s:form>
</body>
</html>

Step 11: Tạo Action Struts 2 thực hiện đăng ký và đăng nhập cho User (gọi qua Enterprise
java Bean S05SingletonBeanRemote)

package action;
import bean.S05SingletonBeanRemote;
import com.opensymphony.xwork2.ActionSupport;
import entities.UserChat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
/**
*
* @author Quang
*/
public class UserAction extends ActionSupport implements ServletRequestAware{
S05SingletonBeanRemote s05SingletonBean = lookupS05SingletonBeanRemote();
private UserChat userRegister;
private UserChat userLogin;
private HttpServletRequest request;
public UserAction() {
userRegister = new UserChat();
userLogin = new UserChat();
}
public String register() {
String result = null;
try {
result = s05SingletonBean.registerUser(userRegister.getUserName(), userRegister.getPassword(),
userRegister.getMail(), userRegister.getAddress(), userRegister.getPhone());
if (result.equals("Success")) {

return SUCCESS;
}
return ERROR;
} catch (Exception e) {
e.printStackTrace();
return ERROR;
}
}
public String login(){
int numberOnline = 0;
try {
numberOnline = s05SingletonBean.login(userLogin.getUserName(), userLogin.getPassword());
if (numberOnline>0) {
request.getSession().setAttribute("userName", userLogin.getUserName());

IT Research Department

@BKAP 2015

Page 12 / 17


Enterprise Application Development in Java EE
request.getSession().setAttribute("numberOnline", numberOnline);
return SUCCESS;
}
return ERROR;
} catch (Exception e) {
e.printStackTrace();
return ERROR;

}
}
private S05SingletonBeanRemote lookupS05SingletonBeanRemote() {
try {
Context c = new InitialContext();
return (S05SingletonBeanRemote) c.lookup("java:global/Session05/Session05ejb/S05SingletonBean!bean.S05SingletonBeanRemote");
} catch (NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", ne);
throw new RuntimeException(ne);
}
}
public UserChat getUserRegister() {
return userRegister;
}
public void setUserRegister(UserChat userRegister) {
this.userRegister = userRegister;
}
public UserChat getUserLogin() {
return userLogin;
}
public void setUserLogin(UserChat userLogin) {
this.userLogin = userLogin;
}
public HttpServletRequest getRequest() {
return request;
}
public void setRequest(HttpServletRequest request) {
this.request = request;
}
@Override

public void setServletRequest(HttpServletRequest hsr) {
this.request = hsr;
}
}

Step 12: Khai báo struts.xml
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
" />
IT Research Department

@BKAP 2015

Page 13 / 17


Enterprise Application Development in Java EE
<struts>
<!-- Configuration for the default package. -->

<action name="register" class="action.UserAction" method="register">
<result name="input">register.jsp</result>
<result name="success">login.jsp</result>
<result name="error">register.jsp</result>
</action>
<action name="login" class="action.UserAction" method="login">
<result name="success">roomChat.jsp</result>
<result name="error">login.jsp</result>
</action>
</package>

</struts>

 Cấu trúc Project sau khi hoàn thành

IT Research Department

@BKAP 2015

Page 14 / 17


Enterprise Application Development in Java EE

Step 13: Build and Run Application

IT Research Department

@BKAP 2015

Page 15 / 17


Enterprise Application Development in Java EE

Phần II Bài Tập Tự Làm
Phát triển tiếp bài tập hướng dẫn Step by Step, Thêm các chức năng sau:

IT Research Department

@BKAP 2015


Page 16 / 17


Enterprise Application Development in Java EE
- Phát triển chức năng Log Out trong Room Chat, khi log out thì cập nhật lại Status của
User đó trong bảng Userchat là 0

IT Research Department

@BKAP 2015

Page 17 / 17



×