如果不勾选复选框,会报500错误,勾选则运行没问题

如果不勾选复选框,会报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>


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好!同学的代码报如下错误:

http://img1.sycdn.imooc.com//climg/5cd120ef0001edb313340221.jpg

我们可以看到报错的信息是在第62行,我们看代码的第62行:

http://img1.sycdn.imooc.com//climg/5cd1212600019f0d08450138.jpg

发现是这行代码报错,根据我们所学的知识,如果remember为NULL那么在执行第62行时就会报空指针异常,我们可以将代码改为:

http://img1.sycdn.imooc.com//climg/5cd1218800015fb103700043.jpg

这样可以避免remember为NULL时报空指针,如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 慕尼黑7895541 提问者 #1
    remember也是字符串类型,为什么互换位置就不会报错呢。equals方法的底层原理是怎样的呀
    2019-05-07 15:55:17
  • 好帮手慕柯南 回复 提问者 慕尼黑7895541 #2
    同学这个和equals底层没有关系呢,remember为NULL,也就是他目前还不是一个对象,同学可以想一下一个还不是对象的变量,他能去调用方法吗?肯定是不可以的。互换位置不会报错的原因是“true”始终是一个对象,那他始终都可以调equals方法,所以不会报错呢。不知道同学是否明白了呢?如果明白了还希望同学采纳一下呢,祝同学学习愉快~
    2019-05-07 16:06:55
  • 慕尼黑7895541 提问者 回复 好帮手慕柯南 #3
    remember不是从request.getParameter("remember")里获取相对应的值了吗,为什么会出现Null
    2019-05-07 16:10:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师