username为空时,为什么也能注册,但第二次就不会了

username为空时,为什么也能注册,但第二次就不会了

下面是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);

}


}



正在回答 回答被采纳积分+1

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

1回答
好帮手慕柯南 2019-05-07 13:54:43

同学你好!的确是因为第一次将username当做空字符串存了起来,第二次在后台验证用户是否存在时,发现了想匹配的空字符串,所以提示了用户已存在呢,之前已经回答过同学的这个问题了呢

http://class.imooc.com/course/qadetail/114379

如果同学比较介意这个问题,可以在页面或者后台做非空验证呢,在后面的课程中老师会讲如何验证。如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 慕尼黑7895541 #1
    后面在哪个课程里面讲解,我找一下
    2019-05-07 15:53:26
  • 好帮手慕柯南 回复 提问者 慕尼黑7895541 #2
    同学在Java Web基础进阶的Java正则表达式老师有讲,同学现在不需要着急去看呢,要把目前阶段的基础打扎实呢。如果解决了的你疑惑,请采纳,祝学习愉快
    2019-05-07 16:02:07
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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