关于图书查询这一块的问题

关于图书查询这一块的问题

package com.imooc.servlet;
import java.io.IOException;
import java.util.ArrayList;
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;
import com.imooc.dao.Book;
import com.imooc.service.LibServicelmpl;
/**
 * Servlet implementation class FindBookServlet
 */
@WebServlet("/FindBookServlet")
public class FindBookServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FindBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String bookID = request.getParameter("bookID");
  String bookName = request.getParameter("bookName");
  String catgoryName = request.getParameter("catgoryName");
  
  List<Book> list = new ArrayList<Book>();
  LibServicelmpl lsl = new LibServicelmpl();
  List<Book> books = lsl.getLibDaolmpl().getBooks();
  for(Book book : books) {
   if(book.getBookId().equals(bookID)) {
    list.add(book);
   }else if(book.getBookName().equals(bookName)) {
    list.add(book);
   }else if(book.getCfName().equals(catgoryName)) {
    list.add(book);
   }
  }
  
  String json = JSON.toJSONString(list);
  
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }
}
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    String basePath=request.getScheme()+"://"+request.getServerName()
                +":"+request.getServerPort()+request.getContextPath();
%>
<!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="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
 $("#search").on(click,function(){
  $(function(){
   "url" : "/library_system/FindBookServlet",
   "type" : "get",
   "data" : {"bookID":$("#bookID").val() , "bookName":$("#bookName").val() , "catgoryName" : $("#catgoryName").val()},
   "dataType" : "json",
   "success" : function(json){
    for(var i = 0 ; i < json.length; i++){
     $("#cont").append(
      "<tr>" + 
       "<th>" + json[i].bookId + "</th>" + 
       "<th>" + json[i].bookName + "</th>" + 
       "<th>" + json[i].cfName + "</th>" + 
       "<th>" + json[i].price + "</th>" + 
       "<th>" + json[i].describe + "</th>" + 
      "</tr>");
    }
   },
   "error" : function(xmlhttp,errorText){
    if(xmlhttp.status == 405){
     alert("无效的请求方式");
    }else if(xmlhttp.status == 404){
     alert("未找到URL资源")
    }else if(xmlhttp.status == 500){
     alert("服务器内部错误")
    }else{
     alert("产生异常");
    }
   }
  });
 });
 
</script>
</head>
<body>
 <center>
  <h1>图书查询</h1>
  <p>
   图书ID:<input type="text" name="bookID" id="bookID">
   图书名:<input type="text" name="bookName" id="bookName">
   分类:<input type="text" name="catgoryName" id="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">
    
   </tbody>
  </table>
 </center>
 
</body>
</html>

老师,我在查询的时候没有显示出所需要的图书,我的思路是:新建了一个showFindBook.jsp一个页面用来展示所查询到的图书,然后FindBookServlet是对这个页面的一些操作。我不知道这个思路是否是正确的,老师帮忙看看哪里有逻辑错误!

正在回答

登陆购买课程后可参与讨论,去登陆

12回答

同学你好,1、list可以输出,json有输出吗?System.out.println(json);有内容输出吗? 

http://img1.sycdn.imooc.com//climg/5dde53d80908863805990144.jpg

        2、如果没有输出,list有输出,json没输出,同学JSON.toJSONString是否有正确的导入JSON的jar包呐,比如,老师项目中的json  jar包。

http://img1.sycdn.imooc.com//climg/5dde5465099b5b0b01640031.jpg

如果同学还是有问题,同学可以将问题具体描述到文档中,作业老师会根据描述,具体定位问题。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • Levinson 提问者 #1
    老师,包也正常导入了。json只输出了:[],里面没有东西
    2019-11-27 18:50:53
  • 好帮手慕小班 回复 提问者 Levinson #2
    同学你好,1、同学可以使用for循环遍历输出list的内容,查看list是否有具体的对象输出。2、建议同学将错误内容具体描述到文档中,提交作业,作业老师会测试代码,根据描述具体回复同学的问题。如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
    2019-11-27 19:59:55
提问者 Levinson 2019-11-28 09:51:50

谢谢老师,我发现问题了。

好帮手慕小班 2019-11-27 16:59:04

同学你好,1、测试贴出代码,拼接后是可以查询到的,例如:

http://img1.sycdn.imooc.com//climg/5dde382409d7c87a10970466.jpg

对应在页面中是可以查询到:

http://img1.sycdn.imooc.com//climg/5dde363b0962eca108700224.jpg

如上所示,可以判断ajax请求可以发送成功,没有问题。

    2、同学可以遍历输出Servlet中的list的内容,查看是否根据条件查询到了这个图书信息,如果调用查询方法得到的list的内容为空,说明并没有查询到这个图书信息,这时排查LibDaolmpl中userDb的内容,图书是否正确的添加了,根据条件查找没有找到的原因。

http://img1.sycdn.imooc.com//climg/5dde3ace0959434400000000.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 Levinson #1
    老师,list里面有所查到的图书,但是json里面没有
    2019-11-27 17:00:30
提问者 Levinson 2019-11-27 15:59:28
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    String basePath=request.getScheme()+"://"+request.getServerName()
                +":"+request.getServerPort()+request.getContextPath();
%>
<!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>
  <p>
   图书ID:<input type="text" name="bookID" id="bookID">
   图书名:<input type="text" name="bookName" id="bookName">
   分类:<input type="text" name="catgoryName" id="catgoryName">
   <input type="button" 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="${booksList }" var="c">
     <tr>
      <td>${c.bookId}</td>
      <td>${c.bookName }</td>
      <td>${c.cfName }</td>
      <td>${c.price }</td>
      <td>${c.describe }</td>
     </tr>
    </c:forEach>
   </tbody>
  </table>
 </center>
 <script type="text/javascript" src="<%=basePath %>/js/jquery-3.3.1.js"></script>
<script type="text/javascript">
 $("#search").click(function(){
  $.ajax({
  "url" : "/library_system/FindBookServlet",
  "type" : "get",
  "data" : {"bookID":$("#bookID").val() , "bookName":$("#bookName").val() , "catgoryName" : $("#catgoryName").val()},
  "dataType" : "json",
  "success" : function(json){
   var content = "";
   console.log(json);
   $("#cont>tr").remove();
   for(var i = 0 ; i < json.length; i++){
    content = content + 
    "<tr>" + 
     "<th>" + json[i].bookId + "</th>" + 
     "<th>" + json[i].bookName + "</th>" + 
     "<th>" + json[i].cfName + "</th>" + 
     "<th>" + json[i].price + "</th>" + 
     "<th>" + json[i].describe + "</th>" + 
    "</tr>";
   }
   $("#cont").html(content);
  },
  "error" : function(xmlhttp,errorText){
   if(xmlhttp.status == 405){
    alert("无效的请求方式");
   }else if(xmlhttp.status == 404){
    alert("未找到URL资源")
   }else if(xmlhttp.status == 500){
    alert("服务器内部错误")
   }else{
    alert("产生异常");
   }
  }
  })
 });
 
</script>
</body>
</html>
package com.imooc.servlet;
import java.io.IOException;
import java.util.ArrayList;
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;
import com.imooc.dao.Book;
import com.imooc.service.LibServicelmpl;
/**
 * Servlet implementation class FindBookServlet
 */
@WebServlet("/FindBookServlet")
public class FindBookServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FindBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String bookID = request.getParameter("bookID");
  String bookName = request.getParameter("bookName");
  String catgoryName = request.getParameter("catgoryName");
  // 集合用于接收符号条件的图书
  List<Book> list = new ArrayList<Book>();  
  LibServicelmpl lsl = new LibServicelmpl();
  // 根据条件查询书籍信息
  List<Book> books = lsl.getLibDaolmpl().getBooksByCondition(bookID, bookName, catgoryName);
  
  String json = JSON.toJSONString(list);
  System.out.println(json);
  response.setContentType("text/html;charset=utf-8");
  response.getWriter().println(json);
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }
}
package com.imooc.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LibDaolmpl {
 private static final List<User> userDb = new ArrayList<User>(); //用户表
 private static final List<Map<String,Object>> categorys =  new ArrayList<Map<String,Object>>(); //图书分类
 private static final List<Book> books = new ArrayList<Book>(); //图书表
 
 public static List<User> getUserdb() {
  return userDb;
 }
 public static List<Book> getBooks() {
  return books;
 }
 // 用户注册
 public void regist(User user) {
  // 判断用户是否存在,存在则存入到集合中
  if(isUserExist(user.getUsername()) == 1) {
   userDb.add(user);
  }
 }
 
 // 用户登录
 public int login(String username,String password) {
  
  return 0;
 }
 
 // 判断指定的用户名在存储用户信息的集合中是否存在
 public int isUserExist(String username) {
  // 遍历集合,若存在该用户,则返回-1,否则返回1
  for(User u : userDb) {
   if(u.getUsername().equals(username)) {
    return -1;
   }
  }
  return 1;
 }
 
 // 添加图书分类
 public String addBookCatgory(Long id,String catgoryName,String description) {
  Map<String,Object> map = new HashMap<String,Object>();
  map.put("id", id);
  map.put("catgoryName", catgoryName);
  map.put("description", description);
  for(Map m : categorys) {
   // 判断id是否存在
   if(m.get("id").equals(id)) {
    // 判断分类名称是否一样
    if(m.get("catgoryName").equals(catgoryName)) {
     return "添加失败";
    }
    return "添加失败"; 
   }
  }
  categorys.add(map);
  return "添加成功";
 }
 
 // 获取所有图书分类
 public List<Map<String,Object>> getAllBookCatgory(){
  return categorys;
 }
 
 // 添加图书
 public String addBook(Book book) {
  if(books != null) {
   for(Book b : books) {
    if(b.getBookId().equals(book.getBookId())) {
     return "添加图书失败";
    }
   }
   books.add(book);
   return "添加图书成功";
  }else {
   books.add(book);
   return "添加图书成功";
  }
 }
 
 // 根据条件查询书籍信息
 public List<Book> getBooksByCondition(String bookID,String bookName,String catgoryName){
  // 新建一个集合用于存放符合条件的图书
  List<Book> book = new ArrayList<Book>();
  for(Book b : books) {
   if(b.getBookId().equals(bookID)) { // 图书ID有且只有一个
    book.add(b);
    return book;
   }else if(b.getBookName().equals(bookName)) { // 图书名称可以有多个?这里设置为只能有一个
    book.add(b);
    return book;
   }else if(b.getCfName().equals(catgoryName)) { // 图书分类名称相同的可有多个
    book.add(b);
    continue;   // 若找到图书分类名称,结束该循环开始下一次
   }
  }
  return book;
  
 }
}

http://img1.sycdn.imooc.com//climg/5dde2c8f095a707e10100419.jpg

http://img1.sycdn.imooc.com//climg/5dde2cb8095a734f07540275.jpg

老师,在你的代码中能显示出来吗?可是我的确没有查询到。

  • 提问者 Levinson #1
    老师,我在FindBookServlet中打印我按照条件找的书籍是有的,但是转化成json之后,控制台打印出来的却是没有的。我觉得应该是转化成json的问题。
    2019-11-27 16:44:10
好帮手慕小班 2019-11-27 15:10:14

同学你好,1、Uncaught SyntaxError: Unexpected token ':' -->无效的语法,语法错误,意外的分号错误。

    复制运行贴出代码,在bookList.jsp中,发送ajax请求的代码中注意,url后是逗号,而不是分号,例如:

http://img1.sycdn.imooc.com//climg/5dde1f37092813d008760159.jpg

如上修改后,拼接到老师的项目中是可以正确查询的。

    2、同学可以清除eclipse中的项目缓存、chrome中的缓存,清除后再来重启项目,测试运行,例如:

http://img1.sycdn.imooc.com//climg/5dde211d094368b702430236.jpg

http://img1.sycdn.imooc.com//climg/5dde213e0900670d05300335.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

提问者 Levinson 2019-11-27 10:53:02
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    String basePath=request.getScheme()+"://"+request.getServerName()
                +":"+request.getServerPort()+request.getContextPath();
%>
<!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>
  <p>
   图书ID:<input type="text" name="bookID" id="bookID">
   图书名:<input type="text" name="bookName" id="bookName">
   分类:<input type="text" name="catgoryName" id="catgoryName">
   <input type="button" 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="${booksList }" var="c">
     <tr>
      <td>${c.bookId}</td>
      <td>${c.bookName }</td>
      <td>${c.cfName }</td>
      <td>${c.price }</td>
      <td>${c.describe }</td>
     </tr>
    </c:forEach>
   </tbody>
  </table>
 </center>
 <script type="text/javascript" src="<%=basePath %>/js/jquery-3.3.1.js"></script>
<script type="text/javascript">
 $("#search").click(function(){
  $.ajax({
  "url" : "/library_system/FindBookServlet";
  "type" : "get",
  "data" : {"bookID":$("#bookID").val() , "bookName":$("#bookName").val() , "catgoryName" : $("#catgoryName").val()},
  "dataType" : "json",
  "success" : function(json){
   var content = "";
   console.log(json);
   $("#cont>tr").remove();
   for(var i = 0 ; i < json.length; i++){
    content = content + 
    "<tr>" + 
     "<th>" + json[i].bookId + "</th>" + 
     "<th>" + json[i].bookName + "</th>" + 
     "<th>" + json[i].cfName + "</th>" + 
     "<th>" + json[i].price + "</th>" + 
     "<th>" + json[i].describe + "</th>" + 
    "</tr>";
   }
   $("#cont").html(content);
  },
  "error" : function(xmlhttp,errorText){
   if(xmlhttp.status == 405){
    alert("无效的请求方式");
   }else if(xmlhttp.status == 404){
    alert("未找到URL资源")
   }else if(xmlhttp.status == 500){
    alert("服务器内部错误")
   }else{
    alert("产生异常");
   }
  }
  })
 });
 
</script>
</body>
</html>
package com.imooc.servlet;
import java.io.IOException;
import java.util.ArrayList;
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;
import com.imooc.dao.Book;
import com.imooc.service.LibServicelmpl;
/**
 * Servlet implementation class FindBookServlet
 */
@WebServlet("/FindBookServlet")
public class FindBookServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FindBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String bookID = request.getParameter("bookID");
  String bookName = request.getParameter("bookName");
  String catgoryName = request.getParameter("catgoryName");
  // 集合用于接收符号条件的图书
  List<Book> list = new ArrayList<Book>();  
  LibServicelmpl lsl = new LibServicelmpl();
  // 根据条件查询书籍信息
  List<Book> books = lsl.getLibDaolmpl().getBooksByCondition(bookID, bookName, catgoryName);
  
  String json = JSON.toJSONString(list);
  System.out.println(json);
  response.setContentType("text/html;charset=utf-8");
  response.getWriter().println(json);
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }
}

老师,我不贴图片了,图片一直传不上去,问题还是跟之前的一样。我换了个3.3.1还是一样。console中的错误:showBooks.jsp:49 Uncaught SyntaxError: Unexpected token ;

然后url那边还是有×

好帮手慕小班 2019-11-26 19:18:38

同学你好,Uncaught SyntaxError: Unexpected token :表示没有正确的获取到这个dom元素,同学可能是如下问题导致这个错误:

        1、jquery文件的版本问题,同学可以更换另一个版本的文件,例如:

复制另一个jquery文件,重新引入

        http://img1.sycdn.imooc.com//climg/5ddd07cc0937433c01950040.jpg

        2、将单击事件放在页面底部,因为页面的加载是根据顺序来加载的,id为search的元素的在它加载完成后,再通过jq的id获取。

http://img1.sycdn.imooc.com//climg/5ddd08a509345f3005660273.jpg

        3、ajax的请求写法如下:

http://img1.sycdn.imooc.com//climg/5ddd08cf0935f59206920252.jpg

使用jq发送ajax不要使用$(function(){}.

如上修改后,同学如果还有问题,同学可以将自己修改后的代码贴出,便于老师根据同学的代码来调整错误。注意不要贴在回复中,会失去代码格式,可以将修改后的代码贴在"我要回答"中。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

好帮手慕小班 2019-11-26 17:51:26

同学你好,根据同学新贴出的报错内容,这个js文件没有找到,404就是没有找到对应路径下的资源。

http://img1.sycdn.imooc.com//climg/5ddcf4d909d6e82704880152.jpg

根据如上的报错信息,同学的项目名library_system与js文件夹之间缺少了一个斜杠,导致资源加载出现失误,同学可以添加上这个斜杠,再试一下,例如

http://img1.sycdn.imooc.com//climg/5ddcf59a09a16b2f08880053.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 Levinson #1
    老师。404错误没有了。但是那个showBooks.jsp:15 Uncaught SyntaxError: Unexpected token :还在
    2019-11-26 18:12:14
提问者 Levinson 2019-11-26 16:33:47

http://img1.sycdn.imooc.com//climg/5ddce355095d02ba18610930.jpg

按照老师的所给的修改代码,还是会出现问题

  • 提问者 Levinson #1
    老师,它console中的那些错误是为什么呀。为什么点击查询之后还是没有反应
    2019-11-26 16:35:05
好帮手慕小班 2019-11-26 16:06:37

同学你好,检查运行贴出代码,发送ajax请求,还有如下错误内容:

    1、jquery文件没有加载到,原因为在页面中添加了<base href="<%=basePath%>">,对应获取文件时,建议按照如下写法

http://img1.sycdn.imooc.com//climg/5ddcdc1e09e9a38408550103.jpg

如果不想按照这个写法,可以直接去掉base 的内容。

    2、查询按钮建议改为button,submit是提交按钮,默认会刷新页面,修改建议如下:

http://img1.sycdn.imooc.com//climg/5ddcdc8309eac8b207610138.jpg

        3、添加单击事件与发送ajax的请求写法如下:

http://img1.sycdn.imooc.com//climg/5ddce31a098d133e04720075.jpg

        4、在添加之前,建议删掉#cont中tr的内容,而不是#cont中的内容,例如:

http://img1.sycdn.imooc.com//climg/5ddcdcd909fc030c03050091.jpg

运行代码,找到如上问题,如果还有问题,建议同学将自己的具体报错信息描述一下。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

提问者 Levinson 2019-11-26 14:29:58
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    String basePath=request.getScheme()+"://"+request.getServerName()
                +":"+request.getServerPort()+request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图书查询</title>
</head>
<script type="text/javascript" src="js/jquery-3.4.1.js"></script>
<script type="text/javascript">
 $("#search").on(click,function(){
  $(function(){
   "url" : "/library_system/FindBookServlet",
   "type" : "get",
   "data" : {"bookID":$("#bookID").val() , "bookName":$("#bookName").val() , "catgoryName" : $("#catgoryName").val()},
   "dataType" : "json",
   "success" : function(json){
    console.log(json);
    $("#cont").remove();
    for(var i = 0 ; i < json.length; i++){
     $("#cont").append(
      "<tr>" + 
       "<th>" + json[i].bookId + "</th>" + 
       "<th>" + json[i].bookName + "</th>" + 
       "<th>" + json[i].cfName + "</th>" + 
       "<th>" + json[i].price + "</th>" + 
       "<th>" + json[i].describe + "</th>" + 
      "</tr>");
    }
   },
   "error" : function(xmlhttp,errorText){
    if(xmlhttp.status == 405){
     alert("无效的请求方式");
    }else if(xmlhttp.status == 404){
     alert("未找到URL资源")
    }else if(xmlhttp.status == 500){
     alert("服务器内部错误")
    }else{
     alert("产生异常");
    }
   }
  });
 });
 
</script>
<body>
 <center>
  <h1>图书查询</h1>
  <p>
   图书ID:<input type="text" name="bookID" id="bookID">
   图书名:<input type="text" name="bookName" id="bookName">
   分类:<input type="text" name="catgoryName" id="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="${booksList }" var="c">
     <tr>
      <td>${c.bookId}</td>
      <td>${c.bookName }</td>
      <td>${c.cfName }</td>
      <td>${c.price }</td>
      <td>${c.describe }</td>
     </tr>
    </c:forEach>
   </tbody>
  </table>
 </center>
 
</body>
</html>
package com.imooc.servlet;
import java.io.IOException;
import java.util.ArrayList;
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;
import com.imooc.dao.Book;
import com.imooc.service.LibServicelmpl;
/**
 * Servlet implementation class FindBookServlet
 */
@WebServlet("/FindBookServlet")
public class FindBookServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FindBookServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String bookID = request.getParameter("bookID");
  String bookName = request.getParameter("bookName");
  String catgoryName = request.getParameter("catgoryName");
  // 集合用于接收符号条件的图书
  List<Book> list = new ArrayList<Book>();  
  LibServicelmpl lsl = new LibServicelmpl();
  // 根据条件查询书籍信息
  List<Book> books = lsl.getLibDaolmpl().getBooksByCondition(bookID, bookName, catgoryName);
  
  String json = JSON.toJSONString(list);
  System.out.println(json);
  response.setContentType("text/html;charset=utf-8");
  response.getWriter().println(json);
 }
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  doGet(request, response);
 }
}
package com.imooc.dao;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LibDaolmpl {
 private static final List<User> userDb = new ArrayList<User>(); //用户表
 private static final List<Map<String,Object>> categorys =  new ArrayList<Map<String,Object>>(); //图书分类
 private static final List<Book> books = new ArrayList<Book>(); //图书表
 
 public static List<User> getUserdb() {
  return userDb;
 }
 public static List<Book> getBooks() {
  return books;
 }
 // 用户注册
 public void regist(User user) {
  // 判断用户是否存在,存在则存入到集合中
  if(isUserExist(user.getUsername()) == 1) {
   userDb.add(user);
  }
 }
 
 // 用户登录
 public int login(String username,String password) {
  
  return 0;
 }
 
 // 判断指定的用户名在存储用户信息的集合中是否存在
 public int isUserExist(String username) {
  // 遍历集合,若存在该用户,则返回-1,否则返回1
  for(User u : userDb) {
   if(u.getUsername().equals(username)) {
    return -1;
   }
  }
  return 1;
 }
 
 // 添加图书分类
 public String addBookCatgory(Long id,String catgoryName,String description) {
  Map<String,Object> map = new HashMap<String,Object>();
  map.put("id", id);
  map.put("catgoryName", catgoryName);
  map.put("description", description);
  for(Map m : categorys) {
   // 判断id是否存在
   if(m.get("id").equals(id)) {
    // 判断分类名称是否一样
    if(m.get("catgoryName").equals(catgoryName)) {
     return "添加失败";
    }
    return "添加失败"; 
   }
  }
  categorys.add(map);
  return "添加成功";
 }
 
 // 获取所有图书分类
 public List<Map<String,Object>> getAllBookCatgory(){
  return categorys;
 }
 
 // 添加图书
 public String addBook(Book book) {
  if(books != null) {
   for(Book b : books) {
    if(b.getBookId().equals(book.getBookId())) {
     return "添加图书失败";
    }
   }
   books.add(book);
   return "添加图书成功";
  }else {
   books.add(book);
   return "添加图书成功";
  }
 }
 
 // 根据条件查询书籍信息
 public List<Book> getBooksByCondition(String bookID,String bookName,String catgoryName){
  // 新建一个集合用于存放符合条件的图书
  List<Book> book = new ArrayList<Book>();
  for(Book b : books) {
   if(b.getBookId().equals(bookID)) { // 图书ID有且只有一个
    book.add(b);
    return book;
   }else if(b.getBookName().equals(bookName)) { // 图书名称可以有多个?这里设置为只能有一个
    book.add(b);
    return book;
   }else if(b.getCfName().equals(catgoryName)) { // 图书分类名称相同的可有多个
    book.add(b);
    continue;   // 若找到图书分类名称,结束该循环开始下一次
   }
  }
  return book;
  
 }
}

老师,我把代码改了一下,去掉了那个新建的页面。但是还是出现了错误。

http://img1.sycdn.imooc.com//climg/5ddcc66309f9068b18770994.jpg

提问者 Levinson 2019-11-26 14:13:46

老师,好像是我点击的查询是showBook.jsp的查询而不是新建的,所以才没有反应?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师