天天看點

springmvc + spring + hibernate 實作簡單的增删改查和分頁

最近在學習springmvc,spring,hibernate這幾個架構,參考了網上很多資料,最終做出來了一個算是可以用的玩意。想把這個過程記錄下來,順便理順下自己做出這個玩意的過程。

這是整個項目的結構

springmvc + spring + hibernate 實作簡單的增删改查和分頁

pom.xml

<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>
  <groupId>com.wzq.hello</groupId>
  <artifactId>ssh</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>ssh Maven Webapp</name>
  <url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

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

		<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
		</dependency>


		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.2.12.Final</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
		<dependency>
			<groupId>javax.annotation</groupId>
			<artifactId>javax.annotation-api</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
			<scope>provided</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.45</version>
		</dependency>

	</dependencies>
	<build>
		<finalName>springmvc</finalName>
	</build>
	<properties>
		<spring.version>5.0.4.RELEASE</spring.version>
	</properties>
</project>

           

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name>Archetype Created Web Application</display-name>

	<!-- 防止中文亂碼 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<async-supported>true</async-supported>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- end -->

	<!-- spring配置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:beans.xml</param-value>
	</context-param>
	<!-- end -->
	
	<!-- Filter 配置 -->
	<filter>
		<filter-name>openSession</filter-name>
		<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>openSession</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<!-- end -->
	
	<!-- Listener 配置 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- end -->

	<!-- 靜态資源通路,這一段必須防止DispatcherServlet前面 -->
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.css</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.js</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.img</url-pattern>
	</servlet-mapping>
	<!-- end -->
	
	<!-- DispacherServlet配置 -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring-mvc.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<!-- end -->

</web-app>
           

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">

	<context:component-scan base-package="com.wzq16.hello">
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Service" />
	</context:component-scan>


	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="viewClass"
			value="org.springframework.web.servlet.view.JstlView">
		</property>
		<property name="prefix" value="views/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	<bean
		class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
	</bean>
</beans>
           

datasource.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">


	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		primary="false">
		<property name="driverClass" value="${jdbc.driver}"></property>
		<property name="jdbcUrl" value="${jdbc.url}"></property>
		<property name="user" value="${user}"></property>
		<property name="password" value="${password}"></property>
		<property name="maxPoolSize" value="40"></property>
		<property name="minPoolSize" value="1"></property>
		<property name="initialPoolSize" value="2"></property>
		<property name="maxIdleTime" value="20"></property>
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<property name="packagesToScan" value="com.wzq16.hello"></property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
				<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
			</props>
		</property>
	</bean>
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate5.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
           

datasource.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/test
user=root
password=1011012379
hibernate.hbm2ddl.auto=update
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.show_sql=true
hibernate.format_sql=true
           

beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	<context:component-scan base-package="com.wzq16.hello">
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>

	<import resource="classpath:datasource.xml" />
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:datasource.properties</value>
			</list>
		</property>
	</bean>
	<import resource="classpath:datasource.xml"/>
</beans>
           

實體類

package com.wzq16.hello.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name="consumer")
public class Consumer {
	@Id
	@Column(name="id")
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	
	@Column(unique=true)
	private String consumerId;
	
	@Column
	private String consumerName;
	
	@Column(nullable = true)
	private int consumerAge;
	
	@Column(nullable = true)
	private String consumerGender; 
	

	public Integer getId() {
		return id;
	}

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

	public String getConsumerId() {
		return consumerId;
	}

	public void setConsumerId(String consumerId) {
		this.consumerId = consumerId;
	}

	public String getConsumerName() {
		return consumerName;
	}

	public void setConsumerName(String consumerName) {
		this.consumerName = consumerName;
	}

	public int getConsumerAge() {
		return consumerAge;
	}

	public void setConsumerAge(int consumerAge) {
		this.consumerAge = consumerAge;
	}

	public String getConsumerGender() {
		return consumerGender;
	}

	public void setConsumerGender(String consumerGender) {
		this.consumerGender = consumerGender;
	}

}
           
package com.wzq16.hello.model;

import java.util.List;

public class PageBean<T> {

	private Integer currentPage;
	private Integer totalPages;
	private Integer allRowsCounts;
	private Integer pageSize = 5;
	private List<T> list;

	public static int currentPage(int page) {
		return page == 0 ? 1 : page;
	}

	public static int curOffset(int pageSize, int currentPage) {
		return pageSize * (currentPage - 1);
	}

	public static int getTotalPages(int allRowsCounts, int pageSize) {
		return allRowsCounts % pageSize == 0 ? allRowsCounts / pageSize : allRowsCounts / pageSize + 1;
	}

	public Integer getCurrentPage() {
		return currentPage;
	}

	public void setCurrentPage(Integer currentPage) {
		this.currentPage = currentPage;
	}

	public Integer getTotalPages() {
		return totalPages;
	}

	public void setTotalPages(Integer totalPages) {
		this.totalPages = totalPages;
	}

	public Integer getAllRowsCounts() {
		return allRowsCounts;
	}

	public void setAllRowsCounts(Integer allRowsCounts) {
		this.allRowsCounts = allRowsCounts;
	}

	public Integer getPageSize() {
		return pageSize;
	}

	public void setPageSize(Integer pageSize) {
		this.pageSize = pageSize;
	}

	public List<T> getList() {
		return list;
	}

	public void setList(List<T> list) {
		this.list = list;
	}
}
           

Dao層

package com.wzq16.hello.dao;

import java.util.List;

import com.wzq16.hello.model.Consumer;

public interface ConsumerDao {

	public void addConsumer(Consumer consumer);

	public void removeConsumer(Consumer consumer);

	public void updateConsumer(Consumer consumer);

	public List<Consumer> getAllConsumers();

	public void removeConsumerById(String consumerId);

	public Consumer getConsumer(String consumerId);

	public List<Consumer> findForPage(String hql, int offset, int length);

	public int findAllRowsCount(String hql);
}
           
package com.wzq16.hello.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.wzq16.hello.model.Consumer;

@Repository("consumerDao")
public class ConsumerDaoImpl implements ConsumerDao {

	@Autowired
	private SessionFactory sessionFactory;

	@Override
	public void addConsumer(Consumer consumer) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().save(consumer);
	}

	@Override
	public void removeConsumer(Consumer consumer) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().remove(consumer);
	}

	@Override
	public void removeConsumerById(String consumerId) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().createQuery("delete Consumer where consumerId = ?").setParameter(0, consumerId)
				.executeUpdate();
	}

	@Override
	public void updateConsumer(Consumer consumer) {
		// TODO Auto-generated method stub
		sessionFactory.getCurrentSession().merge(consumer);
	}

	@Override
	public List<Consumer> getAllConsumers() {
		// TODO Auto-generated method stub

		return sessionFactory.getCurrentSession().createQuery("from Consumer", Consumer.class).getResultList();
	}

	@Override
	public Consumer getConsumer(String consumerId) {
		// TODO Auto-generated method stub
		return (Consumer) sessionFactory.getCurrentSession().createQuery("from Consumer where consumerId = :consumerId")
				.setParameter("consumerId", consumerId).getSingleResult();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Consumer> findForPage(String hql, int offset, int length) {
		// TODO Auto-generated method stub
		return (List<Consumer>) sessionFactory.getCurrentSession().createQuery(hql).setFirstResult(offset)
				.setMaxResults(length).list();
	}

	@Override
	public int findAllRowsCount(String hql) {
		// TODO Auto-generated method stub
		return sessionFactory.getCurrentSession().createQuery(hql).list().size();
	}

}
           

service層

package com.wzq16.hello.service;


import java.util.List;

import com.wzq16.hello.model.PageBean;
import com.wzq16.hello.model.Consumer;


public interface ConsumerService {

	public void addConsumer(Consumer consumer);
	public List<Consumer> getAllConsumers();
	public void removeConsumerById(String consumerId);
	public Consumer getConsumer(String consumerId);
	public void updateConsumer(Consumer consumer);
	public void removeConsumer(Consumer consumer);
	
	public PageBean<Consumer> queryForPage(int currentPage);
}
           
package com.wzq16.hello.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.wzq16.hello.dao.ConsumerDao;
import com.wzq16.hello.model.PageBean;
import com.wzq16.hello.model.Consumer;

@Service("consumerService")
@Transactional
public class ConsumerServiceImpl implements ConsumerService {

	@Resource(name = "consumerDao")
	private ConsumerDao consumerDao;

	@Override

	public void addConsumer(Consumer consumer) {
		// TODO Auto-generated method stub
		consumerDao.addConsumer(consumer);
	}

	public void removeConsumer(Consumer consumer) {
		consumerDao.removeConsumer(consumer);
	}

	public void removeConsumerById(String consumerId) {
		consumerDao.removeConsumerById(consumerId);
	}

	public void updateConsumer(Consumer consumer) {
		consumerDao.updateConsumer(consumer);
	}

	public Consumer getConsumer(String consumerId) {
		return consumerDao.getConsumer(consumerId);
	}

	@Override
	public List<Consumer> getAllConsumers() {
		// TODO Auto-generated method stub
		return consumerDao.getAllConsumers();
	}

	@Override
	public PageBean<Consumer> queryForPage(int curPage) {
		// TODO Auto-generated method stub
		final int pageSize = 5;
		String hql = "from Consumer";
		int allRowsCounts = consumerDao.findAllRowsCount(hql);
		int currentPage = PageBean.currentPage(curPage);
		int currentOffset = PageBean.curOffset(pageSize, currentPage);
		int totalPages = PageBean.getTotalPages(allRowsCounts, pageSize);
		List<Consumer> students = consumerDao.findForPage(hql, currentOffset, pageSize);
		PageBean<Consumer> pageBean = new PageBean<Consumer>();
		pageBean.setAllRowsCounts(allRowsCounts);
		pageBean.setCurrentPage(currentPage);
		pageBean.setTotalPages(totalPages);
		pageBean.setAllRowsCounts(allRowsCounts);
		pageBean.setList(students);
		return pageBean;
	}

}
           

controller

package com.wzq16.hello.controller;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.wzq16.hello.model.Consumer;
import com.wzq16.hello.service.ConsumerService;

@Controller
public class ConsumerController {

	@Autowired
	private ConsumerService consumerService;
	
	@RequestMapping("/main")
	public String main(String username, String password) {
		if(username.equals("wzq") && password.equals("1011012379")) {
			return "main";
		}
		return "error";
	}
	
	@RequestMapping("/consumerInfo")
	public String consumerInfo(@RequestParam(value="currentPage",defaultValue="1")int currentPage, Model model) {
		model.addAttribute("pageBean", consumerService.queryForPage(currentPage));
		return "consumerInfo";
	}
	
	@RequestMapping("/addConsumer")
	public String addConsumer(int currentPage,Model model) {
		model.addAttribute("currentPage", currentPage);
		model.addAttribute("consumer", new Consumer());
		return "addConsumer";
	}
	
	@RequestMapping("/saveConsumer")
	public String saveConsumer(Consumer consumer, int currentPage, Model model) {
		consumerService.addConsumer(consumer);
		model.addAttribute("currentPage", currentPage);
		return "redirect:consumerInfo";
	}
	
	@RequestMapping("/editConsumer")
	public String editConsumer(String consumerId, int currentPage, Model model) {
		model.addAttribute("currentPage", currentPage);
		model.addAttribute("consumer", consumerService.getConsumer(consumerId));
		return "editConsumer";
	}
	
	@RequestMapping("/updateConsumer")
	public String updateConsumer(Consumer consumer, int currentPage,Model model) {
		consumerService.updateConsumer(consumer);
		model.addAttribute("currentPage", currentPage);
		return "redirect:consumerInfo";
	}
	
	@RequestMapping("/removeConsumerById")
	public String removeConsumerById(String consumerId, int currentPage,Model model) {
		consumerService.removeConsumerById(consumerId);
		if(consumerService.queryForPage(currentPage).getList().size() == 0) {
			currentPage = currentPage - 1;
		}
		model.addAttribute("currentPage", currentPage);
		return "redirect:consumerInfo";
	}
}
           

JSP檔案

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >
<style type="text/css">
	.form-control{
		width:300px;
	}
</style>
</head>
<body>


<form class="form-horizontal" role="form" method="get" action="${pageContext.request.contextPath }/main">
	<div class="form-group">
		<label  class="col-sm-2 control-label">使用者名</label>
		<div class="col-sm-10">
			<input type="text" class="form-control"  name="username" placeholder="請輸入使用者名">
		</div>
	</div>
	<div class="form-group">
		<label  class="col-sm-2 control-label">密碼</label>
		<div class="col-sm-10">
			<input type="password" class="form-control" name="password"  placeholder="請輸入密碼">
		</div>
	</div>
	<div class="form-group">
		<div class="col-sm-offset-2 col-sm-10">
			<button type="submit" class="btn btn-default">登入</button>
		</div>
	</div>
</form>

<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
</body>
</html>
           

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/consumerInfo" target="_blank" rel="external nofollow" >使用者資訊</a>
</body>
</html>
           

consumerInfo.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >
<title>Insert title here</title>
</head>
<body>
	<div class="table-responsive">
		<table class="table table-striped table-bordered">
			<thead>
				<tr>
					<th>使用者ID</th>
					<th>姓名</th>
					<th>性别</th>
					<th>年齡</th>
					<th>編輯</th>
					<th>删除</th>
				</tr>
			</thead>
			<tbody>
				<c:forEach var="consumer" items="${requestScope.pageBean.getList()}">
					<tr>
						<td>${consumer.consumerId }</td>
						<td>${consumer.consumerName }</td>
						<td>${consumer.consumerAge }</td>
						<td>${consumer.consumerGender }</td>
						<td><a href="${pageContext.request.contextPath }/editConsumer?consumerId=${consumer.consumerId}¤tPage=${requestScope.pageBean.currentPage }" target="_blank" rel="external nofollow" >編輯</a></td>
						<td><a href="${pageContext.request.contextPath }/removeConsumerById?consumerId=${consumer.consumerId}¤tPage=${requestScope.pageBean.currentPage}" target="_blank" rel="external nofollow"  οnclick='return confirm("是否删除")'>删除</a></td>
					</tr>
				</c:forEach>
				<tr>
					<td><a href="${pageContext.request.contextPath }/addConsumer?currentPage=${requestScope.pageBean.currentPage}" target="_blank" rel="external nofollow"  ><input type="button" class="btn btn-default" value="添加"></a></td>
				</tr>
			</tbody>
		</table>
	</div>
	<div class="table-responsive">
		<table class="table table-striped table-bordered">
			<c:if test="${requestScope.pageBean.allRowsCounts == 0 }">
				<tr>
					<td>沒有任何使用者資訊</td>
				</tr>
			</c:if>
			<c:if test="${requestScope.pageBean.allRowsCounts > 0 }">
				<tr>
					<td>
						<span>${requestScope.pageBean.currentPage }頁/${requestScope.pageBean.totalPages }頁</span>  
						<span> 
						<c:if  test="${pageBean.currentPage != 1 }">
							<a href="${pageContext.request.contextPath }/consumerInfo?currentPage=1" target="_blank" rel="external nofollow" >[首頁]</a>  
							<a href="${pageContext.request.contextPath }/consumerInfo?currentPage=${requestScope.pageBean.currentPage-1 }" target="_blank" rel="external nofollow" >[上一頁]</a>  
						</c:if>
						</span> 
						<span> 
						<c:if  test="${requestScope.pageBean.currentPage != requestScope.pageBean.totalPages }">
							<a href="${pageContext.request.contextPath }/consumerInfo?currentPage=${requestScope.pageBean.currentPage+1}" target="_blank" rel="external nofollow" >[下一頁]</a>  	
							<a href="${pageContext.request.contextPath }/consumerInfo?currentPage=${requestScope.pageBean.totalPages}" target="_blank" rel="external nofollow" >[尾頁]</a>  
						</c:if>
						</span>
					</td>
				</tr>
			</c:if>
		</table>
	</div>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
</body>
</html>
           

addConsumer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >
<style type="text/css">
	.form-control{
		width:300px;
	}
</style>
<title>Insert title here</title>
</head>
<body>
<div>
	<form method="post" action="${pageContext.request.contextPath }/saveConsumer?currentPage=${currentPage }">
		<div class="form-group">
			<label class="col-sm-2 control-label">使用者ID</label>
			<div class="col-sm-10">
				<input type="text" class="form-control" placeholder="請輸入ID"  value="${consumer.consumerId }" name="consumerId">
			</div>
		</div>
		<div class="form-group">
			<label class="col-sm-2 control-label">姓名</label>
			<div class="col-sm-10">
				<input type="text" class="form-control" placeholder="請輸入姓名" value="${consumer.consumerName }" name="consumerName">
			</div>
		</div>
		<div class="form-group">
			<label class="col-sm-2 control-label">年齡</label>
			<div class="col-sm-10">
				<input type="text" class="form-control" placeholder="請輸入年齡"  value="${consumer.consumerAge }" name="consumerAge">
			</div>
		</div>
		<div class="form-group">
			<label class="col-sm-2 control-label">性别</label>
			<div class="col-sm-10">
				<input type="text" class="form-control"  placeholder="請輸入性别" value="${consumer.consumerGender }" name="consumerGender">
			</div>
		</div>
		<div>
			<input type="submit" class="btn btn-default" value="送出">
		</div>
	</form>
</div>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
</body>
</html>
           

editConsumer.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath }/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/css/bootstrap.min.css" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" >
<title>Insert title here</title>
</head>
<body>
<div>
	<form method="post" action="${pageContext.request.contextPath }/updateConsumer?currentPage=${currentPage }">
		<input type="hidden" name="id" value="${consumer.id }">
		<div class="form-group">
			<label class="col-sm-2 control-label">使用者ID</label>
			<div class="col-sm-10">
				<input type="text" class="form-control" placeholder="請輸入ID"  value="${consumer.consumerId }" name="consumerId">
			</div>
		</div>
		<div class="form-group">
			<label class="col-sm-2 control-label">姓名</label>
			<div class="col-sm-10">
				<input type="text" class="form-control" placeholder="請輸入姓名" value="${consumer.consumerName }" name="consumerName">
			</div>
		</div>
		<div class="form-group">
			<label class="col-sm-2 control-label">年齡</label>
			<div class="col-sm-10">
				<input type="text" class="form-control" placeholder="請輸入年齡" value="${consumer.consumerAge }" name="consumerAge">
			</div>
		</div>
		<div class="form-group">
			<label class="col-sm-2 control-label">性别</label>
			<div class="col-sm-10">
				<input type="text" class="form-control"  placeholder="請輸入性别" value="${consumer.consumerGender }" name="consumerGender">
			</div>
		</div>
		<div>
			<input type="submit" class="btn btn-default" value="更新">
		</div>
	</form>
</div>
</body>
</html>
           

error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>未知使用者</h1>
</body>
</html>
           

當然這個玩意還有很多不足,以後再慢慢完善吧

繼續閱讀