报错500
HTTP Status 500 – Internal Server Error
Type Exception Report
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.NullPointerException
com.imooc.servlet.RegistServlet.doGet(RegistServlet.java:86)
com.imooc.servlet.RegistServlet.doPost(RegistServlet.java:103)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.
正在回答 回答被采纳积分+1
如下图所示,建议同学Clean一下当前工程再试试,如果出现了找不到upload文件的报错异常,可以在D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \这个路径下手动创建一个,然后在运行试试。粘贴了你的代码,在我的编译器上跑起来是没有问题的,所以建议你clean一下当前工程试试,祝学习愉快~

你好同学,你搞混了,这是两个报错,java.io.FileNotFoundException这个报错是找不到upload文件的异常,而从你截图贴上来的错误,是空指针异常,是你最早的那个报错,也就是下图的userlist为null,也就是说,this.getServletContext().getAttribute("list")没有获取到值,

所以要检查一下在InitServlet中是否将list集合放到ServletContext中。如下图所示,

并且要在web.xml中将InitServlet设置为启动即初始化。如下图所示,建议你对照我的步骤去检查并修改,如果还有问题,可以再次提问,祝学习愉快~

//web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>reg_login</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>InitServlet</display-name>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.imooc.servlet.InitServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/InitServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>RegistServlet</display-name>
<servlet-name>RegistServlet</servlet-name>
<servlet-class>com.imooc.servlet.RegistServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegistServlet</servlet-name>
<url-pattern>/RegistServlet</url-pattern>
</servlet-mapping>
</web-app>
//InitServlet
package com.imooc.servlet;
import java.io.IOException;
import com.imooc.domain.*;
import java.util.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InitServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
List<User> list=new ArrayList<User>();
this.getServletContext().setAttribute("list", list);
}
}
这个报错原因是你的userlist是null,也就是从域中没有获取到key为list的集合。
所以要确定一下,
1、同学有没有写InitServlet
2、如果写了,是否有初始化list集合。
3、是否是在init方法中写的,
4是否有在web.xml中配置随着服务器的启动而加载这个InitServlet

所以,建议同学按照老师告诉你的方法,检查一下你的web.xm 和InitServlet。
如果还是没有找到,请同学贴一下你的web.xm 和InitServlet
注意不要贴在回复里,会失去代码的格式。可以在回答里贴一下。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
你好,你的代码是完全没有问题的,我之前跟你提到的去D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \这个路径下检查是否存在文件夹,建议同学将这个文件夹的截图粘贴上来。

类似于下图这样寻找,看一下是否存在upload文件夹,因为你的报错提示就是找不到这个文件。

package com.imooc.servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.imooc.domain.User;
import com.imooc.utils.UpLoadUtils;
public class RegistServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory);
List<FileItem> list=servletFileUpload.parseRequest(request);
List<String> hobbylist=new ArrayList<String>();
String url;
//用map集合收集全部的表单参数,传给User
Map<String, String> map=new HashMap<String,String>();
for(FileItem fileItem:list) {
if(fileItem.isFormField()) {
//接收表单项参数
String name=fileItem.getFieldName();
String value=fileItem.getString("utf-8");
//System.out.println(name+" "+value);
//接收复合框参数
if(name.equals("hobby")) {
String hobbyvalue=fileItem.getString("utf-8");
hobbylist.add(hobbyvalue);
hobbyvalue=hobbylist.toString().substring(1, hobbylist.toString().length()-1);
map.put(name, hobbyvalue);
}
else {
map.put(name,value);
}
}
else {
//文件上传功能:
//获得文件名称(实际的名称,不是表单里"name"的值):
String fileName=fileItem.getName();
//通过工具类(UpLoadUtils类)获取唯一文件名
String uuidFileName=UpLoadUtils.getUUIDFileName(fileName);
//获得文件的数据(输入流)
InputStream is=fileItem.getInputStream();
//获得文件上传的路径
String path=this.getServletContext().getRealPath("/upload");
//对接输出流
url=path+"\\"+uuidFileName;
FileOutputStream 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();
}
}
//封装对象
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");
List<User> userlist=(List<User>)this.getServletContext().getAttribute("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 {
// TODO Auto-generated method stub
doGet(request, response);
}
}HTTP状态500 - 内部服务器错误
输入例外报告
消息 D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \ upload(拒绝访问。)
说明服务器遇到意外情况,导致服务器无法完成请求。
例外
java.io.FileNotFoundException:D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \ upload(拒绝访问。)
java.io.FileOutputStream.open0(本机方法)
java.io.FileOutputStream.open(未知来源)
java.io.FileOutputStream。<init>(未知来源)
java.io.FileOutputStream。<init>(未知来源)
com.imooc.servlet.RegistServlet.doGet(RegistServlet.java:67)
com.imooc.servlet.RegistServlet.doPost(RegistServlet.java:103)
javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
注意服务器日志中提供了根本原因的完整堆栈跟踪。
Apache Tomcat / 9.0.12
老师,我是按视频里打的代码,为啥会出现这种情况呢
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程


恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星