项目问题?

来源:5-3 项目作业

tttjh_

2021-03-26 20:36:04

1、为什么启动tomcat说存在一个或多个监听器,然后就启动失败了

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

2、为什么我登录重定向到bookList.html页面不行,说我这个文件找不到呢?

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

我的登录见面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回答

好帮手慕小班

2021-03-27

同学你好,同学已经解决了一个问题,很棒呐。

    ​    ​1、sendRedirect是重定向请求。重定向是浏览器会发送两次请求,先去服务器端拼好请求地址以后,再由浏览器重新发起的请求。

    ​    ​ 2、而WEB-INF作为安全目录,并不能直接通过浏览器地址来访问。

所以如果页面在WEB-INF目录下,是不可以直接通过浏览器地址访问;因为WEB-INF目录是安全目录,不能直接访问该目录下的文件,只能通过转发访问,也就是需要先跳转到对应的controller中,然后通过转发跳转到WEB-INF下的页面中。

综上所述,同学的response.sendRedirect("/WEB-INF/jsp/bookList.html");书写有误,并不能正确访问到,同学尝试将地址为WEB-INF目录下的请求,将重定向换成转发再来试试。

祝学习愉快!

0

tttjh_

提问者

2021-03-27

第一个tomcat启动问题,我已经解决了,是因为监听器初始化时有空指针异常了。


麻烦老师,帮忙看一下第二个的文件路径问题,是哪里出错了?

0

0 学习 · 16556 问题

查看课程