1. 程式人生 > >使用IDEA搭建SSH專案

使用IDEA搭建SSH專案

三層架構如下:

pom.xml檔案匯入相應jar包:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>

  <name>studentMsg</name>
  <groupId>com.accp</groupId>
  <artifactId>studentMsg</artifactId>
  <version>1.0-SNAPSHOT</version>

    <properties>
        <hibernate-version>4.1.12.Final</hibernate-version>
        <struts.version>2.1.6</struts.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.8</version>
        </dependency>

        <!--hibernate的jar包-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate-version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.5.Final</version>
        </dependency>

        <!-- struts2-core的jar包 -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>${struts.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.struts.xwork</groupId>
            <artifactId>xwork-core</artifactId>
            <version>2.3.34</version>
        </dependency>

        <!-- oracle 的jar包 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

    </dependencies>

</project>

連線資料庫(我用的是Oracle):

資料訪問層學生實體類程式碼:

package com.accp.entity;


public class Student {

  private Integer id;
  private String name;
  private Integer age;
  private String gender;
  private String telephone;
  private String email;
  //private Integer classid;
    private Classes classes;//班級外來鍵


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Classes getClasses() {
        return classes;
    }

    public void setClasses(Classes classes) {
        this.classes = classes;
    }
}

資料訪問層班級實體類:

package com.accp.entity;


public class Classes {

  private Integer id;
  private String name;


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

會話工廠程式碼:

package com.accp.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
    private static SessionFactory sessionFactory ;

    static {
        Configuration conf = new Configuration().configure("hibernate.cfg.xml");
        sessionFactory = conf.buildSessionFactory();
    }

    public static Session openSession(){
        return sessionFactory.getCurrentSession();
    }
}

過濾器程式碼:

package com.accp.util;

import org.hibernate.Session;
import org.hibernate.Transaction;

import javax.servlet.*;
import java.io.IOException;


public class MyFilter implements Filter {


    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=UTF-8");

        Session session = HibernateUtil.openSession();
        Transaction transaction = session.beginTransaction();
        try {
            chain.doFilter(request,response);
            transaction.commit();
        }catch (Exception e){
            transaction.rollback();
        }

    }

    public void destroy() {

    }
}

學生Dao層程式碼:

package com.accp.dao;

import com.accp.entity.Student;

import java.io.Serializable;
import java.util.List;

public interface StudentDao {

    List<Student> queryStudent(Student student);

    Serializable addStudent(Student student);

}

學生DaoImpl實現程式碼

package com.accp.dao.impl;

import com.accp.dao.StudentDao;
import com.accp.entity.Student;
import com.accp.util.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;

import java.io.Serializable;
import java.util.List;

public class StudentDaoImpl implements StudentDao {
    public List<Student> queryStudent(Student student) {
        Session session = HibernateUtil.openSession();
        Criteria criteria = session.createCriteria(Student.class);
        return criteria.list();
    }

    public Serializable addStudent(Student student) {
        Session session = HibernateUtil.openSession();
        Serializable save = session.save(student);
        return save;
    }
}

班級Dao層程式碼:

package com.accp.dao;

import com.accp.entity.Classes;

import java.util.List;

public interface ClassesDao {

    List<Classes> queryClasses(Classes classes);

}

班級DaoImpl實現程式碼

package com.accp.dao.impl;

import com.accp.dao.ClassesDao;
import com.accp.entity.Classes;
import com.accp.util.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;

import java.util.List;

public class ClassesDaoImpl implements ClassesDao {
    public List<Classes> queryClasses(Classes classes) {
        Session session = HibernateUtil.openSession();
        Criteria criteria = session.createCriteria(Classes.class);
        return criteria.list();
    }
}

學生業務邏輯層程式碼:

package com.accp.service;

import com.accp.entity.Student;

import java.io.Serializable;
import java.util.List;

public interface StudentService {

    List<Student> queryStudent(Student student);

    boolean addStudent(Student student);
}

學生業務邏輯層實現程式碼:

package com.accp.service.impl;

import com.accp.dao.StudentDao;
import com.accp.dao.impl.StudentDaoImpl;
import com.accp.entity.Student;
import com.accp.service.StudentService;

import java.util.List;

public class StudentServiceImpl implements StudentService {
    private StudentDao studentDao = new StudentDaoImpl();

    public List<Student> queryStudent(Student student) {
        return studentDao.queryStudent(student);
    }

    public boolean addStudent(Student student) {
        if(studentDao.addStudent(student)!=null){
            return true;
        }
        return false;
    }
}

班級業務邏輯層程式碼:

package com.accp.service;

import com.accp.entity.Classes;

import java.util.List;

public interface ClassesService {

    List<Classes> queryClasses(Classes classes);
}

班級業務邏輯層實現程式碼:

package com.accp.service.impl;

import com.accp.dao.ClassesDao;
import com.accp.dao.impl.ClassesDaoImpl;
import com.accp.entity.Classes;
import com.accp.service.ClassesService;

import java.util.List;

public class ClassesServiceImpl implements ClassesService {
    private ClassesDao classesDao = new ClassesDaoImpl();

    public List<Classes> queryClasses(Classes classes) {
        return classesDao.queryClasses(classes);
    }
}

學生hibernate的對映配置檔案(Student.hbm.xml)程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.accp.entity">
    <class name="Student">
        <id name="id">
            <generator class="sequence">
                <param name="sequence">seq_student_id</param>
            </generator>
        </id>

        <property name="name"/>
        <property name="age"/>
        <property name="gender"/>
        <property name="telephone"/>
        <property name="email"/>

        <many-to-one name="classes" column="classid" class="Classes"/>
    </class>
</hibernate-mapping>

班級hibernate的對映配置檔案(Classes.hbm.xml)程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.accp.entity">
    <class name="Classes">
        <id name="id">
            <generator class="sequence">
                <param name="sequence">seq_classes_id</param>
            </generator>
        </id>

        <property name="name"/>
    </class>
</hibernate-mapping>

連線資料庫配置檔案(hibernate.cfg.xml)程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="connection.username">scott</property>
        <property name="connection.password">orcl</property>
        <property name="show_sql">true</property>
        <property name="current_session_context_class">thread</property>

        //對映檔案
        <mapping resource="xml/Classes.hbm.xml"/>
        <mapping resource="xml/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

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.ui.theme" value="simple" />
    <package name="web" extends="struts-default">

        <action name="sClasses" class="com.accp.action.ClassesAction" method="queryClass">
            <result name="success">add.jsp</result>
        </action>

       <action name="add" class="com.accp.action.StudentAction" method="addStudent">
           <result name="success" type="redirectAction">sStudent.action</result>
           <result name="input" type="redirectAction">sClasses.action</result>
       </action>

        <action name="sStudent" class="com.accp.action.StudentAction" method="queryStudent">
            <result name="success">show.jsp</result>
        </action>
    </package>

</struts>

web.xml配置程式碼:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <filter>
        <filter-name>openSessionInView</filter-name>
        <filter-class>com.accp.util.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>openSessionInView</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>

    <filter>
        <filter-name>strut2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>strut2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
</web-app>

控制層action學生程式碼:

package com.accp.action;

import com.accp.entity.Student;
import com.accp.service.StudentService;
import com.accp.service.impl.StudentServiceImpl;
import com.opensymphony.xwork2.ActionSupport;

import java.util.List;

public class StudentAction extends ActionSupport {
    private Student student;
    private List<Student> studentList;
    private StudentService studentService = new StudentServiceImpl();

    public String queryStudent(){
        studentList = studentService.queryStudent(student);
        return SUCCESS;
    }

    public String addStudent(){
        if(studentService.addStudent(student)){
            return SUCCESS;
        }
        return INPUT;
    }


    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public List<Student> getStudentList() {
        return studentList;
    }

    public void setStudentList(List<Student> studentList) {
        this.studentList = studentList;
    }
}

控制層action班級程式碼:

package com.accp.action;

import com.accp.entity.Classes;
import com.accp.service.ClassesService;
import com.accp.service.impl.ClassesServiceImpl;
import com.opensymphony.xwork2.ActionSupport;

import java.util.List;

public class ClassesAction extends ActionSupport {
    private Classes classes;
    private ClassesService classesService = new ClassesServiceImpl();
    private List<Classes> classesList;

    public String queryClass(){
        classesList = classesService.queryClasses(classes);
        return SUCCESS;
    }


    public Classes getClasses() {
        return classes;
    }

    public void setClasses(Classes classes) {
        this.classes = classes;
    }

    public List<Classes> getClassesList() {
        return classesList;
    }

    public void setClassesList(List<Classes> classesList) {
        this.classesList = classesList;
    }
}

顯示學生資訊頁面程式碼:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="2px" width="100%" align="center">
    <h1 align="center">學員資訊列表</h1>
    <tr align="right">
        <td><a href="sClasses.action">新增學員</a></td>
    </tr>
    <tr>
        <td>編號</td>
        <td>姓名</td>
        <td>性別</td>
        <td>年齡</td>
        <td>電話</td>
        <td>email</td>
        <td>班級</td>
    </tr>
    <s:iterator value="studentList">
        <tr>
            <td>${id}</td>
            <td>${name}</td>
            <td>${gender}</td>
            <td>${age}</td>
            <td>${telephone}</td>
            <td>${email}</td>
            <td>${classes.name}</td>
        </tr>
    </s:iterator>
</table>
</body>
</html>

插入學生資訊頁面程式碼:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="add.action" method="post">
    <table border="2px" width="100%" align="center">
        <tr align="center">
            <td align="center">
                <s:label><h2>學員資訊新增</h2></s:label>
            </td>
        </tr>
        <tr>
            <td>
                姓名:<input type="text" name="student.name"/>
            </td>
        </tr>
        <tr>
            <td>
                性別:<input type="text" name="student.gender"/>
            </td>
        </tr>
        <tr>
            <td>
                年齡:<input type="text" name="student.age"/>
            </td>
        </tr>
        <tr>
            <td>
                電話:<input type="text" name="student.telephone"/>
            </td>
        </tr>
        <tr>
            <td>
                email:<input type="text" name="student.email"/>
            </td>
        </tr>
        <tr>
            <td>
                班級:<select name="student.classes.id">
                <option value="-1">請選擇</option>
                <s:iterator value="classesList">
                    <option value="${id}">${name}</option>
                </s:iterator>
            </select>
            </td>
        </tr>
        <tr>
            <td>
                <input type="submit" value="新增"/>&nbsp;&nbsp;
                <input type="button" value="返回" onclick="window.history.go(-1)">
            </td>
        </tr>
    </table>
</form>
</body>
</html>

配置tomcat啟動專案:

執行專案: