开发一个JSP博客引擎 之一,开始你的后端

开发一个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来进行数据库的设计:
moz-screenshot
这样可以迅速的生成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框架的搭建,这会让我们接下来的工作将会非常轻松的。

原文地址:https://www.cnblogs.com/MicroGoogle/p/build_a_JSP_Web_Blog_Engine.html