急急急,关于新建图书分类类在jsp页面不显示问题

急急急,关于新建图书分类类在jsp页面不显示问题

-categoryList.jsp

1
<%@ page language="java" contentType="text/html; charset=UTF-8"<br>  pageEncoding="UTF-8"%><br><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><br><!DOCTYPE html><br><html><br><head><br><meta charset="UTF-8"><br><title>图书后台管理</title><br><link rel="stylesheet" href="css/index.css"><br><link rel="stylesheet" href="css/bootstrap.min.css"><br></head><br><br><body><br>   <header><br>      <div class="container"><br>           <nav><br>             <a href="bookList.html">图书信息管理</a><br>          </nav><br>            <nav><br>             <a href="categoryList.html">分类管理</a><br>            </nav><br><br>        </div><br>    </header><br> <section class="banner"><br>      <div class="container"><br>           <div><br>             <h1>图书管理系统</h1><br>             <p>图书分类管理</p><br>           </div><br>        </div><br>    </section><br>    <section class="main"><br>        <div class="container"><br>           <table class="table table-striped"><br>               <thead><br>                   <tr><br>                      <th>序号</th><br>                     <th>分类编号</th><br>                       <th>分类名称</th><br>                       <th>操作</th><br>                 </tr><br>             </thead><br>              <tbody><br>                   <c:forEach items="${applicationScope.categoryDb }" var="ctg" varStatus="idx"><br>                     <tr><br>                          <td>${idx.index+1 }</td><br>                            <td>${ctg.categoryId }</td><br>                         <td>${ctg.categoryName }</td><br>                           <td><a href="/deleteCategory?categoryId=ca0001">删除</a></td><br>                         <!--在循环显示数据时,此处的ca0001可以用EL表达式进行替换--><br><br>                     </tr><br>                 </c:forEach><br>              </tbody><br>          </table><br>      </div><br>    </section><br>    <section class="page"><br>        <div class="container"><br>           <div id="fatie"><br>              <a href="addCategory.jsp"><button>新建</button></a><br>           </div><br>        </div><br>    </section><br>    <footer> copy@慕课网 </footer><br></body><br></html><br>

-addCategory.jsp

1
<%@ page language="java" contentType="text/html; charset=UTF-8"<br>  pageEncoding="UTF-8"%><br><!DOCTYPE html><br><html><br><head><br><meta charset="UTF-8"><br><title>新建图书分类</title><br><link rel="stylesheet" href="css/bootstrap.min.css"><br><link rel="stylesheet" href="css/add.css"><br></head><br><body><br>  <nav class="navbar navbar-default"><br>       <div class="container"><br>           <div class="navbar-header"><br>               <a class="navbar-brand" href=""> 图书分类管理 </a><br>            </div><br>        </div><br>    </nav><br>    <div class="container"><br>       <div class="jumbotron"><br>           <h1>Hello, XXX!</h1><br>            <p>请小心地新增图书分类,要是建了一个错误的就不好了。。。</p><br>      </div><br>        <div class="page-header"><br>         <h3><br>              <small>新建</small><br>           </h3><br>     </div><br>        <form class="form-horizontal"<br>            action="${pageContext.request.contextPath }/AddCategoryServlet"<br>         method="post"><br>           <div class="form-group"><br>              <label for="categoryId" class="col-sm-2 control-label">分类ID<br>                   :</label><br>             <div class="col-sm-8"><br>                    <input name="categoryId" class="form-control" id="categoryId"><br>                </div><br>            </div><br>            <div class="form-group"><br>              <label for="categoryName" class="col-sm-2 control-label">分类名称<br>                 :</label><br>             <div class="col-sm-8"><br>                    <input name="categoryName" class="form-control" id="categoryName"><br>                </div><br>            </div><br><br>            <div class="form-group"><br>              <div class="col-sm-offset-2 col-sm-10"><br>                   <button type="submit" class="btn btn-primary">保存</button><br>                   <p>${ msg}</p><br>                  &nbsp;&nbsp;&nbsp;<br>              </div><br>            </div><br>        </form><br>   </div><br>    <footer class="text-center"> copy@imooc </footer><br></body><br></html><br>

-InitServletContextListener

1
package com.imooc.web.listener;<br><br>import java.util.ArrayList;<br>import java.util.List;<br><br>import javax.servlet.ServletContext;<br>import javax.servlet.ServletContextEvent;<br>import javax.servlet.ServletContextListener;<br><br>import com.imooc.domain.Category;<br>import com.imooc.domain.User;<br><br>public class InitServletContextListener implements ServletContextListener {<br><br>  public InitServletContextListener() {<br>   }<br><br>   // 销毁<br>   public void contextDestroyed(ServletContextEvent sce) {<br> }<br><br>   // 初始化用户和图书分类类<br>  public void contextInitialized(ServletContextEvent sce) {<br>       ServletContext context = sce.getServletContext();<br>       // 创建一个用于保存用户信息的List集合<br>      List<User> userList = new ArrayList<User>();<br>        // 将List集合存入到ServletContext域中<br>       userList.add(new User("aaa", "123456"));<br>        userList.add(new User("bbb", "234567"));<br>        userList.add(new User("ccc", "345678"));<br>        context.setAttribute("userList", userList);<br>     if (context.getAttribute("cateogryDb") == null) {<br>           List<Category> ctgList = new ArrayList<Category>();<br>         ctgList.add(new Category("ca0001", "计算机类"));<br>            context.setAttribute("categoryDb", ctgList);<br>        }<br>   }<br>}<br>

-接口

1
package com.imooc.service;<br><br>import java.util.ArrayList;<br><br>import java.util.List;<br><br>import com.imooc.domain.Category;<br>//负责简洁清晰的展示接口中必要的方法和属性<br>public interface CategoryService {<br>    public static final List<Category> categoryDb =new ArrayList<Category>();<br><br>   public void addCategory(String categoryId, String categoryName);<br><br>    public void deleteCatgory(String categoryId);<br><br>}<br>

-实现类

1
package com.imooc.service.impl;<br><br>import java.util.ArrayList;<br>import java.util.List;<br><br>import com.imooc.domain.Category;<br>import com.imooc.service.CategoryService;<br>//用来实现接口中属性和方法的实现类<br>public class CategoryServiceImpl implements CategoryService {<br><br>   private static final List<Category> categoryDb = new ArrayList<Category>();<br><br> public static List<Category> getCategoryDb() {<br>        return categoryDb;<br>  }<br><br>   //纯添加,判断在servlet里进行<br> @Override<br>   public void addCategory(String categoryId, String categoryName) {<br>       Category category = new Category(categoryId, categoryName);<br>     categoryDb.add(category);<br>   }<br><br>   @Override<br>   public void deleteCatgory(String categoryId) {<br>      Category categoryExist = null;<br>      for (Category c : categoryDb) {<br>         if (categoryId.equals(c.getCategoryId())) {<br>             categoryExist = c;<br>          }<br>       }<br>   }<br>}<br>

-AddCategoryServlet

1
package com.imooc.web.servlet;<br><br>import java.io.IOException;<br>import java.util.List;<br><br>import javax.servlet.ServletException;<br>import javax.servlet.annotation.WebServlet;<br>import javax.servlet.http.HttpServlet;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>import com.imooc.domain.Category;<br>import com.imooc.service.CategoryService;<br>import com.imooc.service.impl.CategoryServiceImpl;<br><br>@WebServlet("/AddCategoryServlet")<br>public class AddCategoryServlet extends HttpServlet {<br>    private static final long serialVersionUID = 1L;<br><br>    public AddCategoryServlet() {<br>       super();<br>    }<br><br>   protected void doGet(HttpServletRequest request, HttpServletResponse response)<br>          throws ServletException, IOException {<br>      // 接受数据<br>     String categoryId = request.getParameter("categoryId");<br>     String categoryName = request.getParameter("categoryName");<br>     // 在这里判断输入的是否为空(根据id)<br>       if (categoryId.isEmpty() && categoryName.isEmpty()) {<br>           request.setAttribute("msg", "id及名称为空!");<br>            request.getRequestDispatcher("/addCategory.jsp").forward(request, response);<br>        } else {<br>            // 封装数据<br>         Category ctg = new Category(categoryId, categoryName);<br>          CategoryService ctgService = new CategoryServiceImpl();// 接口引用指向具体的实现类,多态的体现<br>            // 处理数据<br>         // 在这里判断一下列表里是否已经有id重名的情况再存进去<br>           List<Category> list = CategoryServiceImpl.getCategoryDb();<br>            for (Category cExist : list) {<br>              if (cExist.getCategoryId().equals(ctg.getCategoryId())<br>                      && cExist.getCategoryName().equals(ctg.getCategoryName())) {<br>                    request.setAttribute("msg", "该分类已存在!");<br>                 request.getRequestDispatcher("/addCategory.jsp").forward(request, response);<br>                    return;<br>             } else {<br>                    ctgService.addCategory(categoryId, categoryName);<br>                   request.getServletContext().setAttribute("categoryDb", CategoryServiceImpl.getCategoryDb());<br>                }<br>           }<br>       }<br>       // 交给jsp展示数据<br>        request.getRequestDispatcher("/categoryList.jsp").forward(request, response);<br>   }<br><br>   protected void doPost(HttpServletRequest request, HttpServletResponse response)<br>         throws ServletException, IOException {<br>      doGet(request, response);<br>   }<br><br>}<br>

老师请问

1、为什么我新建图书分类在jsp页面不显示,点击前后如图。自己已经找到了一些问题了,比如因为监听器初始化不显示设置在了全局域中,应该从ServletContext域中获取

1
request.getServletContext().setAttribute("categoryDb", CategoryServiceImpl.getCategoryDb());<br>

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

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

2、初始化放在监听器中可以吗,有没有更好的方法

3、怎么可以把判断放在实现类中,我看了老师其他答案在void add方法中返回boolean变量,但在AddServlet中怎么获取这个变量啊

4、关于msg,我判断为空的提示正常输出显示,但重名已存在的msg怎么不显示啊

正在回答

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

7回答

同学你好,老师是将同学的Servlet拼接到自己的项目中,让代码能跑起来,现在测试同学的代码有前面提出的三个问题,同学使用如下修改后的代码再来试试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.imooc.web.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.imooc.domain.Category;
import com.imooc.service.CategoryService;
import com.imooc.service.impl.CategoryServiceImpl;
 
@WebServlet("/AddCategoryServlet")
public class AddCategoryServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
 
    public AddCategoryServlet() {
        super();
    }
 
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // 接受数据
        String categoryId = request.getParameter("categoryId");
        String categoryName = request.getParameter("categoryName");
        // 在这里判断输入的是否为空(根据id)
        if (categoryId.isEmpty() && categoryName.isEmpty()) {
            request.setAttribute("msg""id及名称为空!");
            request.getRequestDispatcher("/addCategory.jsp").forward(request, response);
        else {
            // 封装数据
            Category ctg = new Category(categoryId, categoryName);
            CategoryService ctgService = new CategoryServiceImpl();// 接口引用指向具体的实现类,多态的体现
            // 处理数据
            // 在这里判断一下列表里是否已经有id重名的情况再存进去
            List<Category> list = CategoryServiceImpl.getCategoryDb();
            boolean flag = false;
            for (Category cExist : list) {
                if (cExist.getCategoryId().equals(ctg.getCategoryId())
                        && cExist.getCategoryName().equals(ctg.getCategoryName())) {
                    flag = true;
                    System.out.println("存在相同的");
                    return;
                else {
                    flag = false;
                    System.out.println("没有相同的");
                    //return;  //这里else不需要再次return
                }
            }
            //if (flag = false) {  //flag判断要使用==
            if (flag == false) {
                ctgService.addCategory(categoryId, categoryName);
                request.getServletContext().setAttribute("categoryDb", CategoryServiceImpl.getCategoryDb());
                System.out.println("添加成功");
                request.getRequestDispatcher("/categoryList.jsp").forward(request, response);
            else {
                System.out.println("存在相同的没有添加");
                request.setAttribute("msg""该分类已存在!");
                request.getRequestDispatcher("/addCategory.jsp").forward(request, response);
            }
        }
        // 交给jsp展示数据 //if-else条件语句执行完后不需要再次执行跳转语句
        //request.getRequestDispatcher("/categoryList.jsp").forward(request, response);
    }
 
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
 
}

如上所示就是修改后的代码,同学再来测试运行一下。

好帮手慕小班 2020-11-23 10:38:12

同学你好,测试拼接同学贴出的代码有如下问题:

    ​1、提交响应后无法转发。

因为同学在if--else的条件语句中已经存在转发,在if的条件外面又进行了转发,导致出现这个问题,建议同学直接在if条件中书写对应的跳转,比如:

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

    ​2、在判断列表里是否已经有id重名的情况时,不要在else中写return语句,return表示返回不再继续执行。

这样书写条件语句有问题,比如: 当传入的分类属性与集合中的第一个对象不一样,它直接判断完成后直接跳出,最后得到的结果就是列表里没有重名的id,但是它只比较了集合中的第一个对象。

修改建议如下:


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

    ​3、注意判断是"==",赋值是"=",在最后的判断语句中,注意是==,

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

因为是拼接同学的代码,可能某些方法名或属性与同学的不一样,同学理解意思就好。如上所示的问题修改后再来试试。

  • 提问者 孫瑪戈 #1
    不是,是我少贴了哪一段代码老师要告诉我啊,怎么问了这么久还要拼接代码呢??
    2020-11-23 15:21:07
提问者 孫瑪戈 2020-11-23 06:52:27
1
package com.imooc.web.servlet;<br><br>import java.io.IOException;<br>import java.util.List;<br><br>import javax.servlet.ServletException;<br>import javax.servlet.annotation.WebServlet;<br>import javax.servlet.http.HttpServlet;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>import com.imooc.domain.Category;<br>import com.imooc.service.CategoryService;<br>import com.imooc.service.impl.CategoryServiceImpl;<br><br>@WebServlet("/AddCategoryServlet")<br>public class AddCategoryServlet extends HttpServlet {<br>    private static final long serialVersionUID = 1L;<br><br>    public AddCategoryServlet() {<br>       super();<br>    }<br><br>   protected void doGet(HttpServletRequest request, HttpServletResponse response)<br>          throws ServletException, IOException {<br>      // 接受数据<br>     String categoryId = request.getParameter("categoryId");<br>     String categoryName = request.getParameter("categoryName");<br>     // 在这里判断输入的是否为空(根据id)<br>       if (categoryId.isEmpty() && categoryName.isEmpty()) {<br>           request.setAttribute("msg", "id及名称为空!");<br>            request.getRequestDispatcher("/addCategory.jsp").forward(request, response);<br>        } else {<br>            // 封装数据<br>         Category ctg = new Category(categoryId, categoryName);<br>          CategoryService ctgService = new CategoryServiceImpl();// 接口引用指向具体的实现类,多态的体现<br>            // 处理数据<br>         // 在这里判断一下列表里是否已经有id重名的情况再存进去<br>           List<Category> list = CategoryServiceImpl.getCategoryDb();<br>            boolean flag = false;<br>           for (Category cExist : list) {<br>              if (cExist.getCategoryId().equals(ctg.getCategoryId())<br>                      && cExist.getCategoryName().equals(ctg.getCategoryName())) {<br>                    flag = true;<br>                    System.out.println("存在相同的");<br>                    return;<br>             } else {<br>                    flag = false;<br>                   System.out.println("没有相同的");<br>                    return;<br>             }<br>           }<br>           if (flag = false) {<br>             ctgService.addCategory(categoryId, categoryName);<br>               request.getServletContext().setAttribute("categoryDb", CategoryServiceImpl.getCategoryDb());<br>                System.out.println("添加成功");<br>         } else {<br>                System.out.println("存在相同的没有添加");<br>                request.setAttribute("msg", "该分类已存在!");<br>             request.getRequestDispatcher("/addCategory.jsp").forward(request, response);<br>            }<br>       }<br>       // 交给jsp展示数据<br>        request.getRequestDispatcher("/categoryList.jsp").forward(request, response);<br>   }<br><br>   protected void doPost(HttpServletRequest request, HttpServletResponse response)<br>         throws ServletException, IOException {<br>      doGet(request, response);<br>   }<br><br>}<br>

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

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

唉,还是不行啊老师

  • 提问者 孫瑪戈 #1
    卡住做不下去4天了,都开始怀疑自己
    2020-11-23 06:53:56
好帮手慕阿满 2020-11-21 18:26:15

同学你好,这里没有输出表示分类没有添加成功。如下代码建议修改一下再试试,

建议在循环定义变量flag为false,在循环中只判断分类是否存在,如果存在则将flag赋值为ture。

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

在循环外判断flag,如果为true,则不添加,返回到添加分类页面,否则添加分类。

祝学习愉快!

提问者 孫瑪戈 2020-11-21 06:25:10

不行啊老师,我试过了在两个地方都输出一下但控制台没有输出,http://img1.sycdn.imooc.com//climg/5fb841fa0907508322311079.jpghttp://img1.sycdn.imooc.com//climg/5fb842060979c42912670364.jpg​,还是在jsp页面显示不出来

好帮手慕阿满 2020-11-20 15:40:21

同学你好,建议同学在转发前,使用for循环输出一下CategoryServletImpl.getCategoryDB()获取的数据,查看是否有获取到新添加的分类,如果有,是前台展示的问题,如果没有,则是后台添加的问题,

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

另外同学可以在如下addCategory()方法天后,输出一下CategoryDb,查看是否有添加到categoryDb中。

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

祝学习愉快!

好帮手慕阿满 2020-11-20 14:37:23

同学你好

1、在添加分类时,报了500异常,如:

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

建议同学将具体的报错信息贴一下。

2、初始化放在监听器中即可,在项目启动时加载监听器进行初始化。

3、如果add方法是void,不能返回boolean类型值,或者可以将void改为boolean,在servlet中接收返回值。

4、同学可以打断点,使用debug运行,查看是否有执行到判断重名的位置处。

祝学习愉快!

  • 提问者 孫瑪戈 #1
    第一张图截错了在第二张图。新建图书分类还是不能再jsp页面显示,是成功运行的
    2020-11-20 14:47:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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