关于页面报错

<%@page import="com.imooc.domain.User"%>
<%@ 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>
<%
if(session.getAttribute("user")!=null){
User user = (User)session.getAttribute("user");
System.out.println(user.getPath());
// 获得绝对路径最后一个\的位置
int idx = user.getPath().lastIndexOf("\\");
// 获得文件上传的唯一文件名:
String fileName = user.getPath().substring(idx+1);
%>
<div class="login">
<div class="header">
<h1>登录成功</h1>
</div>
<div class="content">
<table align="center">
<tr>
<td align="center"><img src="/reg_login/upload/<%= fileName %>" /></td>
</tr>
<tr>
<td align="center">欢迎<%= user.getNickname() %>,登录成功!</td>
</tr>
</table>
</div>
</div>
<%
}else{
%>
<div class="login">
<div class="header">
<h1>您还没有登录!请先去<a href="/reg_login/login.jsp">登录</a>!</h1>
</div>
</div>
<%
}
%>
</body>
</html>
正在回答 回答被采纳积分+1
需要对user进行空值判断,如果user不为空,再进行后面的操作,可以这么写:
if(session.getAttribute("user")!=null){
User user = (User)session.getAttribute("user");
System.out.println(user.getPath());
// 获得绝对路径最后一个\的位置
int idx = user.getPath().lastIndexOf("\\");
....Java中当操作一个空对象就会抛出空指针错误,提示你操作了一个不存在的对象。所以这一点,在以后编写代码的过程中也是需要注意的~~
/**
* 用户登录的Servlet
*/
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 接收数据:
String username = request.getParameter("username");
String password = request.getParameter("password");
// 从ServletContext域中获得保存用户信息集合:
List<User> list = (List<User>) this.getServletContext().getAttribute("list");
for (User user : list) {
// 判断用户名是否正确
if (username.equals(user.getUsername())) {
// 用户名是正确的
if (password.equals(user.getPassword())) {
// 密码也正确:
// 登录成功:
// 将用户的信息保存session中:
request.getSession().setAttribute("user", user);
response.sendRedirect("/reg_login/success.jsp");
return;
}
}
}
// 登录失败:
request.setAttribute("msg", "用户名或密码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
public class UploadUtils {
/**
* 生成唯一的文件名
*/
public static String getUUIDFileName(String fileName){
//将文件名的前面部分进行截取:xx.jsp --> .jpg
int idx = fileName.lastIndexOf(".");
String extention=fileName.substring(idx);
String uuidFileName=UUID.randomUUID().toString().replace("-", "")+extention;
return uuidFileName;
}
}
public class RegistServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 数据的的接收
// 文件上传基本操作:
try {
// 定义一个Map集合用于保存接收到的数据
Map<String, String> map = new HashMap<>();
// 1.创建一个磁盘文件项目工厂对象
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2.创建一个核心解析类
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 3.解析request请求,返回的是List集合,List集合中存放的是FileItem对象
List<FileItem> list;
list = servletFileUpload.parseRequest(request);
// 定义一个List集合,用于保存兴趣爱好数:
List<String> hobbyList = new ArrayList<String>();
// 4.遍历集合,获得每个FileItem,判断是表单项还是文件上传项
String url = null;
for (FileItem fileItem : list) {
// 判断表单项还是文件上传项
if (fileItem.isFormField()) {
// 普通表单项
// 接收表单项参数的值
String name = fileItem.getFieldName();// 获得表单项的name属性的值
String value = fileItem.getString("UTF-8");// 获得表单项的值
System.out.println(name + " " + value);
// 接受复选框的数据
if ("hobby".equals(name)) {
String hobbyValue = fileItem.getString("UTF-8");
// 接收到一个值,将这个值存入到hobbyList集合中
hobbyList.add(hobbyValue);
hobbyValue = hobbyList.toString().substring(1, hobbyList.toString().length() - 1);// [xxx,yyy]
System.out.println(name + " " + hobbyValue);
// 将爱好的数据存入到Map集合中
map.put(name, hobbyValue);
} else {
// 将数据存入到map集合中
map.put(name, value);
}
} else {
// 文件上传项
// 文件上传功能
// 获得文件上传的名称:
String fileName = fileItem.getName();
if (fileName != null && !"".equals(fileName)) {
// 通过工具类获得唯一文件名:
String uuidFileName = UploadUtils.getUUIDFileName(fileName);
// 获得文件上传的数据:
InputStream is = fileItem.getInputStream();
// 获得文件上传的路径
String path = this.getServletContext().getRealPath("/upload");
// 将输入流对接到输出流就可以了:
url = path + "\\" + uuidFileName;
OutputStream os = new FileOutputStream(url);
int len = 0;
byte[] b = new byte[1024];
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
is.close();
os.close();
}
}
}
System.out.println(map);
// 获得ServletContext对象:
List<User> userList = (List<User>) this.getServletContext().getAttribute("list");
// 校验用户名
for (User u : userList) {
if (u.getUsername().equals(map.get("username"))) {
request.setAttribute("msg", "用户名已经存在!");
request.getRequestDispatcher("/regist.jsp").forward(request, response);
return;
}
}
// 封装数据到User当中
User user = new User();
user.setUsername(map.get("username"));
user.setPassword(map.get("password"));
user.setSex(map.get("sex"));
user.setNickname(map.get("nickname"));
user.setHobby(map.get("hobby"));
user.setPath(url);
// 将注册用户的信息存入到List集合中:
userList.add(user);
for (User u : userList) {
System.out.println(u);
}
this.getServletContext().setAttribute("list", userList);
// 注册成功,跳转到登陆页面
request.getSession().setAttribute("username", user.getUsername());
response.sendRedirect(request.getContextPath() + "/login.jsp");
} catch (
FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
- 参与学习 716 人
- 提交作业 185 份
- 解答问题 1363 个
会Java?懂前端基础?想学后台开发?那么,赶快来学习《Java Web入门》路径吧。本路径主要介绍Java Web的基础知识,并配有大量案例,定会让你收获多多!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星