开发一个JSP博客引擎 之一,开始你的后端
2010-09-03 23:20 jinze 阅读(1379) 评论(4) 编辑 收藏 举报开发一个JSP博客引擎 之一,开始你的后端
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编程,了解XML的相关知识。
首先,是数据库设计,没有什么博客引擎是不需要数据库的,但是我们只是实现博客引擎的基本功能,所以只做基本的设计,我们采用Power Designer来进行数据库的设计:
这样可以迅速的生成SQL脚本,产生的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)
);
好了,现在可以关闭您的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,选择从数据库生成实体类:这样,我们可以自动生成我们需要的实体:
Blog:
/*
* 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的内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!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 文件的配置如下(按需修改即可):
<filter>
<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框架的搭建,这会让我们接下来的工作将会非常轻松的。