zoukankan      html  css  js  c++  java
  • 开发一个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框架的搭建,这会让我们接下来的工作将会非常轻松的。

  • 相关阅读:
    socket 断线重连
    openwrt lan/wan口自动翻转
    单总线通讯协议
    关于Feign的Fallback处理
    Linux查找占用的端口,并杀死进程
    springCloud--admin监控使用
    解决执行脚本报syntax error: unexpected end of file或syntax error near unexpected token `fi'错误的问题
    Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
    Shell中[和[[的异同
    Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?
  • 原文地址:https://www.cnblogs.com/MicroGoogle/p/build_a_JSP_Web_Blog_Engine.html
Copyright © 2011-2022 走看看