最近在學習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>
當然這個玩意還有很多不足,以後再慢慢完善吧