Original Author: 马金泽
本文旨在为J2EE的初学者提供一个学习JSP的途径,使刚开始接触JSP的开发人员对Struts2,Hibernate有一个(非常简单和基础的)印象,转载不限,不过请保持本文完整。万分感谢!
您应具备的软件环境:NetBeans 6.8+或Eclipse 3.2+;
Tomcat 6.X (可使用集成在您的开发工具中的Tomcat);
MySQL 5.X 或MS SQL server 2000+及其他同级别数据库;
Power Designer 12+(可选);
您应具备的基本知识:对Hibernate,有初步的了解,了解Java编程。
首先,是数据库设计,没有什么博客引擎是不需要数据库的,但是我们只是实现博客引擎的基本功能,所以只做基本的设计,我们采用Power Designer来进行数据库的设计:
这样可以迅速的生成SQL脚本。
/*==============================================================*/
/* DBMS name: MySQL 5.0 */
/* Created on: 2010/8/27 10:11:09 */
/*==============================================================*/
drop table if exists Blog;
drop table if exists User;
/*==============================================================*/
/* Table: Blog */
/*==============================================================*/
create table Blog
(
UserEmail varchar(40),
Title varchar(40),
BlogText text,
BuildID varchar(40) not null,
primary key (BuildID)
);
/*==============================================================*/
/* Table: User */
/*==============================================================*/
create table User
(
Email varchar(40) not null,
Password int,
primary key (Email)
);
产生的SQL脚本如下:
好了,现在可以关闭您的Power Designer了,如果您不习惯使用这样的工具,您也可以直接使用生成的SQL脚本。
现在,打开您的IDE,现在主流的开发工具都非常出色,比如Eclipse,NetBeans,简单起见,我们使用NetBeans。
打开您的NetBeans,新建一个名为BlogPlay的Java WEB项目,然后在框架选项中选择 Hibernate 如下:
数 据库推荐使用免费且开源的MySQL作为我们的数据库平台,单击完成,新建一个 包,com.youwebsitename.BlogPlay.Entity,方便起见,我们的包名定义 为:com.deepfounder.BlogPlay.Entity 。接下来,打开您的MySQL Command Line Client,创建一个名为blogplay的新数据库:
Create database blogplay;然后,在NetBeans IDE 中的 服务 ->数据库 中打开这个blogplay,运行我们刚刚生成的数据库脚本,然后右键我们建立的com.deepfounder.BlogPlay.Entity,选择 从数据库生成实体类:
这样,我们可以自动生成我们需要的实体:
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.deepfounder.BlogPlay.Entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
*
* @author Andy
*/
@Entity
@Table(name = " blog " )
@NamedQueries({
@NamedQuery(name = " Blog.findAll " , query = " SELECT b FROM Blog b " ),
@NamedQuery(name = " Blog.findByUserEmail " , query = " SELECT b FROM Blog b WHERE b.userEmail = :userEmail " ),
@NamedQuery(name = " Blog.findByTitle " , query = " SELECT b FROM Blog b WHERE b.title = :title " ),
@NamedQuery(name = " Blog.findByBuildID " , query = " SELECT b FROM Blog b WHERE b.buildID = :buildID " )})
public class Blog implements Serializable {
private static final long serialVersionUID = 1L ;
@Column(name = " UserEmail " )
private String userEmail;
@Column(name = " Title " )
private String title;
@Lob
@Column(name = " BlogText " )
private String blogText;
@Id
@Basic(optional = false )
@Column(name = " BuildID " )
private String buildID;
public Blog() {
}
public Blog(String buildID) {
this .buildID = buildID;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this .userEmail = userEmail;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this .title = title;
}
public String getBlogText() {
return blogText;
}
public void setBlogText(String blogText) {
this .blogText = blogText;
}
public String getBuildID() {
return buildID;
}
public void setBuildID(String buildID) {
this .buildID = buildID;
}
@Override
public int hashCode() {
int hash = 0 ;
hash += (buildID != null ? buildID.hashCode() : 0 );
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if ( ! (object instanceof Blog)) {
return false ;
}
Blog other = (Blog) object;
if (( this .buildID == null && other.buildID != null ) || ( this .buildID != null && ! this .buildID.equals(other.buildID))) {
return false ;
}
return true ;
}
@Override
public String toString() {
return " com.deepfounder.BlogPlay.Entity.Blog[buildID= " + buildID + " ] " ;
}
}
User:
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.deepfounder.BlogPlay.Entity;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
/**
*
* @author Andy
*/
@Entity
@Table(name = " user " )
@NamedQueries({
@NamedQuery(name = " User.findAll " , query = " SELECT u FROM User u " ),
@NamedQuery(name = " User.findByEmail " , query = " SELECT u FROM User u WHERE u.email = :email " ),
@NamedQuery(name = " User.findByPassword " , query = " SELECT u FROM User u WHERE u.password = :password " )})
public class User implements Serializable {
private static final long serialVersionUID = 1L ;
@Id
@Basic(optional = false )
@Column(name = " Email " )
private String email;
@Column(name = " Password " )
private Integer password;
public User() {
}
public User(String email) {
this .email = email;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this .email = email;
}
public Integer getPassword() {
return password;
}
public void setPassword(Integer password) {
this .password = password;
}
@Override
public int hashCode() {
int hash = 0 ;
hash += (email != null ? email.hashCode() : 0 );
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if ( ! (object instanceof User)) {
return false ;
}
User other = (User) object;
if (( this .email == null && other.email != null ) || ( this .email != null && ! this .email.equals(other.email))) {
return false ;
}
return true ;
}
@Override
public String toString() {
return " com.deepfounder.BlogPlay.Entity.User[email= " + email + " ] " ;
}
}
好 了,现在,我们给我们的JSP Application添加一个Struts2应用 如果您是第一次接触Struts2,也不要担心,,非常简单,首先,您需要了解一点XML方面的知识,不过不用很多,Struts2的核心之一,是一个被 称为” struts.xml”配置文件,这个文件保存在您的类目录的根目录下,默认是在 src目录下,或者“src\java”目录下,该配置文件约定了什么应该由struts来处理,您需要在您的web.xml 中做出相应的配置,配置如下:
Struts.xml的内容如下:
<! DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd" >
< struts >
< constant name ="struts.devMode" value ="true" /> <!-- 标记是否为开发模式 -->
< package name ="User" namespace ="/User" extends ="struts-default" >
< action name ="AddBlog" class ="com.deepfounder.BlogPlay.Action.AddBlog" >
< result name ="success" >
/admin.jsp
</ result >
</ action >
</ package >
</ struts >
Web.xml 文件的配置如下(按需修改即可):
< fliter-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 > /* </ url-pattern >
</ filter-mapping >
与此同时,您还需要在您的lib目录下添加与Struts2相关的jar文件,现在我们只需要非常基本的文件,您应该导入的文件包括:
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
freemarker-2.3.15.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
好了,也许您没有注意,不过您已经在不经意间完成了Struts2和Hibernate框架的搭建,这会让我们接下来的工作将会非常轻松的。