如果不勾选复选框,会报500错误,勾选则运行没问题
Register源码
package com.imooc.servlet;
import java.io.FileOutputStream;
/**
* Servlet implementation class RegistServlet
*/
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 数据的接收
// 文件上传基本操作
// 注意包要导入commons那个
boolean flag = true;
Map<String, String> map = new HashMap<String, String>();
String url = null;
try {
// 1.创建一个磁盘文件项工厂对象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2.创建一个核心解析类
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 3.解析request请求,返回的是List集合,List集合存放的是FileItem对象
List<FileItem> list = servletFileUpload.parseRequest(request);
// 3.1定义一个List集合用于保存兴趣爱好
List<String> hobbylist = new ArrayList<String>();
// 4.遍历结合,获得每个FileItem,判断是表单还是文件上传项
for (FileItem fileItem : list) {
if (fileItem.isFormField()) {
// 普通表单项
// 接收表单项参数的值
String name = fileItem.getFieldName(); // 获取name
String value = fileItem.getString("UTF-8"); // 获取name对应的值,且避免中文乱码问题
System.out.println(name + " " + value);
// 接收表单多项参数的值
if ("hobby".equals(name)) {
String hobbyValue = fileItem.getString("UTF-8");
hobbylist.add(hobbyValue);
// 删除两边的大括号
hobbyValue = hobbylist.toString().substring(1, hobbylist.toString().length() - 1);
System.out.println(name + " " + hobbyValue);
// 存放表单多项
map.put(name, hobbyValue);
} else {
// 存放表单项
map.put(name, value);
}
} else {
// 文件上传项
// 文件上传功能
// 获得文件上传的名称;
String fileName = fileItem.getName(); // 获取name对应的值
// 设置条件:用户名不为空的时候才能文件上传
if (fileName != null && !"".equals(fileName)) {
// 通过工具类完成唯一文件名
String uuidFlieName = UploadUtils.getUUIDFileName(fileName);
// 获得文件上传的数据
InputStream is = fileItem.getInputStream();
// 获取文件上传的路径:
String path = this.getServletContext().getRealPath("/upload");
// 将输入流对接到输出流
url = path + "\\" + uuidFlieName;
OutputStream os = new FileOutputStream(url);
int length = 0;
byte[] b = new byte[1024];
while ((length = is.read(b)) != -1) {
os.write(b, 0, length);
}
is.close();
os.close();
}
}
}
System.out.println(map);
List<User> userList = (List<User>) this.getServletContext().getAttribute("list");
// 判断是否有相同的用户存在
for (User u : userList) {
if (u.getUsername().equals(map.get("username"))) {
request.setAttribute("msg", "用户名已经存在");
// 这时要返回注册页面,重新注册 请求转发无需再添加上文路径,
// 直接写WebContent下面的路径
request.getRequestDispatcher("/regist.jsp").forward(request, response);
return;
}
}
// 把Map数据封装到User里面,保存起来
User user = new User();
user.setUsername(map.get("username"));
user.setPassword(map.get("password"));
user.setNickname(map.get("nickname"));
user.setSex(map.get("sex"));
user.setHobby(map.get("hobby"));
user.setPath(url);
userList.add(user);
// 遍历,检查新的user有无放进去
for (User u : userList) {
System.out.println(u);
}
// 添加新的user后,再把它放回去
this.getServletContext().setAttribute("list", userList);
// 注册成功,跳转到登录页面(重定向,会重新发送一次请求,改变了http路径,但不能携带参数。如果是请求转发则不会改变且不会在发送一次,可以携带参数)
request.getSession().setAttribute("username", user.getUsername());
response.sendRedirect(request.getContextPath() + "/login.jsp");
// request.getRequestDispatcher("/login.jsp").forward(request, response);
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
LoginServlet源码
package com.imooc.servlet;
import java.io.IOException;
/**
* Servlet implementation class LoginServlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//根据list注册表和浏览器所输入的用户和密码是否一致
String username = request.getParameter("username");
String password = request.getParameter("password");
List<User> list = (List<User>) request.getServletContext().getAttribute("list");
//遍历逐个查找
for(User user:list) {
if(username.equals(user.getUsername())) {
if(password.equals(user.getPassword())) {
//把user保存起来
request.getSession().setAttribute("user", user);
//判断复选框是否勾选
String remember = request.getParameter("remember");
if(remember.equals("true")) {
//完成计主用户名的功能:
Cookie cookie = new Cookie("username",user.getUsername());
//设置有效路径和有效时间
cookie.setPath("/Register");//这个项目下的所有cookie路径
//设置有效时间,setMaxAge是秒为单位
cookie.setMaxAge(60*60);
//将cookie写回浏览器
response.addCookie(cookie);
}
//跳转到成功页面
response.sendRedirect(request.getContextPath()+"/success.jsp");
return ;
}
}
}
//登录失败
request.setAttribute("Msg","登录失败");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Login.jsp源码
<%@page import="com.imooc.utils.CookieUtils"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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.jsp">登录</a> <a href="./regist.jsp">注册</a>
</h1>
</div>
<%
String username = "";
//获得从客户端携带过来的所有的Cookie
Cookie[] cookies = request.getCookies();
//从Cookie的数组中查找指定名称的Cookie
Cookie cookie = CookieUtils.findCookie(cookies, "username");
//如果cookie存在对应的name,则返回相应的值
if (cookie != null) {
username = cookie.getValue();
}
//如果Cookie找不到则用session
if (request.getSession().getAttribute("username") != null) {
username = (String) request.getSession().getAttribute("username");
}
String msg = "";
if (request.getAttribute("Msg") != null) {
msg = (String) request.getAttribute("Msg");
}
%>
<h3>
<font color="red"><%=msg%></font>
</h3>
<form action="/Register/LoginServlet" method="post">
<table>
<tr>
<td class="td1">用户名</td>
<td><input type="text" class="input1" name="username"
value="<%=username%>"></td>
</tr>
<tr>
<td class="td1">密码</td>
<td><input type="password" class="input1" name="password"></td>
</tr>
<tr>
<td class="td1" colspan="2"><input type="checkbox"
name="remember" value="true" checked="checked"> 记住用户名</td>
</tr>
<tr>
<td colspan="2">
<div class="btn-red">
<input type="submit" value="登录" id="login-btn">
</div>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
正在回答
同学你好!同学的代码报如下错误:
我们可以看到报错的信息是在第62行,我们看代码的第62行:
发现是这行代码报错,根据我们所学的知识,如果remember为NULL那么在执行第62行时就会报空指针异常,我们可以将代码改为:
这样可以避免remember为NULL时报空指针,如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星