项目问题?

来源:5-3 项目作业

tttjh_

2021-03-27 19:24:26

1、如下是我文件结构及代码,为什么需要登录两次才能进入bookList页面呢?有时候bookLIst页面的css样式又会丢失,重启下浏览器或者是清除下内存,然后有时候可以有时候不可以。

2、在我第一次登录后,调试时,报了这个异常。

http://img.mukewang.com/climg/605f15b709689d2021601440.jpg

package com.imooc.library.controller;

import com.imooc.library.entity.User;
import com.imooc.library.service.UserServiceImpl;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

/**
* @author Comet
*/
@WebServlet("/management")
public class ManagementController extends HttpServlet {
@Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

@Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
       String password = request.getParameter("password");
       User user = new User(username, password);
       ServletContext servletContext = request.getServletContext();
       List<User> userList = (List<User>) servletContext.getAttribute("userList");
       UserServiceImpl userService = new UserServiceImpl();
       if (userService.login(userList, user) == 1) {
request.getSession().setAttribute("user", user);
           request.getRequestDispatcher("/WEB-INF/jsp/bookList.jsp").forward(request, response);
       } else {
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
       }
}
}



<%@page language="java" contentType="text/html;charset=utf-8" %>
<!DOCTYPE html>
<html>
   <head>
       <meta charset="UTF-8">
       <title>图书后台管理</title>
       <link rel="stylesheet" href="/css/index.css">
       <link rel="stylesheet" href="/css/bootstrap.min.css">
     
   </head>

   <body>
      <header>
           <div class="container">
                   <nav>
                           <a href="bookList.jsp" >图书信息管理</a>
                   </nav>
                   <nav>
                           <a href="categoryList.html" >分类管理</a>
                   </nav>
                 
           </div>
       </header>
       <section class="banner">
           <div class="container">
               <div>
                   <h1>图书管理系统</h1>
                   <p>图书信息管理</p>
               </div>
           </div>
       </section>
       <section class="main">


           <div class="container">
               <form class="form-horizontal" action="/searchBook" method="post">
               <div class="form-group"  style="float: right;">
                   <div class="col-sm-offset-2 col-sm-10">
                       <button type="submit" class="btn btn-primary">查询</button>&nbsp;&nbsp;&nbsp;
                   </div>
               </div>
               <div class="form-group" style="float: right;width: 300px;">
                   <div class="col-sm-8">
                       <input name="searchContent" class="form-control" id="searchContent"
                       placeholder="输入要查询的分类" style="width: 250px">
                   </div>
               </div>

               
           </form>
           </div>
           <div class="container">

               <table class="table table-striped">
                   <thead>
                   <tr>
                       <th>序号</th>
                       <th>图书编号</th>
                       <th>图书名称</th>
                       <th>分类</th>
                       <th>价格</th>
                       <th>图书封面</th>
                       <th>操作</th>

                   </tr>
                   </thead>
                   <tbody>
                       <c:forEach items="" var="">
<tr id="tr1">
                               <td>1</td>
                               <td>book0001</td>
                               <td>Java基础</td>
                               <td>计算机类</td>
                               <td>29</td>
                               <td><img src="img/g1.jpg"></td>
                               <td>
                               <a href="/updateBook?bookId=book0001">修改</a>
                               <a href="/deleteBook?bookId=book0001">删除</a>

                               </td>
                               <!--在循环显示数据时,此处的book0001可以用EL表达式进行替换-->

                           </tr>
                       </c:forEach>
</tbody>
               </table>
           </div>
       </section>
       <section class="page">
           <div class="container">
               <div id="fatie">
                   <a href="addBook.html"><button>新建</button></a>
               </div>
           </div>
       </section>
       <footer>
           copy@慕课网
       </footer>
   </body>
</html>
package com.imooc.library.service;

import com.imooc.library.entity.User;

import java.util.List;

/**
* @author Comet
*/

public class UserServiceImpl {

/**
    * 验证登录信息
    * @param userList 用户信息集合
    * @param user 登录的用户
    * @return 用户账号密码匹配成功则返回1,否则返回0
    */
   public int login(List<User> userList, User user) {
if (user.getUserName() == null || user.getUserName().equals("")){
return 0;
       }
if (user.getUserPassword() == null || user.getUserPassword().equals("")) {
return 0;
       }
for (User user1 : userList) {
if (user.getUserName().equals(user1.getUserName()) && user.getUserPassword().equals(user1.getUserPassword())) {

return 1;
           }
}
return 0;
   }
}
package com.imooc.library.entity;



/**
* @author Comet
*/
public class User{
private String userName;
   private String userPassword;

   public User() {}

public User(String userName, String userPassword) {
this.userName = userName;
       this.userPassword = userPassword;
   }

public String getUserName() {
return userName;
   }

public void setUserName(String userName) {
this.userName = userName;
   }

public String getUserPassword() {
return userPassword;
   }

public void setUserPassword(String userPassword) {
this.userPassword = userPassword;
   }

@Override
   public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userPassword='" + userPassword + '\'' +
'}';
   }
}
<?xml version="1.0" encoding="UTF-8"?>
<root>
   <user id = "1">
       <userName>admin</userName>
       <userPassword>123456</userPassword>
   </user>
   <user id = "2">
       <userName>test</userName>
       <userPassword>test</userPassword>
   </user>
   <user id = "3">
       <userName>123</userName>
       <userPassword>123</userPassword>
   </user>
</root>
package com.imooc.library.utils;

import com.imooc.library.entity.User;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @author Comet
*/
@WebFilter(filterName = "AuthFilter", urlPatterns = "/*")
public class AuthFilter implements Filter {

@Override
   public void init(FilterConfig config) throws ServletException {
}

@Override
   public void destroy() {
}

@Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
       HttpServletResponse res = (HttpServletResponse) response;
       String uri = req.getRequestURI();
       String[] strUri = {".jpg", ".png", ".css", ".html", "login"};
       boolean flag = false;
       for (String s : strUri) {
if (uri.contains(s)) {
flag = true;
//                chain.doFilter(request, response);
               break;
           }
}
if (!flag) {
User user = (User) req.getSession().getAttribute("user");
           if (user != null) {
//                System.out.println("userName为:" + user.getUserName());
               chain.doFilter(req, res);
           } else {
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(req, res);
           }
}
chain.doFilter(req, res);
   }
}

package com.imooc.library.utils;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @author Comet
*/

public class EncodeFilter implements Filter {

@Override
   public void init(FilterConfig config) throws ServletException {
}

@Override
   public void destroy() {
}

@Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
       req.setCharacterEncoding("utf-8");
       HttpServletResponse res = (HttpServletResponse) response;
       res.setCharacterEncoding("utf-8");
//        response.setContentType("text/html;charset=utf-8");
       chain.doFilter(request, response);
   }
}
package com.imooc.library.utils;

import com.imooc.library.entity.User;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.util.List;

/**
* @author Comet
*/
@WebListener
public class InitListener implements ServletContextListener {


@Override
   public void contextInitialized(ServletContextEvent sce) {
/* This method is called when the servlet context is initialized(when the Web application is deployed). */
       List<User> userList = XmlDataSource.getUsersData();
       ServletContext servletContext = sce.getServletContext();
       servletContext.setAttribute("userList", userList);

   }

@Override
   public void contextDestroyed(ServletContextEvent sce) {
/* This method is called when the servlet Context is undeployed or Application Server shuts down. */
   }

}
package com.imooc.library.utils;

import com.imooc.library.entity.User;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

/**
* @author Comet
*/
public class XmlDataSource {
private static List<User> usersData = new ArrayList<>();
   private static String userDataFile;

   static {
userDataFile = XmlDataSource.class.getResource("/user.xml").getPath();
   }

/**
    * 加载用户信息
    */
   private static void reloadUser() {
//        URLDecoder decoder = new URLDecoder();
       try {
URLDecoder.decode(userDataFile, "UTF-8");
           System.out.println(userDataFile);
       } catch (UnsupportedEncodingException e) {
e.printStackTrace();
       }
SAXReader reader = new SAXReader();
       try {
Document document = reader.read(userDataFile);
           List<Node> nodes = document.selectNodes("/root/user");
           for (Node node : nodes) {
Element element = (Element) node;
               String username = element.elementText("userName");
               String userPassword = element.elementText("userPassword");
               User user = new User(username, userPassword);
               usersData.add(user);
           }

} catch (DocumentException e) {
e.printStackTrace();
       }
}

static {
reloadUser();
   }

/**
    * @return 返回用于信息list集合
    */
   public static List<User> getUsersData() {
return usersData;
   }
}
<%@ page contentType="text/html; charset=utf-8" language="java" %>
<!DOCTYPE html>
<html>
   <head>
       <meta charset="UTF-8">
       <title>登录</title>
       <link rel="stylesheet" href="/css/login.css">
   </head>
   <body>
       <div class="login">
           <div class="header">
               <h1>
                   <a href="/login.do">登录</a>
               </h1>
               <button></button>
           </div>
           <form action="/management" method="post">
               <div class="name">
                   <input  type="text" id="name" name="username">
                   <p></p>
               </div>
               <div class="pwd">
                   <input type="password" id="pwd" name="password">
                   <p></p>
               </div>
             
               <div class="btn-red">
                   <input type="submit" value="登录" id="login-btn">
               </div>
           </form>
       </div>
   </body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
        version="4.0">
   <!--<filter>
       <filter-name>authFilter</filter-name>
       <filter-class>com.imooc.library.utils.AuthFilter</filter-class>
   </filter>
   <filter-mapping>
       <filter-name>authFilter</filter-name>
       <url-pattern>/login/*</url-pattern>
   </filter-mapping>-->

   <filter>
       <filter-name>encode</filter-name>
       <filter-class>com.imooc.library.utils.EncodeFilter</filter-class>
   </filter>
   <filter-mapping>
       <filter-name>encode</filter-name>
       <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>


写回答

2回答

好帮手慕小脸

2021-03-28

1、)这里登录的实现思路有问题,登录与图书建议分开来写,添加关于登录的controller类,在AuthFilter中对路径进行放行,并判断用户是否登录,在login.jsp中应跳转至图书管理,注:这里同学可参考任务描述中的思路分析

2)关于css样式丢失的问题,这里并没有复现,猜测是缓存问题

2、测试上述代码,复现问题,如下:

http://img.mukewang.com/climg/605fec2209dd7b6b10340115.jpg

这个报错的意思是在重定向或者转发后,又进行了重定向或转发,就会抛出这个异常。

同学可以在重定向或跳转后跳出方法,使其不再执行后边的方法试试。

http://img.mukewang.com/climg/605ffd3b09ba3a8709540302.jpg

3、是的,这里不需要Dao层

祝学习愉快~

0
httjh_
hp>如果加上return,会一直在登录界面,输入几次账号密码都不会进行跳转了。。

h021-03-28
共1条回复

tttjh_

提问者

2021-03-27

3、以及这个项目虽然我还没做完,不过我大概了解之后,好像没有需要用Dao这样的数据访问对象去设置类吧,还是说我步骤少了,我都是xmlDataSource去访问xml文件,然后就是service去访问xmldatasource了,,

0

0 学习 · 16556 问题

查看课程