1. 开发环境
IDE开发工具:
EJB后台:Eclipse Java EE IDE for Web Developers
strtus2前台:MyEclipse9
后台EJB容器:jboss-4.2.3.GA
前台服务器:tomcat6.0.32
后台数据库:MysQL5.1
2. EJB后台开发
2.1 新建EJB3.0工程EJB3.0_Struts2_LoginTest
1. 右键->New->Project
2. 选择EJB Project->next
3. Project name为“Eclipse Java EE IDE for Web Developers”,Target runtime选择配置好的JBOSS4.2,EJB module version选择3.0,然后finish。新的EJB3.0工程创建成功。
2.2 后台项目开发
2.2.1 开发UserBean实体Bean
packagecom.ejb3.jpa;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.Id;
@Entity(name="USERS")
public classUserBean {
private String userName;
private String passWd;
@Id
@Column(name="userName")
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName= userName;
}
@Column(name="passWd")
public String getPassWd() {
return passWd;
}
public void setPassWd(String passWd) {
this.passWd = passWd;
}
}
2.2.2开发远程接口CheckRemote
package com.ejb3.service;
publicinterface CheckRemote {
boolean check(String name,String password);
}
2.2.3 开发远程接口的实现类CheckRemoteImpl(Stateless)
package com.ejb3.service;
import java.util.List;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
importjavax.persistence.PersistenceContext;
import javax.persistence.Query;
import com.ejb3.jpa.UserBean;
@Stateless
@Remote
public class CheckRemoteImpl implementsCheckRemote {
@PersistenceContext(unitName= "loginDS")
//注入EntityManager,现在很流行注入啊,呵呵
EntityManagerem;
@SuppressWarnings("unchecked")
publicboolean check(String name, String password) {
//Stringsql = "SELECT * FROM USERS WHERE userName ="+name+" AND passWd="+password;
Stringsql = "SELECT u FROM USERS u WHERE u.userName = :n AND u.passWd =:p";
Queryquery = em.createQuery(sql);
System.out.println("name:"+name);
System.out.println("password:"+password);
query.setParameter("n",name);
query.setParameter("p",password);
List<UserBean>us = query.getResultList();
if(us.size() > 0) {
returntrue;
}
returnfalse;
}
}
2.2.4在META-INF下创建文件persistence.xml文件
配置如下:
<?xml version="1.0"encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="loginDS">
<!-- <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
-->
<jta-data-source>java:/MySqlDS</jta-data-source>
<class>com.ejb3.jpa.UserBean</class>
<properties>
<property name="hibernate.hbm2ddl.auto"value="create-drop" />
</properties>
</persistence-unit>
</persistence>
2.2.5在com.cn.client包下开发客户端程序(只是用于测试EJB3.0)
package com.cn.client;
import javax.naming.InitialContext;
import java.util.Properties;
import com.ejb3.service.CheckRemote;
publicclass Client {
publicstaticvoid main(String[]args){
Properties props = new Properties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
CheckRemote checker=null;
try {
System.out.println("*****************************");
InitialContext context = newInitialContext(props);
System.out.println("&&&&&&&&&&&&&&&&&&&");
/*--------------2----------------*/
checker = (CheckRemote)context.lookup("CheckRemoteImpl/remote");
System.out.println(checker);
} catch (Exception e) {
// TODO: handleexception
}
String name="admin";
String psd="111111";
if (checker.check(name, psd)) {
//System.out.println("name:"+name);
//System.out.println("psd:"+psd);
System.out.println("登陆成功");
}else{
System.out.println("登录失败");
}
}
}
2.3 配置MySql的datasource
1. 将mysql-connector-java-5.1.16.jar包放置到JBOSS_HOME\server\default\lib目录下.
2. 将配置好的mysql-ds.xml放到JBOSS_HOME\server\default\deploy目录下。配置如下:
<?xmlversion="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://192.168.9.85:3306/login</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password>root</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>mySQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
2.3.1创建数据库
1、创建数据库login
2、创建数据表users
DROP TABLE IFEXISTS `users`;
CREATE TABLE users(
userName varchar(255) NOT NULL,
passWd varchar(255) NOT NULL,
PRIMARY KEY (`userName `)
)
2.4 测试运行
1. 将titan工程发布到JBOSS,启动JBOSS
2. 打开client程序,右键->Run As->Java Application
2.5 打包EJB工程
开发好EJB工程以后,将其打包成*.jar文件放置到Strut2工程目录的lib文件夹下。
3. Struts2前台开发
3.1 创建Strut2工程:EJB3.0_Struts2_LoginClient
1. 创建Strut2工程:EJB3.0_Struts2_LoginClient后,
2. 将打包后的EJB3.0工程的jar文件放置到Strut2工程工程的WebRoot/ WEB-INF /lib目录下
3. 并将jboss-4.2.3.GA的D:\jboss-4.2.3.GA\client目录下所有jar包拷贝到Strut2工程工程的WebRoot/ WEB-INF /lib目录下。
备注:2、3步骤很重要。
3.2 配置web.xml文件
配置如下:
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
3.3 配置struts.xml文件
<packagename="struts2"extends="struts-default">
<actionname="login"class="com.ejb.struts.action.LoginAction">
<resultname="success">success.jsp</result>
<resultname="failture">failure.jsp</result>
</action>
</package>
3.4 开发前台页面
3.4.1login.jsp
<form action="login.action"method="post">
name:
<input type="text" name="name" />
<br>
password:
<input type="password" name="psd" />
<br>
<input type="submit" value="submit">
</form>
3.4.2登陆失败页面failure.jsp
只是为了演示效果,开发很简单,只写“登录失败”即可!
3.4.3登陆成功页面failure.jsp
只是为了演示效果,开发很简单,只写“登录成功”即可!
3.5 开发LoginAction
package com.ejb.struts.action;
import java.util.Properties;
import javax.naming.*;
import com.ejb3.service.CheckRemote;
public classLoginAction {
private String name;
private String psd;
public String getName() {
return name;
}
public voidsetName(String name) {
this.name =name;
}
public String getPsd() {
return psd;
}
public voidsetPsd(String psd) {
this.psd =psd;
}
public String execute() throws Exception {
/*------------1---------------*/
Properties props = newProperties();
props.setProperty("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url","localhost:1099");
System.out.println(props.getProperty("java.naming.factory.initial"));
System.out.println(props.getProperty("java.naming.provider.url"));
CheckRemote checker=null;
try{
System.out.println("*****************************");
InitialContext context = new InitialContext(props);
System.out.println("&&&&&&&&&&&&&&&&&&&");
System.out.println(context);
/*--------------2----------------*/
checker = (CheckRemote) context.lookup("CheckRemoteImpl/remote");
System.out.println(context);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("name:"+name);
System.out.println("psd:"+psd);
//System.out.println(checker.check(name, psd));
if(checker.check(name,psd)){
System.out.println("登陆成功!");
return"success";
}
System.out.println("登陆失败!");
return"failture";
}
}
至此前台开发完成!!!
4. 运行
1. 在eclipse JavaEEE中发布EJB工程,并启动JBOSS
2. 在MyEclipse9中部署strut前端,并启动tomcat6。
3. 打开IE,输入http://192.168.9.85:7070/EJB3.0_Struts2_LoginClient/login.jsp
4. 输入用户名、密码即可验证。