项目问题?
来源:5-3 项目作业
tttjh_
2021-03-27 19:24:26
1、如下是我文件结构及代码,为什么需要登录两次才能进入bookList页面呢?有时候bookLIst页面的css样式又会丢失,重启下浏览器或者是清除下内存,然后有时候可以有时候不可以。
2、在我第一次登录后,调试时,报了这个异常。
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>
</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回答
1、)这里登录的实现思路有问题,登录与图书建议分开来写,添加关于登录的controller类,在AuthFilter中对路径进行放行,并判断用户是否登录,在login.jsp中应跳转至图书管理,注:这里同学可参考任务描述中的思路分析
2)关于css样式丢失的问题,这里并没有复现,猜测是缓存问题
2、测试上述代码,复现问题,如下:
这个报错的意思是在重定向或者转发后,又进行了重定向或转发,就会抛出这个异常。
同学可以在重定向或跳转后跳出方法,使其不再执行后边的方法试试。
3、是的,这里不需要Dao层
祝学习愉快~
tttjh_
提问者
2021-03-27
3、以及这个项目虽然我还没做完,不过我大概了解之后,好像没有需要用Dao这样的数据访问对象去设置类吧,还是说我步骤少了,我都是xmlDataSource去访问xml文件,然后就是service去访问xmldatasource了,,
相似问题