任务描述:
一、语言和环境
l 实现技术
Java Web技术
l 环境要求及开发工具
JDK1.7以上、Eclipse或IntelliJ IDEA、Tomcat 8.0以上
二、程序整体要求
主要功能:
1、注册登录功能
l 注册:信息包括用户名、密码、密码确认、手机号码和邮箱,要使用正则表达式进行校验
l 登录:注册成功直接跳转到登录页面,登录成功后显示用户名
l 登录成功后进入管理页面。
l 使用过滤器限制不登录不能进入管理页面
2、图书分类管理
l 分类添加:分类id、名字、描述
3、图书管理
l 图书添加:内容包括图书id、图书名、图书分类、价格、描述
l 图书查询:列出所有图书完整信息,可以按id、图书名、分类进行查询,使用Ajax局部刷新,显示所有图书时要使用jstl
三、代码
登录界面 index.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< %
String path = request. getContextPath ( ) ;
String basePath = request. getScheme ( ) + "://" + request. getServerName ( ) + ":" + request. getServerPort ( ) + path+ "/" ;
String username = ( String) request. getAttribute ( "username" ) ;
String flag = request. getParameter ( "flag" ) ;
% >
< ! DOCTYPE html>
< html>
< head>
< meta http- equiv= "Content-Type" content= "text/html; charset=utf-8" >
< title> 图书后台管理登录界面< / title>
< script type= "text/javascript" src= "<%=basePath%>/resources/js/jquery-3.3.1.js" > < / script>
< / head>
< script type= "text/javascript" >
var flag = '<%=flag %>' ;
if ( "1" == flag) {
alert ( "你尚未登陆,或者账号在异地登陆,请重新登陆!" ) ;
}
< / script>
< body>
< center>
< h1>
登录 | < a href= "<%=basePath%>/pages/admin/regist.jsp" > 注册< / a>
< / h1>
< form action= "<%=basePath%>/LoginServlet" method= "post" >
< table width= "350px" cellspacing= "0px" cellpadding= "0px" border= "1px" >
< tr>
< td> 用户名< / td>
< td> < input type= "text" name= "username" id= "username"
placeholder= "用户名为3-12位字母数字或下划线组合" > < / td>
< / tr>
< tr>
< td> 密& nbsp; 码< / td>
< td> < input type= "password" name= "password" id= "password"
placeholder= "长度为6-12位的纯数字" > < / td>
< / tr>
< tr>
< td colspan= "2" style= "text-align: center" > < input
type= "submit" value= "登录" > < input type= "reset" value= "取消" >
< / td>
< / tr>
< / table>
< / form>
< / center>
< script type= "text/javascript" >
$( function ( ) {
if ( "<%=username%>" != "null" ) {
$( "#username" ) . val ( "<%=username%>" ) ;
}
if ( "${msg}" != "" ) {
alert ( '${msg}' ) ;
}
} )
< / script>
< / body>
< / html>
注册界面 regist.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< %
String path = request. getContextPath ( ) ;
String basePath = request. getScheme ( ) + "://" + request. getServerName ( ) + ":" + request. getServerPort ( ) + path;
% >
< ! DOCTYPE html>
< html>
< head>
< meta http- equiv= "Content-Type" content= "text/html; charset=utf-8" >
< script type= "text/javascript" src= "<%=basePath%>/resources/js/jquery-3.3.1.js" > < / script>
< title> 注册界面< / title>
< / head>
< body>
< center>
< h1> 用户注册< / h1>
< form action= "" method= "post" >
< table width= "400px" cellspacing= "0px" cellpadding= "0px" border= "1px" >
< tr>
< td> 用户名< / td>
< td> < input type= "text" name= "username" id= "username"
placeholder= "用户名为3-12位字母数字或下划线组合" > < / td>
< / tr>
< tr>
< td> 密& nbsp; 码< / td>
< td> < input type= "password" name= "password"
placeholder= "密码长度为6-12位的纯数字" id= "password" > < / td>
< / tr>
< tr>
< td> 确认密码< / td>
< td> < input type= "password" name= "checkPWD" id= "checkPWD"
placeholder= "密码长度为6-12位的纯数字" "> < / td>
< / tr>
< tr>
< td> 手机号码< / td>
< td> < input type= "text" name= "phone" id= "phone" placeholder= "请输入正确的手机号码格式" > < / td>
< / tr>
< tr>
< td> 邮箱< / td>
< td> < input type= "email" name= "email" id= "email" placeholder= "请输入正确邮箱格式"
required= "required" > < / td>
< / tr>
< tr>
< td colspan= "2" style= "text-align: center" > < input
type= "submit" id= "submit" value= "注册" > < input type= "reset" value= "重置" >
< / td>
< / tr>
< / table>
< / form>
< / center>
< script type= "text/javascript" >
$( function ( ) {
var flag = false ;
var flag1 = false ;
$( "#checkPWD" ) . blur ( function ( ) {
var pwd = $( "#password" ) . val ( ) ;
if ( $( this ) . val ( ) != pwd) {
alert ( "两次输入的密码不一致" ) ;
$( this ) . val ( "" ) ;
flag = false ;
} else {
flag = true ;
}
} )
$( "input[type='submit']" ) . click ( function ( ) {
var username = $( "#username" ) . val ( ) ;
var password = $( "#password" ) . val ( ) ;
var checkPWD = $( "#checkPWD" ) . val ( ) ;
var phone = $( "#phone" ) . val ( ) ;
var email = $( "#email" ) . val ( ) ;
var reg_name = / ^ [ 0 - 9 a- zA- Z\w] { 3 , 12 } $/ ;
var reg_name = / ^ [ 0 - 9 a- zA- Z\w] { 3 , 12 } $/ ;
var reg_pwd = / ^ \d{ 6 , 12 } $/ ;
var reg_phone = / ^ 1 [ 3456789 ] \d{ 9 } $/ ;
var reg_email = / ^ [ a- zA- Z0- 9 _- ] + @[ a- zA- Z0- 9 _- ] + ( \. [ a- zA- Z0- 9 _- ] + ) + $/ ;
if ( reg_name. test ( username) ) {
if ( reg_pwd. test ( password) ) {
if ( reg_pwd. test ( checkPWD) ) {
if ( reg_phone. test ( phone) ) {
if ( reg_email. test ( email) ) {
flag1 = true ;
}
}
}
}
} else {
flag1 = false ;
}
if ( flag&& flag1) {
alert ( "注册成功" ) ;
$( "form" ) . attr ( "action" , "<%=basePath%>/RegistServlet" ) ;
} else {
alert ( "输入参数有误" ) ;
}
} )
} )
< / script>
< / body>
< / html>
RegistServlet
package com. imooc. servlet;
import java. io. IOException;
import java. util. Enumeration;
import javax. management. loading. PrivateClassLoader;
import javax. servlet. ServletContext;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import javax. servlet. http. HttpSession;
import org. omg. CORBA. PRIVATE_MEMBER;
@WebServlet ( "/RegistServlet" )
public class RegistServlet extends HttpServlet {
private static final long serialVersionUID = 1 L;
public RegistServlet ( ) {
super ( ) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System. out. print ( "注册成功" ) ;
request. removeAttribute ( "username" ) ;
String username = ( String) request. getParameter ( "username" ) ;
String password = ( String) request. getParameter ( "password" ) ;
String phone = ( String) request. getParameter ( "phone" ) ;
String email = ( String) request. getParameter ( "email" ) ;
User user = new User ( username, password, phone, email) ;
System. out. println ( user) ;
LibService libService = new LibServiceImpl ( ) ;
libService. regist ( user) ;
request. setAttribute ( "username" , username) ;
request. getRequestDispatcher ( "/index.jsp" ) . forward ( request, response) ;
}
}
LoginServlet
package com. imooc. servlet;
import java. io. IOException;
import java. util. Enumeration;
import javax. management. loading. PrivateClassLoader;
import javax. servlet. ServletContext;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import javax. servlet. http. HttpSession;
import org. omg. CORBA. PRIVATE_MEMBER;
@WebServlet ( "/RegistServlet" )
public class RegistServlet extends HttpServlet {
private static final long serialVersionUID = 1 L;
public RegistServlet ( ) {
super ( ) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System. out. print ( "注册成功" ) ;
request. removeAttribute ( "username" ) ;
String username = ( String) request. getParameter ( "username" ) ;
String password = ( String) request. getParameter ( "password" ) ;
String phone = ( String) request. getParameter ( "phone" ) ;
String email = ( String) request. getParameter ( "email" ) ;
User user = new User ( username, password, phone, email) ;
System. out. println ( user) ;
LibService libService = new LibServiceImpl ( ) ;
libService. regist ( user) ;
request. setAttribute ( "username" , username) ;
request. getRequestDispatcher ( "/index.jsp" ) . forward ( request, response) ;
}
}
登录过滤器SessionFilter:
package com. imooc. servlet;
import java. io. IOException;
import javax. servlet. Filter;
import javax. servlet. FilterChain;
import javax. servlet. FilterConfig;
import javax. servlet. ServletException;
import javax. servlet. ServletRequest;
import javax. servlet. ServletResponse;
import javax. servlet. annotation. WebFilter;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
@WebFilter ( "/server.jsp" )
public class SessionFilter implements Filter {
public void destroy ( ) {
}
public void doFilter ( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = ( HttpServletRequest) request;
HttpServletResponse hresponse = ( HttpServletResponse) response;
String loginUser = ( String) hrequest. getSession ( ) . getAttribute ( "loginUser" ) ;
if ( loginUser== null) {
hresponse. sendRedirect ( hrequest. getContextPath ( ) + "/index.jsp?flag=1" ) ;
return ;
} else {
chain. doFilter ( request, response) ;
return ;
}
}
public void init ( FilterConfig fConfig) throws ServletException {
}
}
由场景和运行效果,可以分析出项目中可以抽取如下类和页面结构:
图书类Book:
package com. imooc. servlet;
import java. util. Map;
public class Book {
private String bookID;
private String name;
private String catgory;
private float price;
private String remark;
public Book ( ) {
}
public Book ( String bookID, String name, String catgory, float price, String remark) {
super ( ) ;
this . bookID = bookID;
this . name = name;
this . catgory = catgory;
this . price = price;
this . remark = remark;
}
public String getBookID ( ) {
return bookID;
}
public void setBookID ( String bookID) {
this . bookID = bookID;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public String getCatgory ( ) {
return catgory;
}
public void setCatgory ( String catgory) {
this . catgory = catgory;
}
public float getPrice ( ) {
return price;
}
public void setPrice ( float price) {
this . price = price;
}
public String getRemark ( ) {
return remark;
}
public void setRemark ( String remark) {
this . remark = remark;
}
@Override
public String toString ( ) {
return "Book [bookID=" + bookID + ", name=" + name + ", catgory=" + catgory + ", price=" + price + ", remark=" + remark
+ "]" ;
}
}
用户类User:
package com. imooc. servlet;
public class User {
private String username;
private String password;
private String phone;
private String email;
public User ( ) {
}
public User ( String username, String password, String phone, String email) {
super ( ) ;
this . username = username;
this . password = password;
this . phone = phone;
this . email = email;
}
public String getUsername ( ) {
return username;
}
public void setUsername ( String username) {
this . username = username;
}
public String getPassword ( ) {
return password;
}
public void setPassword ( String password) {
this . password = password;
}
public String getPhone ( ) {
return phone;
}
public void setPhone ( String phone) {
this . phone = phone;
}
public String getEmail ( ) {
return email;
}
public void setEmail ( String email) {
this . email = email;
}
@Override
public String toString ( ) {
return "User [username=" + username + ", password=" + password + ", phone=" + phone + ", email=" + email + "]" ;
}
}
数据处理类LibDaoImpl:
package com. imooc. servlet;
import java. util. ArrayList;
import java. util. HashMap;
import java. util. List;
import java. util. Map;
import org. apache. tomcat. util. digester. ObjectCreateRule;
import com. sun. org. apache. bcel. internal. generic. NEW;
public class LibDaoImpl {
private static final List< User> userDb = new ArrayList < User> ( ) ;
private static final List< Map< String, Object> > categorys = new ArrayList < > ( ) ;
private static final List< Book> books = new ArrayList < > ( ) ;
public LibDaoImpl ( ) {
}
public void regist ( User user) {
userDb. add ( user) ;
System. out. println ( userDb) ;
}
public int login ( String username, String password) {
System. out. println ( isUserExist ( username) ) ;
for ( User user: userDb) {
if ( user. getUsername ( ) . equals ( username) && user. getPassword ( ) . equals ( password) ) {
return 1 ;
}
}
return 0 ;
}
public int isUserExist ( String username) {
for ( User user: userDb) {
if ( user. getUsername ( ) . equals ( username) ) {
return 1 ;
} else {
return 0 ;
}
}
return 0 ;
}
public void addBookCatgory ( Long id, String catgoryName, String description) {
Map< String, Object> catgory = new HashMap < > ( ) ;
catgory. put ( "id" , id) ;
catgory. put ( "catgoryName" , catgoryName) ;
catgory. put ( "description" , description) ;
categorys. add ( catgory) ;
System. out. println ( categorys) ;
}
public List< Map< String, Object> > getAllBookCatgory ( ) {
return categorys;
}
public void addBook ( Book book) {
books. add ( book) ;
System. out. println ( books) ;
}
public List< Book> getBook ( ) {
return books;
}
public List< Book> getBooksByCondition ( String bookID, String bookName, String catgoryName) {
System. out. println ( bookID+ bookName+ catgoryName) ;
List< Book> book = new ArrayList < > ( ) ;
for ( Book b: books) {
if ( b. getBookID ( ) . equals ( bookID) || b. getName ( ) . equals ( bookName) || b. getCatgory ( ) . equals ( catgoryName) ) {
book. add ( b) ;
System. out. println ( b) ;
break ;
}
}
return book;
}
}
业务类接口LibService:
package com. imooc. servlet;
import java. util. List;
import java. util. Map;
public interface LibService {
public void regist ( User user) ;
public int login ( String username, String password) ;
public int isUserExist ( String username) ;
public void addBookCatgory ( Long id, String catgoryName, String description) ;
public List< Map< String, Object> > getAllBookCatgory ( ) ;
public void addBook ( Book book) ;
public List< Book> getBooksByCondition ( String bookID, String bookName, String catgoryName) ;
public List< Book> getBook ( ) ;
}
业务类实现 LibServiceImpl:
package com. imooc. servlet;
import java. util. List;
import java. util. Map;
public class LibServiceImpl implements LibService {
LibDaoImpl libDao = new LibDaoImpl ( ) ;
@Override
public void regist ( User user) {
libDao. regist ( user) ;
}
@Override
public int login ( String username, String password) {
return libDao. login ( username, password) ;
}
@Override
public int isUserExist ( String username) {
return libDao. isUserExist ( username) ;
}
@Override
public void addBookCatgory ( Long id, String catgoryName, String description) {
libDao. addBookCatgory ( id, catgoryName, description) ;
}
@Override
public List< Map< String, Object> > getAllBookCatgory ( ) {
return libDao. getAllBookCatgory ( ) ;
}
@Override
public void addBook ( Book book) {
libDao. addBook ( book) ;
}
@Override
public List< Book> getBooksByCondition ( String bookID, String bookName, String catgoryName) {
return libDao. getBooksByCondition ( bookID, bookName, catgoryName) ;
}
@Override
public List< Book> getBook ( ) {
return libDao. getBook ( ) ;
}
}
后台主页server.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< %
String basePath = request. getContextPath ( ) ;
% >
< ! DOCTYPE html>
< html>
< head>
< meta http- equiv= "Content-Type" content= "text/html; charset=utf-8" >
< title> 图书后台管理系统< / title>
< / head>
< ! -- frameset框架要放在< body> 外-- >
< frameset rows= "20%,*" >
< frame src= "${pageContext.request.contextPath }/server/top" > < / frame>
< frameset cols= "10%,*" >
< frame src= "${pageContext.request.contextPath }/server/left" > < / frame>
< frame name= "main" > < / frame>
< / frameset>
< / frameset>
< body>
< / body>
< / html>
left.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< %
String path = request. getContextPath ( ) ;
String basePath = request. getScheme ( ) + "://" + request. getServerName ( ) + ":" + request. getServerPort ( ) + path+ "/" ;
% >
< ! DOCTYPE html>
< html>
< head>
< base href= "<%=basePath%>" >
< meta http- equiv= "Content-Type" content= "text/html; charset=utf-8" >
< title> 图书后台管理< / title>
< / head>
< body>
< p>
< a href= "<%=basePath%>/pages/admin/catgory.jsp" target= "main" > 分类添加< / a>
< / p>
< p>
< a href= "<%=basePath%>/ToAddBookServlet" target= "main" > 图书添加< / a>
< / p>
< p>
< a href= "<%=basePath%>/SelectBookServlet" target= "main" > 图书查询< / a>
< / p>
< / body>
< / html>
top.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< %
String user = ( String) request. getSession ( ) . getAttribute ( "loginUser" ) ;
% >
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" >
< title> Document< / title>
< / head>
< body>
< center>
< h1>
图书后台管理系统< span style= "font-size:12px" > 您好,< %= user % > < / span>
< / h1>
< / center>
< / body>
< / html>
图书分类 catgory.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< %
String user = ( String) request. getSession ( ) . getAttribute ( "loginUser" ) ;
% >
< ! DOCTYPE html>
< html>
< head>
< meta charset= "UTF-8" >
< title> Document< / title>
< / head>
< body>
< center>
< h1>
图书后台管理系统< span style= "font-size:12px" > 您好,< %= user % > < / span>
< / h1>
< / center>
< / body>
< / html>
CatgoryServlet:
package com. imooc. servlet;
import java. io. IOException;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
@WebServlet ( "/CatgoryServlet" )
public class CatgoryServlet extends HttpServlet {
private static final long serialVersionUID = 1 L;
public CatgoryServlet ( ) {
super ( ) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request. setCharacterEncoding ( "UTF-8" ) ;
Long id = ( long ) Integer. parseInt ( request. getParameter ( "id" ) ) ;
String catgoryName = request. getParameter ( "catgoryName" ) ;
String description = request. getParameter ( "description" ) ;
LibService libService = new LibServiceImpl ( ) ;
libService. addBookCatgory ( id, catgoryName, description) ;
System. out. println ( "图书分类添加成功" ) ;
}
}
ToAddBookServlet:
package com. imooc. servlet;
import java. io. IOException;
import java. util. ArrayList;
import java. util. List;
import java. util. Map;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
@WebServlet ( "/ToAddBookServlet" )
public class ToAddBookServlet extends HttpServlet {
private static final long serialVersionUID = 1 L;
public ToAddBookServlet ( ) {
super ( ) ;
}
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request. setCharacterEncoding ( "UTF-8" ) ;
LibService libService = new LibServiceImpl ( ) ;
List< Map< String, Object> > bookCatgory = libService. getAllBookCatgory ( ) ;
List< Object> catgoryList = new ArrayList < > ( ) ;
for ( Map< String, Object> catgory: bookCatgory) {
catgoryList. add ( catgory. get ( "catgoryName" ) ) ;
}
request. setAttribute ( "bookCatgory" , catgoryList) ;
request. getRequestDispatcher ( "/addBook.jsp" ) . forward ( request, response) ;
}
}
添加图书addBook.jsp:
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< % @taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" % >
< %
String path = request. getContextPath ( ) ;
String basePath = request. getScheme ( ) + "://" + request. getServerName ( ) + ":" + request. getServerPort ( ) + path+ "/" ;
% >
< ! DOCTYPE html>
< html>
< head>
< base href= "<%=basePath%>" >
< meta http- equiv= "Content-Type" content= "text/html; charset=utf-8" >
< title> 图书添加< / title>
< / head>
< body>
< center>
< h1> 图书添加< / h1>
< form action= "<%=basePath%>/AddBookServlet" method= "post" >
< table width= "400px" cellspacing= "0px" cellpadding= "0px" border= "1px" >
< tr>
< td> 图书ID< / td>
< td> < input type= "text" name= "id" id = "id" placeholder= "请输入数字" pattern= "\d+" required= "required" > < / td>
< / tr>
< tr>
< td> 图书名< / td>
< td> < input type= "text" name= "bookName" id= "bookName" > < / td>
< / tr>
< tr>
< td> 图书分类< / td>
< td>
< select name= "catgoryName" id= "catgoryName" >
< c: forEach items= "${bookCatgory}" var= "catgory" >
< option value= "${catgory}" > ${ catgory} < / option>
< / c: forEach>
< / select>
< / td>
< / tr>
< tr>
< td> 价格< / td>
< td> < input type= "text" name= "price" id= "price" placeholder= "请输入价格" > < / td>
< / tr>
< tr>
< td> 描述< / td>
< td> < input type= "text" name= "description" id= "description" placeholder= "请输入描述信息" > < / td>
< / tr>
< tr>
< td colspan= "2" style= "text-align:center" >
< input type= "submit" value= "添加" >
< input type= "reset" value= "重置" >
< / td>
< / tr>
< / table>
< / form>
< / center>
< / body>
< / html>
AddBookServlet:
package com. imooc. servlet;
import java. io. IOException;
import java. util. List;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import com. alibaba. fastjson. JSON;
@WebServlet ( "/AddBookServlet" )
public class AddBookServlet extends HttpServlet {
private static final long serialVersionUID = 1 L;
public AddBookServlet ( ) {
super ( ) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request. setCharacterEncoding ( "UTF-8" ) ;
String bookID = request. getParameter ( "id" ) ;
String bookName = request. getParameter ( "bookName" ) ;
String catgoryName = request. getParameter ( "catgoryName" ) ;
Float price = ( float ) Integer. parseInt ( request. getParameter ( "price" ) ) ;
String description = request. getParameter ( "description" ) ;
Book book = new Book ( bookID, bookName, catgoryName, price, description) ;
LibService libService = new LibServiceImpl ( ) ;
libService. addBook ( book) ;
System. out. println ( "添加图书成功" ) ;
List< Book> bookList = libService. getBook ( ) ;
request. getSession ( ) . setAttribute ( "bookList" , bookList) ;
request. getRequestDispatcher ( "/showBooks.jsp" ) . forward ( request, response) ;
}
}
图书查询showBooks.jsp
< % @ page language= "java" contentType= "text/html; charset=UTF-8"
pageEncoding= "UTF-8" % >
< % @taglib prefix= "c" uri= "http://java.sun.com/jsp/jstl/core" % >
< % @ page import = "java.util.*,com.imooc.servlet.Book" % >
< %
String path = request. getContextPath ( ) ;
String basePath = request. getScheme ( ) + "://" + request. getServerName ( ) + ":" + request. getServerPort ( ) + path;
% >
< ! DOCTYPE html>
< html>
< head>
< base href= "<%=basePath%>" >
< meta http- equiv= "Content-Type" content= "text/html; charset=utf-8" >
< title> 图书查询< / title>
< script type= "text/javascript" src= "<%=basePath%>/resources/js/jquery-3.3.1.js" > < / script>
< / head>
< body>
< center>
< h1> 图书查询< / h1>
< p>
图书ID:< input type= "text" name= "bookID" >
图书名:< input type= "text" name= "bookName" >
分类:< input type= "text" name= "catgoryName" >
< input type= "submit" value= "查询" id= "search" >
< / p>
< hr>
< table width= "800px" cellspacing= "0px" cellpadding= "0px" border= "1px" >
< thead>
< tr>
< th> 图书ID< / th>
< th> 书名< / th>
< th> 分类< / th>
< th> 价格< / th>
< th> 描述< / th>
< / tr>
< / thead>
< tbody id= "cont" >
< c: forEach items= "${bookList }" var= "book" >
< tr>
< td> ${ book. bookID } < / td>
< td> ${ book. name } < / td>
< td> ${ book. catgory } < / td>
< td> ${ book. price } < / td>
< td> ${ book. remark } < / td>
< / tr>
< / c: forEach>
< / tbody>
< / table>
< / center>
< script type= "text/javascript" >
$( function ( ) {
$( "#search" ) . click ( function ( ) {
$. ajax ( {
"url" : "<%=basePath%>/SelectBookServlet" ,
"data" : {
bookID : $( "input[name=bookID]" ) . val ( ) ,
bookName : $( "input[name=bookName]" ) . val ( ) ,
catgoryName : $( "input[name=catgoryName]" ) . val ( )
} ,
"type" : "post" ,
"dataType" : "json" ,
"success" : function ( json) {
var content = "" ;
for ( var i = 0 ; i < json. length; i++ ) {
content = content + "<tr><td>" + json[ i] . bookID
+ "</td><td>" + json[ i] . name
+ "</td><td>" + json[ i] . catgory
+ "</td><td>" + json[ i] . price
+ "</td><td>" + json[ i] . remark
+ "</td></tr>" ;
$( "#cont>tr" ) . remove ( ) ;
}
$( "#cont" ) . html ( content) ;
}
} ) ;
} ) ;
} )
< / script>
< / body>
< / html>
SelectBookServlet:
package com. imooc. servlet;
import java. io. IOException;
import java. util. List;
import javax. servlet. ServletException;
import javax. servlet. annotation. WebServlet;
import javax. servlet. http. HttpServlet;
import javax. servlet. http. HttpServletRequest;
import javax. servlet. http. HttpServletResponse;
import com. alibaba. fastjson. JSON;
@WebServlet ( "/SelectBookServlet" )
public class SelectBookServlet extends HttpServlet {
private static final long serialVersionUID = 1 L;
public SelectBookServlet ( ) {
super ( ) ;
}
protected void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request. setCharacterEncoding ( "UTF-8" ) ;
String bookID = request. getParameter ( "bookID" ) ;
String bookName = request. getParameter ( "bookName" ) ;
String catgoryName = request. getParameter ( "catgoryName" ) ;
LibService libService = new LibServiceImpl ( ) ;
List< Book> list = libService. getBooksByCondition ( bookID, bookName, catgoryName) ;
String json = JSON. toJSONString ( list) ;
System. out. println ( json) ;
response. setContentType ( "text/html;charset=UTF-8" ) ;
response. getWriter ( ) . println ( json) ;
}
protected void doPost ( HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet ( request, response) ;
}
}
PS:left.jsp top.jsp要在web.xml中进行servlet配置