解决空指针异常2

在解决了login.jsp当中的空指针问题后,又遇见了一系列问题。

源码

先给出login.jsp的源码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>管理平台</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
 	 <style>
#one {
	margin:auto;
	background:url(images/logo.jpg);
	background-repeat:no-repeat;
	height:392px;
	width:722px;	
}
#two {
	position:relative;
	font-size: 12px;
	margin-top:150px;
	margin-left:190px;	
	width:250px;	
	float:left;
	font-size: 16px;
}
#three {
 position:relative;
 width:200px; 
 margin-top:150px;
 margin-right:60px;
 float:right;
}
</style>
  </head>
<body>
	<div id="one">
		<div id="two">
			<h3>欢迎登录</h3>
 	 			<form action="../servlet/LoginAllServlet" method="post">
				用户名: <input type="text" name="username" style="width:110px" /> <br>&nbsp&nbsp&nbsp&nbsp码: <input type="password" name="password"
					style="width:110px" /> <br> <br>
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="submit"
					name="commit" value="登录" style="color:#666" />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
			</form>

		</div>
	<div id="three">
		 <!-- 向session接收输入的用户名-->
			<h2>在线人员</h2>
			<%
			if(application.getAttribute("users")!=null)
			   {
			   ArrayList<String> users=(ArrayList<String>) application.getAttribute("users");
			    Iterator iter = users.iterator();
				while (iter.hasNext()) {
			%>
			<li><%=iter.next()%></li>
			<%
				}
			%>
			<p>当前在线的用户数:<%=users.size() %></p>
		   <%
			   }
			%>
		</div>
	</div>
</body>
</html>

LoginAllServlet.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author fhzheng
 * <h1> 所有用户登录检测控制器 </h1>
 * <li> 1 首用户登录则加入登录列表
 * <li> 2 非首用户查看列表中是否已经登录 
 * <li> 3 如果用户存在未登录则加入登录列表
 * <li> 4 输出所有登录的用户
 * 
 */
public class LoginAllServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	
	private ArrayList<String> users = null;	// 用户列表
	private ServletContext context  =null;	// 上下文对象
	
	public LoginAllServlet() {
		super();
	}
	public void destroy() {
		super.destroy();
	}

	/**
	 * <li> 仅调用doPost方法来处理,具体见doPost方法
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * <li> 控制器核心动作
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 中文乱码处理
		request.setCharacterEncoding("utf-8");
		// 在项目启动第一次时创建,该项目只创建一次,唯一的,获取上下文对象
        context = this.getServletContext(); 
        boolean flag = false;	// 用户登录标志
        String url="../listener/login.jsp";
        
        // 获取用户参数
        String username=request.getParameter("username");
        //获取用户列表,第一次获取时候为空,直接从上下文对象中获取
        users =(ArrayList<String>)context.getAttribute("users");
        //第一个用户登录时,列表肯定为空
        if(users==null){
            users = new ArrayList<String>();		// 初始化列表     
            users.add(username); 					// 添加一个用户到列表中  
            // 以下动作将触发监听动作
            context.setAttribute("users", users);   // 将第一个用户的名字保存到ServletContext对象中   
            System.out.println("--------第一个用户登录------");
            
        //非第一个用户登录   
        }else{
        	// 遍历,看是否已经存在该用户
            for(String user : users){
                //如果该用户已经登录,请求error.jsp不让其再登录
                if(username.equals(user)){
                    url = "../listener/error.jsp";   
                    System.out.println("--------该用户重复登录------");
                    flag = true;
                    break;   
                }
            }
            if (!flag) {	// 用户已经存在,标识未登录 
                //如果该用户没登录,就将该用户的名字保存到ServletContext对象中
                System.out.println("--------非重复登录------");
                users.add(username); 
			} 
        }
        // 在控制台输出已经登录的用户
        int i = 0;
        for (String user : users) {
			System.out.println("==========" + i+1+" : " + user +"==========");
			i++;
		}

        // 响应对象完成重定向,这个动作会让客户端再次发请求来完成
        response.sendRedirect(url); 
	}

	public void init() throws ServletException {
	}

}

上次login.jsp浏览器的页面如下

请添加图片描述

在我随便输入了用户名和密码后点击登入后页面如下

请添加图片描述
芜湖,是404报错

然后在检查时发现这个jsp会把表单里的数据交给LoginAllServlet这个servlet,打开这个servlet后也没找到问题

直到打开配置
配置文件

<!-- 全登录控制器配置 -->
 <!--  
  <servlet>
    <servlet-name>LoginAllServlet</servlet-name>
    <servlet-classservlet.LoginAllServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>LoginAllServlet</servlet-name>
    <url-pattern>/servlet/LoginAllServlet</url-pattern>
  </servlet-mapping>-->

这个servlet的配置全注释掉了,所以在调的时候找不到这个servlet
把注释撤掉后运行就可以解决404的问题了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值