老师 新增油画后会出现登录拦截!

老师 新增油画后会出现登录拦截!

# 具体遇到的问题
老师!如果不进行新增操作!随意按各种跳转页面不会出现登录拦截!但新增功能会出现!但也不是一定会出现!一时可以新增一时拦截了不能新增!是新增代码出了问题吗?老师帮我看看!
# 报错信息的截图

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

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


# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

在这里输入代码,可通过选择【代码语言】突出显示

package com.imooc.library.controller;

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.library.entity.User;
import com.imooc.library.service.UserServiceImpl;

/**
* Servlet implementation class LoginController
*/
@WebServlet("/login.do")
public class LoginController extends HttpServlet {
private UserServiceImpl userService = new UserServiceImpl();

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");// jsp提交的账号
String password = request.getParameter("password");// jsp提交的密码
User user = new User(username, password);// jsp获得的信息放入User对象
List<User> listUser = (List<User>) request.getServletContext().getAttribute("userList");// 获取XML内存中的用户信息
int login = userService.login(listUser, user);
if (login == 1) {
request.getSession().setAttribute("existUser", user);
// request.getServletContext().setAttribute("existUser", user);
request.getRequestDispatcher("WEB-INF/jsp/categoryList.jsp").forward(request, response);
} else {
request.setAttribute("existUser", null);
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
package com.imooc.library.utils;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.imooc.library.entity.User;

public class AnthFilter implements Filter {

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
User existUser = (User) request.getSession().getAttribute("existUser");
// User existUser = (User) request.getServletContext().getAttribute("existUser");
System.out.println(existUser+"(过滤器)");
String requestURL = request.getRequestURL().toString();
// 不需要过滤的URL
String[] urls = { "/login.do", ".html", ".js", ".css", ".ico", ".jpg", ".png" };
boolean flag = false;
for (String str : urls) {
if (requestURL.indexOf(str) != -1) {
flag = true;
break;
}
}
// 如果flag为false,则判断是否登录,如果登录,则放行,没登陆则跳转岛登陆页面。
if (flag) {
chain.doFilter(req, resp);
} else {
if (existUser != null) {
chain.doFilter(req, resp);
} else {
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
}
}
}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}
package com.imooc.library.utils;

import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.imooc.library.entity.Book;
import com.imooc.library.entity.Category;
import com.imooc.library.entity.User;

public class InitListener implements ServletContextListener{

@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub

}

@Override
public void contextInitialized(ServletContextEvent sce) {
List<Book>bookList = XmlDataSource.getBook();
List<Category>categoryList=XmlDataSource.getCategory();
List<User> userList = XmlDataSource.getUser();
sce.getServletContext().setAttribute("bookList", bookList);
sce.getServletContext().setAttribute("userList", userList);
sce.getServletContext().setAttribute("categoryList", categoryList);
System.out.println("初始化数据成功");
}

}
package com.imooc.library.service;

import java.util.List;

import com.imooc.library.dao.UserDao;
import com.imooc.library.entity.User;

/**
* 用户信息处理类 Service
* @author zjczbq
*
*/
public class UserServiceImpl {

private UserDao userDao= new UserDao();

/**
*
* @param listUser XML内存里的数据
* @param user 待校验的用户
* @return 1-用户存在 0-用户不存在
*/
public int login(List<User> listUser,User user) {//1,XML内存数据 2,jsp获得数据
System.out.println(listUser+"(UserService)");
System.out.println(user+"(UserService)");
for(User u : listUser) {
if((u.getuName().equals(user.getuName()))&&(u.getuPassword().equals(user.getuPassword()))) {
System.out.println("登陆成功");
return 1;
}
}
System.out.println("登陆失败");
return 0;
}
}
package com.imooc.library.utils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

import com.imooc.library.entity.Book;
import com.imooc.library.entity.Category;
import com.imooc.library.entity.User;

/**
* 数据源类 解析XML
*
* @author zjczbq
*
*/
public class XmlDataSource {
private static List<User> userData = new ArrayList(); //保存XML储存库的用户信息数据
private static List<Category> categoryData = new ArrayList(); //保存XML储存库的图书分类数据
private static List<Book> bookData = new ArrayList(); //保存XML储存库的图书数据
private static String userDataFile; // 保存用户信息的文件物理地址
private static String categoryDataFile; // 保存图书分类的文件物理地址
private static String bookDataFile; // 保存图书的文件物理地址

static {
// 下面代码意思是:在程序运行以后去得到类路径目录下的book.xml文件的路径地址
bookDataFile = XmlDataSource.class.getResource("/book.xml").getPath();
System.out.println(bookDataFile);
categoryDataFile = XmlDataSource.class.getResource("/category.xml").getPath();
System.out.println(categoryDataFile);
userDataFile = XmlDataSource.class.getResource("/user.xml").getPath();
System.out.println(userDataFile);
reloadUser();
reloadCategory();
reloadBooks();
}

private static void reloadUser() {
URLDecoder decoder = new URLDecoder();
try {
userDataFile = decoder.decode(userDataFile, "UTF-8");
System.out.println(userDataFile);
SAXReader reader = new SAXReader();
Document document = reader.read("file:///" + userDataFile);
List<Node> nodes = document.selectNodes("/root/user");
userData.clear();
for (Node node : nodes) {
Element element = (Element) node;
User user = new User();
user.setUid(Integer.parseInt(element.attributeValue("id")));
user.setuName(element.elementText("userName"));
user.setuPassword(element.elementText("Password"));
userData.add(user);
System.out.println(userData);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private static void reloadCategory() {
URLDecoder decoder = new URLDecoder();
try {
categoryDataFile = decoder.decode(categoryDataFile, "UTF-8");
System.out.println(categoryDataFile);
SAXReader reader = new SAXReader();
Document document = reader.read("file:///" + categoryDataFile);
List<Node> nodes = document.selectNodes("/root/category");
categoryData.clear();
for (Node node : nodes) {
Element element = (Element) node;
Category category = new Category();
category.setCategoryNum(Integer.parseInt(element.attributeValue("id")));
category.setCategoryId(element.elementText("categoryId"));
category.setCategoryName(element.elementText("categoryName"));
categoryData.add(category);
System.out.println(categoryData);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private static void reloadBooks() {
URLDecoder decoder = new URLDecoder();
try {
bookDataFile = decoder.decode(bookDataFile, "UTF-8");
System.out.println(bookDataFile);
SAXReader reader = new SAXReader();
// 1.获取Document文档对象
// 如果文件目录含有中文!可以在加载文件时,前边加上 file:/// 。
Document document = reader.read("file:///" + bookDataFile);
// 2.Xpath得到XML节点集合
List<Node> nodes = document.selectNodes("/root/book");
// Node是所有类型XML节点的统称,Element则通常指的是XML中的标签以及标签中所指代的信息
bookData.clear();
for (Node node : nodes) {
Element element = (Element) node;
Book book = new Book();
book.setBookNum(Integer.parseInt(element.attributeValue("id")));
book.setBookId(element.elementText("bookId"));
book.setBookName(element.elementText("bookName"));
book.setBookCategory(element.elementText("bookCategory"));
book.setBookPrice(Integer.parseInt(element.elementText("bookPrice")));
book.setBookCover(element.elementText("preview"));
book.setBookDescription(element.elementText("description"));
bookData.add(book);
System.out.println(bookData);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static void appendBook(Book book) {
//1,读取XML文档,得到Document对象
SAXReader reader = new SAXReader();
Writer writer = null;
try {
Document document = reader.read("file:///" + bookDataFile);
//2,创建新的book节点
Element root = document.getRootElement();
Element p = root.addElement("book");
//3,创建book节点的各个节点
p.addAttribute("id", String.valueOf(bookData.size()+1));
p.addElement("bookId").setText(book.getBookId());
p.addElement("bookName").setText(book.getBookName());
p.addElement("bookCategory").setText(book.getBookCategory());
p.addElement("bookPrice").setText(book.getBookPrice().toString());
p.addElement("preview").setText(book.getBookCover());
p.addElement("description").setText(book.getBookDescription());
//4,写入XML,完成追加操作
writer = new OutputStreamWriter(new FileOutputStream(bookDataFile),"UTF-8");
document.write(writer);
System.out.println(bookDataFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(writer!=null) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
reloadBooks();
}
}

/**
* 获取所有用户信息
*
* @return
*/
public static List<User> getUser() {
return userData;
}

/**
* 获取所有图书信息
*
* @return
*/
public static List<Book> getBook() {
return bookData;
}

/**
* 获取所有分类信息
*
* @return
*/
public static List<Category> getCategory() {
return categoryData;
}

public static void main(String[] args) {
new XmlDataSource();
}
}
package com.imooc.library.controller;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.imooc.library.entity.Book;
import com.imooc.library.service.BookServiceImpl;

/**
* Servlet implementation class BookController
*/
@WebServlet("/book")
public class BookController extends HttpServlet {

private BookServiceImpl bookService = new BookServiceImpl();

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getParameter("method");
if(method.equals("show_bookList")) {//展示图书页面
this.showBookList(request,response);
}else if(method.equals("appendBook")) {//新增图书实现功能方法
this.appendBook(request,response);
}else if(method.equals("show_AddBook")){//展示新增图书页面
this.showAddBook(request,response);
}


}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
/**
* 展示图书页面
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void showBookList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Book>bookList = bookService.getBook();
request.setAttribute("bookData", bookList);
request.getRequestDispatcher("WEB-INF/jsp/bookList.jsp").forward(request, response);

}

/**
* 展示新增图书页面
* @param request
* @param response
* @throws IOException
* @throws ServletException
*/

private void showAddBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("WEB-INF/jsp/addBook.jsp").forward(request, response);
}

/**
* 新增图书
*
* @param request
* @param response
* @throws FileUploadException
*/
private void appendBook(HttpServletRequest request, HttpServletResponse response) {
// String bookName = request.getParameter("bookName");
// System.out.println(bookName);

// 1,初始化FileUpload组件
/**
* FileItemFactory 用于将前端表单的数据转换为一个个FileItem对象 ServletFileUpload
* 则是为FileUpload组件提供Java web的Http请求解析
*/
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sf = new ServletFileUpload(factory);
// 2,遍历所有FileItem
try {
List<FileItem> formData = sf.parseRequest(request);
Book book = new Book();
for (FileItem fi : formData) {
if (fi.isFormField()) {
System.out.println("普通输入项" + fi.getFieldName() + ":" + fi.getString("UTF-8"));
switch (fi.getFieldName()) {
case "bookId":
book.setBookId(fi.getString("UTF-8"));
break;
case "bookName":
book.setBookName(fi.getString("UTF-8"));
break;
case "categoryId":
book.setBookCategory(fi.getString("UTF-8"));
break;
case "bookPrice":
book.setBookPrice(Integer.parseInt(fi.getString("UTF-8")));
break;
case "remarks":
book.setBookDescription(fi.getString("UTF-8"));
break;
default:
break;
}
} else {
System.out.println("文件上传项:" + fi.getFieldName());
// 3,文件保存到服务目录
String path = request.getServletContext().getRealPath("/image");
System.out.println("上传文件目录:" + path);
String fileName = UUID.randomUUID().toString();
String suffix = fi.getName().substring(fi.getName().lastIndexOf("."));
fi.write(new File(path, fileName + suffix));
book.setBookCover("/image" + fileName + suffix);
}
}
bookService.addBook(book);
List<Book>bookList = bookService.getBook();
request.setAttribute("bookData", bookList);
// response.sendRedirect("/book?method=show_bookList");
request.getRequestDispatcher("/WEB-INF/jsp/bookList.jsp").forward(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.imooc.library.service;

import java.util.List;

import com.imooc.library.dao.BookDao;
import com.imooc.library.entity.Book;
/**
* 图书信息处理类BookServiceImpl
* @author zjczbq
*
*/
public class BookServiceImpl {

private BookDao bookDao = new BookDao();

public List<Book> getBook(){
return bookDao.getBook();
}

//添加图书信息:
public void addBook(Book book) {
bookDao.addBook(book);
}

//修改图书信息:
public void updateBook(Book book) {

}

//删除图书信息:
public void deleteBook(String bookId) {

}

//根据图书ID来查询书籍信息:
public Book getBooksById(String bookID) {
return null;
}

//根据分类来查询书籍信息:
public List<Book> getBooksByCatgoryName(String catgoryName) {
return null;

}
}
<%@page contentType="text/html;charset=UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!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="/book?method=show_bookList" >图书信息管理</a>
</nav>
<nav>
<a href="/category?method=show_categoryList" >分类管理</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="${bookData }" var="bookList">
<tr id="tr1">
<td>${bookList.bookNum }</td>
<td>${bookList.bookId }</td>
<td>${bookList.bookName }</td>
<td>${bookList.bookCategory }</td>
<td>
<fmt:formatNumber pattern="¥0.00" value="${bookList.bookPrice }"></fmt:formatNumber>
</td>
<td><img src="${bookList.bookCover }"></td>
<td>
<a href="/updateBook?bookId=${bookList.bookId }">修改</a>
<a href="/deleteBook?bookId=${bookList.bookId }">删除</a>

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

</tr>
</c:forEach>
</tbody>
</table>
</div>
</section>
<section class="page">
<div class="container">
<div id="fatie">
<a href="/book?method=show_AddBook"><button>新建</button></a>
</div>
</div>
</section>
<footer>
copy@慕课网
</footer>
</body>
</html>


正在回答

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

4回答

同学你好,可能在tomcat 的 webapps 目录下还有其它的项目,导致出现异常,尝试删除其它项目,再启动调试看看。

    ​打开Server视图,双击Tomcat v8.0 Server,查看配置路径,然后找到对应的路径,将其余项目删除。如下所示:

    ​http://img1.sycdn.imooc.com//climg/5fbce22309538bb508010485.jpg

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

  • 金鱼眼 提问者 #1
    删除以后真的可以了!已解决 谢谢老师
    2020-11-24 20:14:36
好帮手慕小尤 2020-11-23 19:00:19

同学你好,1. 查看同学反馈截图,同学的监听器好像执行了多次,如果是执行了多次,则建议同学配置tomcat,如下所示:

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

2. 如果还存在问题,则建议同学重新创建一个项目试一下。

3. 出现404异常,则是没有找到相关文件,则建议在项目的相关目录中查看一下文件是否存在。

  • 提问者 金鱼眼 #1
    老师还是不行!我留意到跳回登陆页面的报错信息(之前截图里面)! GET http://localhost:8080/img/1.png 404 报错说找不到这个东西!但我本来就没有img这个文件啊! 我工程下只有image文件里面有一个1.png 这个/img/1.png在代码里我也没写过!怎么就在请求里出现了呢?
    2020-11-24 16:38:02
金鱼眼 提问者 2020-11-23 17:12:19

老师修改后依旧是这样的情况!我打开了F12看了一下!新增操作后跳回到登陆页面时候报错的居然login.css的第一行和image里面的图片!这是怎么回事?

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

http://img1.sycdn.imooc.com//climg/5fbb7bba0976a59021601391.jpghttp://img1.sycdn.imooc.com//climg/5fbb7ccf096af7a800000000.jpg


好帮手慕小尤 2020-11-23 13:59:52

同学你好,1. 建议同学尝试修改过滤器中的代码,当flag变量为true时,则判断是否有登陆。如下所示:

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

@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		User existUser = (User) request.getSession().getAttribute("existUser");
		// User existUser = (User)
		// request.getServletContext().getAttribute("existUser");
		System.out.println(existUser + "(过滤器)");
		String requestURL = request.getRequestURL().toString();
		// 不需要过滤的URL
		String[] urls = { "/login.do", ".html", ".js", ".css", ".ico", ".jpg", ".png" };
		boolean flag = false;
		for (String str : urls) {
			if (requestURL.indexOf(str) != -1) {
				flag = true;
				break;
			}
		}

		// 如果flag为false ,则判断是否登录,如果登录,则放行,没登陆则跳转到登陆页面。
		if(!flag) {
			System.out.println(existUser);
			if (existUser == null) {
				request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
				return;
			} 
		}
		chain.doFilter(req, resp);
	}

2. 建议为session设置数据,当登陆失败时,将session值设置为null。如下所示:

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

3. 建议查看是否还有其他地方设置了session值,如果有,则建议查看是否有将existUser设置为null。如果有,则建议同学删除,只在登陆中设置session值即可。

4. 建议清除缓存重新试一下。如下所示:

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

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


  • 提问者 金鱼眼 #1
    老师!修改后就一直在登陆页面中!后台输出一直是null!一直跳转登陆页面!
    2020-11-23 15:50:27
  • 好帮手慕小尤 回复 提问者 金鱼眼 #2
    同学你好,刚是老师书写错误,已修改回答,请同学重新查看。给您的学习带来不便,深感抱歉!祝学习愉快!
    2020-11-23 16:30:38
  • 提问者 金鱼眼 回复 好帮手慕小尤 #3
    老师修改后依然如此我看了一下后台报错截图了发了上来您看看
    2020-11-23 17:13:04
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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