在解决了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>
密    码: <input type="password" name="password"
style="width:110px" /> <br> <br>
<input type="submit"
name="commit" value="登录" style="color:#666" />
</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的问题了