项目问题?
来源:5-3 项目作业
tttjh_
2021-03-26 20:36:04
1、为什么启动tomcat说存在一个或多个监听器,然后就启动失败了
2、为什么我登录重定向到bookList.html页面不行,说我这个文件找不到呢?
我的登录见面login.jsp还是得放在web文件目录才能被访问到,放在web的WEB-INF的jsp文件下依然也是不能被访问到的。
<%@ 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>
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);
response.sendRedirect("/WEB-INF/jsp/bookList.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.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();
HttpServletRequest servletContext = (HttpServletRequest) 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.List;
/**
* @author Comet
*/
public class XmlDataSource {
private static List<User> usersData;
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");
} 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.attributeValue("userName");
String userPassword = element.attributeValue("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;
}
}
2回答
同学你好,同学已经解决了一个问题,很棒呐。
1、sendRedirect是重定向请求。重定向是浏览器会发送两次请求,先去服务器端拼好请求地址以后,再由浏览器重新发起的请求。
2、而WEB-INF作为安全目录,并不能直接通过浏览器地址来访问。
所以如果页面在WEB-INF目录下,是不可以直接通过浏览器地址访问;因为WEB-INF目录是安全目录,不能直接访问该目录下的文件,只能通过转发访问,也就是需要先跳转到对应的controller中,然后通过转发跳转到WEB-INF下的页面中。
综上所述,同学的response.sendRedirect("/WEB-INF/jsp/bookList.html");书写有误,并不能正确访问到,同学尝试将地址为WEB-INF目录下的请求,将重定向换成转发再来试试。
祝学习愉快!
tttjh_
提问者
2021-03-27
第一个tomcat启动问题,我已经解决了,是因为监听器初始化时有空指针异常了。
麻烦老师,帮忙看一下第二个的文件路径问题,是哪里出错了?
相似问题