Tải bản đầy đủ (.doc) (14 trang)

Thực hành Strust JSF Lab 3

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 (469.68 KB, 14 trang )

Architecting Applications for the Web

Lab 03
Interceptors and Tags
Mục tiêu
-

Sử dụng Interceptor thừa kế Struts-default và xây dựng 1 custom interceptor
Sử dụng struts-tags để xây dựng các trang jsp

Phần I Bài tập step by step
Bài tập: xây dựng các chức năng register,search,update,delete user.
Dùng các Interceptor để filter khi user login và giữ lưới dữ liệu khi
update, delete user
Phần 1: Xây dựng các chức năng register,search,update,delete User
Step 1: Sử dụng Tags để xây dựng giao diện
register.jsp:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<head>
<title><s:text name="Register User"/></title>
<s:head/>
<sx:head/>
</head>
<s:div>REGISTER FORM</s:div>
<s:text name="Please fill in the form below:"/>
<s:form action="register" enctype="multipart/form-data" method="post">
<s:textfield name="userName" label="UserName" size="50" required="true"/>
<s:password name="password" label="Password" size="30" required="true"/>


<s:password name="confirmpassword" label="Confirm Password" size="30" required="true"/>
<s:textfield name="firstName" label="FirstName" size="50" required="true"/>
<s:textfield name="lastName" label="LastName" size="50" required="true"/>

<s:radio name="gender" label="Gender" list="{'Male','Female'}" value="'Male'"/>
<s:textarea name="address" label="Address"/>
headerKey="0" headerValue="--select--"/>
<s:textfield name = "phone" label="Phone" size="15" required="true"/>
<s:textfield name = "email" label="Email" size="30" required="true"/>
<s:file name = "image" label="Image"/>
<s:submit value="Register"></s:submit>
</s:form>

-

searchuser.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>

IT Research Department

@BKAP 2015

Trang 1 / 14


Architecting Applications for the Web
<%@ taglib prefix="s" uri="/struts-tags" %>

<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Search User</title>
<s:head/>
<sx:head/>
</head>
<body>
<s:form action="SearchUser">
<s:textfield name="sr_userName" label="User Name" size="50"/>
<s:textfield name="sr_firstName" label="First Name" size="50"/>
<s:textfield name="sr_lastName" label="Last Name" size="50"/>
<s:textfield name = "sr_email" label="Email" size="30"/>
<s:submit value="Search"></s:submit>
</s:form>
<table border="1">
<thead>
<tr>
<th>No</th>
<th>UserName</th>
<th>Password</th>
<th>FirstName</th>
<th>LastName</th>
<th>Gender</th>
<th>BirthDate</th>
<th>Phone</th>
<th>Email</th>
<th>IsDelete</th>

<th>Delete</th>
<th>Update</th>
</tr>
</thead>
<tbody>
<s:iterator value="listuser" status="listuserStatus">
<tr>
<s:form action="updateUser" method="post" theme="simple">
<td><s:property value="#listuserStatus.count"/></td>
<td><s:property value="userName"/></td>
<td><s:password name="password" value="%{password}" showPassword="true"/></td>
<td><s:textfield name="firstName" value="%{firstName}"/></td>
<td><s:textfield name="lastName" value="%{lastName}"/></td>
<td><s:textfield name="gender" value="%{gender}" size="6"/></td>
<td></td>
<td><s:textfield name="phone" value="%{phone}" size="15"/></td>
<td><s:textfield name="email" value="%{email}"/></td>
<td></td>
<s:url id="delete" action="deleteUser">
<s:param name="userName" value="userName"/>
<s:param name="sr_userName" value="sr_userName"/>
<s:param name="sr_firstName" value = "sr_firstName"/>
<s:param name="sr_lastName" value = "sr_lastName"/>
<s:param name="sr_email" value = "sr_email"/>
</s:url>

IT Research Department


@BKAP 2015

Trang 2 / 14


Architecting Applications for the Web
<td><s:a href="%{delete}">Delete</s:a></td>
<td>
<s:hidden name="userName" value="%{userName}"/>
<s:hidden name="sr_userName" value="%{sr_userName}"/>
<s:hidden name="sr_firstName" value = "%{sr_firstName}"/>
<s:hidden name="sr_lastName" value = "%{sr_lastName}"/>
<s:hidden name="sr_email" value = "%{sr_email}"/>
<s:submit value="Update"/>
</td>
</s:form>
</tr>
</s:iterator>
</tbody>
</table>
</body>
</html>
-

success.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>

<title><s:text name="Registration Successful"/></title>
<s:head/>
</head>
<body>

Registration Successful.


Welcome User: <s:property value="userName"/>. Please wait for admin approval!


<s:a href="/Session1/login.jsp">Back</s:a> to login


</body>
</html>
-

userinformation.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>User Information</title>
<s:head/>
</head>
<body>
<s:iterator value="listuser" status="listuserStatus">
width="100" height="100"/>

UserName: <s:property value="userName"/>

FirstName: <s:property value="firstName"/>

LastName: <s:property value="lastName"/>

BirthDate: <s:property value="birthdate"/>


Gender: <s:property value="gender"/>

Address: <s:property value="address"/>

BirthPlace: <s:property value="birthPlace"/>

Phone: <s:property value="phone"/>

Email: <s:property value="email"/>

<s:if test="group_id == 1">
<s:form action="SearchUser">
<s:submit value="admin"></s:submit>

IT Research Department

@BKAP 2015

Trang 3 / 14


Architecting Applications for the Web
</s:form>
</s:if>
</s:iterator>
</body>
</html>

Step 2: Xây dựng Action cho các chức năng register,update,delete,search user
- Session2Action.java
import ConnectDB.connectDB;
import Entity.UserEntity;
import static com.opensymphony.xwork2.Action.ERROR;
import static com.opensymphony.xwork2.Action.SUCCESS;
import com.opensymphony.xwork2.ActionSupport;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.interceptor.ServletRequestAware;
/**
*
* @author DELL
*/
public class Session2Action extends ActionSupport implements ServletRequestAware{
private String userName;
private String password;
private String confirmpassword;
private String firstName;
private String lastName;
private Date birthDate;
private String gender;
private String address;
private String birthPlace;
private String phone;
private String email;
private String isDelete;
private File image;
private String imageContentType;
private String imageFileName;
private HttpServletRequest servletRequest;
ArrayList<Entity.UserEntity> listuser = new ArrayList();
private String sr_userName;
private String sr_firstName;

private String sr_lastName;
private String sr_email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;

IT Research Department

@BKAP 2015

Trang 4 / 14


Architecting Applications for the Web
}
public void setPassword(String password) {
this.password = password;
}
public String getConfirmpassword() {
return confirmpassword;
}
public void setConfirmpassword(String confirmpassword) {
this.confirmpassword = confirmpassword;
}
public String getFirstName() {

return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Date getBirthDate() {
return birthDate;
}
public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBirthPlace() {

return birthPlace;
}

IT Research Department

@BKAP 2015

Trang 5 / 14


Architecting Applications for the Web
public void setBirthPlace(String birthPlace) {
this.birthPlace = birthPlace;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getIsDelete() {
return isDelete;
}
public void setIsDelete(String isDelete) {

this.isDelete = isDelete;
}
public File getImage() {
return image;
}
public void setImage(File image) {
this.image = image;
}
public String getImageContentType() {
return imageContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
public HttpServletRequest getServletRequest() {
return servletRequest;
}

IT Research Department

@BKAP 2015

Trang 6 / 14



Architecting Applications for the Web
@Override
public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest = servletRequest;
}
public ArrayList<UserEntity> getListuser() {
return listuser;
}
public void setListuser(ArrayList<UserEntity> listuser) {
this.listuser = listuser;
}
public String getSr_userName() {
return sr_userName;
}
public void setSr_userName(String sr_userName) {
this.sr_userName = sr_userName;
}
public String getSr_firstName() {
return sr_firstName;
}
public void setSr_firstName(String sr_firstName) {
this.sr_firstName = sr_firstName;
}
public String getSr_lastName() {
return sr_lastName;
}
public void setSr_lastName(String sr_lastName) {
this.sr_lastName = sr_lastName;
}

public String getSr_email() {
return sr_email;
}
public void setSr_email(String sr_email) {
this.sr_email = sr_email;
}
@Override
public String execute() throws Exception{
return SUCCESS;
}
public String register() throws Exception {
String path = "Upload/";
String filePath = this.servletRequest.getSession().getServletContext().getRealPath(path);
File uploadDir = new File(filePath);
FileUtils.copyFile(this.image, new File(uploadDir, this.userName));
String destFilep = uploadDir + this.userName;
ConnectDB.connectDB conn = new connectDB();

IT Research Department

@BKAP 2015

Trang 7 / 14


Architecting Applications for the Web
Boolean rel = conn.registerUser(getUserName(), getPassword(), getFirstName(), getLastName(), getBirthDate(),
getGender(), getAddress(), getBirthPlace(), getPhone(), getEmail(), destFilep);
if (rel) {
return SUCCESS;

} else {
return ERROR;
}
}
public String searchUser() throws Exception {
ConnectDB.connectDB conn = new connectDB();
this.listuser = conn.searchAccount(sr_userName, sr_firstName, sr_lastName, sr_email);
return SUCCESS;
}
public String deleteUser() throws Exception {
ConnectDB.connectDB conn = new connectDB();
boolean result = conn.deleteAccount(userName);

}

if (result) {
return SUCCESS;
}
return ERROR;
public String updateUser() throws Exception {
ConnectDB.connectDB conn = new connectDB();
Boolean rel = conn.UpdateAccount(userName, password, firstName, lastName, birthDate, gender, phone,
email, isDelete);
if (rel) {
return SUCCESS;
}
return ERROR;
}
}
-


ConnectDB.java

public boolean registerUser(String userName, String password, String firstName,
String lastName, Date birthDate, String gender,String address,String birthPlace,
String phone, String email, String image) throws Exception {
Connection conn = null;
PreparedStatement prest = null;
String sql = "INSERT INTO [dbo].[ST_USER] ([USERNAME],[PASSWORD],[FIRSTNAME],[LASTNAME],
[BIRTHDATE],[GENDER],[ADDRESS],[BIRTHPLACE],[PHONE],[EMAIL],[IMAGE],[ISDELETE],[GROUP_ID]) ";
sql += "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
try {
conn = DBconnection();
prest = conn.prepareStatement(sql);
prest.setString(1, userName);
prest.setString(2, password);
prest.setString(3, firstName);
prest.setString(4, lastName);
java.text.SimpleDateFormat sdatefmt = new SimpleDateFormat("yyyy-MM-dd");
String birthsim = sdatefmt.format(birthDate);
birthsim = birthsim.trim();
Date birthfmt = sdatefmt.parse(birthsim);

IT Research Department

@BKAP 2015

Trang 8 / 14



Architecting Applications for the Web
java.sql.Date sqlbirth = new java.sql.Date(birthfmt.getTime());

}

prest.setDate(5, sqlbirth);
prest.setString(6, gender);
prest.setString(7, address);
prest.setString(8, birthPlace);
prest.setString(9, phone);
prest.setString(10, email);
prest.setString(11, image);
prest.setString(12, "PENDING");
prest.setInt(12, 2);
int row = prest.executeUpdate();
if (row > 0) {
return true;
}
} catch (SQLException ex) {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("SQLErrors", ex.getMessage());
} finally {
if (conn != null) {
conn.close();
}
if (prest != null) {
prest.close();
}
}
return false;

public ArrayList<UserEntity> searchAccount(String userName, String firstName, String lastName, String email)
throws SQLException {
Connection conn = null;
PreparedStatement prest = null;
ArrayList<UserEntity> listuser = new ArrayList();
String sql = "SELECT * FROM [dbo].[ST_USER]";
sql += " WHERE USERNAME LIKE ? AND FIRSTNAME LIKE ? AND LASTNAME LIKE ? AND EMAIL LIKE ?";
try {
conn = DBconnection();
prest = conn.prepareStatement(sql);
prest.setString(1, "%" + userName + "%");
prest.setString(2, "%" + firstName + "%");
prest.setString(3, "%" + lastName + "%");
prest.setString(4, "%" + email + "%");
ResultSet rs = prest.executeQuery();
while (rs.next()) {
Entity.UserEntity user = new UserEntity();
user.setUserName(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setFirstName(rs.getString("firstname"));
user.setLastName(rs.getString("lastname"));
Date bdate = new java.sql.Date(rs.getDate("birthdate").getTime());
user.setBirthDate(bdate);
user.setGender(rs.getString("gender"));
user.setAddress(rs.getString("address"));
user.setBirthPlace(rs.getString("birthPlace"));
user.setPhone(rs.getString("phone"));
user.setEmail(rs.getString("email"));

IT Research Department


@BKAP 2015

Trang 9 / 14


Architecting Applications for the Web
user.setImage(rs.getString("image"));
user.setIsDelete(rs.getString("isdelete"));
user.setGroup_id(rs.getInt("group_id"));
listuser.add(user);

}
} catch (SQLException ex) {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("SQLErrors", ex.getMessage());
} finally {
if (conn != null) {
conn.close();
}
if (prest != null) {
prest.close();
}
}
return listuser;
}
public boolean deleteAccount(String userName) throws Exception {
Connection conn = null;
PreparedStatement prest = null;
String sql = "UPDATE [dbo].[ST_USER] SET ISDELETE = 'DISABLE' WHERE USERNAME = ?";

try {
conn = DBconnection();
prest = conn.prepareStatement(sql);
prest.setString(1, userName);
int row = prest.executeUpdate();
if (row > 0) {
return true;
}
} catch (SQLException ex) {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("SQLErrors", ex.getMessage());
} finally {
if (conn != null) {
conn.close();
}
if (prest != null) {
prest.close();
}
}
return false;
}
public boolean UpdateAccount(String userName, String password, String firstName,
String lastName, Date birthDate, String gender, String phone, String email,String isDelete) throws Exception {
Connection conn = null;
PreparedStatement prest = null;
String sql = "UPDATE [dbo].[ST_USER] ";
sql += "SET FIRSTNAME=?,LASTNAME=?,BIRTHDATE=?,GENDER=?,EMAIL=?,PHONE=?,ISDELETE=? ";
sql += "WHERE USERNAME = ?";
try {
conn = DBconnection();

prest = conn.prepareStatement(sql);
prest.setString(1, firstName);
prest.setString(2, lastName);
java.text.SimpleDateFormat sdatefmt = new SimpleDateFormat("yyyy-MM-dd");

IT Research Department

@BKAP 2015

Trang 10 / 14


Architecting Applications for the Web
String birthsim = sdatefmt.format(birthDate);
birthsim = birthsim.trim();
Date birthfmt = sdatefmt.parse(birthsim);
java.sql.Date sqlbirth = new java.sql.Date(birthfmt.getTime());
prest.setDate(3, sqlbirth);
prest.setString(4, gender);
prest.setString(5, email);
prest.setString(6, phone);
prest.setString(7, isDelete);
prest.setString(8, userName);
int row = prest.executeUpdate();
if (row > 0) {
return true;
}
} catch (SQLException e) {
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("SQLErrors", e.getMessage());

} finally {
if (conn != null) {
conn.close();
}
if (prest != null) {
prest.close();
}
}
return false;
}

Step 3:Cấu hình Struts.xml
<action name="register" class="Session2.Session2Action" method="register">
<result name="input">register.jsp</result>
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
</action>
<action name="SearchUser" class="Session2.Session2Action" method="searchUser">
<result name="success">searchuser.jsp</result>
</action>
<action name="deleteUser" class="Session2.Session2Action" method="deleteUser">
<interceptor-ref name="defaultStack"/>
<result name="success" type="chain">SearchUser</result>
</action>
<action name="updateUser" class="Session2.Session2Action" method="updateUser">
<interceptor-ref name="defaultStack"/>
<result name="success" type="chain">SearchUser</result>
</action>

Step 4: Build and Run:

- Register:

IT Research Department

@BKAP 2015

Trang 11 / 14


Architecting Applications for the Web

IT Research Department

@BKAP 2015

Trang 12 / 14


Architecting Applications for the Web

-

Search, Delete, Update User:

Phần 2: Dùng các interceptor
Srep 1: Trong phần 2 ta đã sử dụng Interceptor chaining để keep data khi ta update và
delete user
Step 2: Tạo custom interceptor để tính thời gian login khi login: Source Packages  new
 other  Struts2  Interceptor Name: LoginInterceptor, package: Interceptor
- LoginInterceptor.java:

package Interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
/**
*
* @author DELL
*/
public class LoginInterceptor implements Interceptor {
public LoginInterceptor() {
}
@Override
public void destroy() {
System.out.println("Destroying MyLoggingInterceptor...");
}
@Override
public void init() {
System.out.println("Initializing MyLoggingInterceptor...");
}
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
String className = actionInvocation.getClass().getName();
long startTime = System.currentTimeMillis();

IT Research Department

@BKAP 2015

Trang 13 / 14



Architecting Applications for the Web
System.out.println("Before calling action: " + className);
String result = actionInvocation.invoke();
long endTime = System.currentTimeMillis();
System.out.println("After calling action: " + className
+ " Time taken: " + (endTime - startTime) + " ms");
return result;
}
}

Step 3: Cấu hình file Struts.xml
<interceptors>
<interceptor name="mylogging" class="Interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="loggingStack">
<interceptor-ref name="mylogging"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<action name="login" class="Session1.Login">
<interceptor-ref name="loggingStack"></interceptor-ref>
<result name="success">useriformation.jsp</result>
<result name="error">loginfailure.jsp</result>
</action>

IT Research Department

@BKAP 2015

Trang 14 / 14




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×