报错500

报错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

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

9回答
chrismorgen 2018-11-12 17:07:54

如下图所示,建议同学Clean一下当前工程再试试,如果出现了找不到upload文件的报错异常,可以在D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \这个路径下手动创建一个,然后在运行试试。粘贴了你的代码,在我的编译器上跑起来是没有问题的,所以建议你clean一下当前工程试试,祝学习愉快~

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

chrismorgen 2018-11-12 15:41:26

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

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

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

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

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

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

  • 提问者 慕前端6228120 #1
    老师你看我的代码啊,你所说的问题都没有,代码应该是完整的
    2018-11-12 15:51:38
  • 提问者 慕前端6228120 #2
    喂喂喂,老师还在吗
    2018-11-12 17:03:34
提问者 慕前端6228120 2018-11-12 15:36:19
//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);
	}
}


好帮手慕阿莹 2018-11-12 15:17:54

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

这个报错原因是你的userlist是null,也就是从域中没有获取到key为list的集合。

所以要确定一下,

1、同学有没有写InitServlet

 2、如果写了,是否有初始化list集合。

3、是否是在init方法中写的,

4是否有在web.xml中配置随着服务器的启动而加载这个InitServlet

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

所以,建议同学按照老师告诉你的方法,检查一下你的web.xm 和InitServlet。


如果还是没有找到,请同学贴一下你的web.xm 和InitServlet

注意不要贴在回复里,会失去代码的格式。可以在回答里贴一下。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕前端6228120 #1
    老师请看一下我的代码
    2018-11-12 15:34:19
提问者 慕前端6228120 2018-11-12 14:29:57
chrismorgen 2018-11-12 14:14:00

你好,你的代码是完全没有问题的,我之前跟你提到的去D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \这个路径下检查是否存在文件夹,建议同学将这个文件夹的截图粘贴上来。

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

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

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


  • 提问者 慕前端6228120 #1
    有的,老师看截图,虽然报错了500,但文件夹下是有图片的
    2018-11-12 14:29:24
提问者 慕前端6228120 2018-11-12 12:58:14
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);
	}

}


提问者 慕前端6228120 2018-11-12 10:08:42

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


  • 根据报错提示,建议同学在D:\ tomcat9.32位\ apache-tomcat-9.0.12 \ wtpwebapps \ reg_login \ 这个路径下创建upload文件夹,祝学习愉快~
    2018-11-12 11:44:15
  • 提问者 慕前端6228120 回复 chrismorgen #2
    可我有upload文件夹啊,还有就是在注册后虽然会500报错,但我发现图片已经出现在这个文件夹下了
    2018-11-12 12:57:39
  • 提问者 慕前端6228120 回复 chrismorgen #3
    老师可以看一下我的代码吗
    2018-11-12 12:58:36
提问者 慕前端6228120 2018-11-11 20:48:44

老师,我是按视频里打的代码,为啥会出现这种情况呢

  • 你好同学,该错误是空指针异常,请问同学有没有在web.xml中配置InitServlet呢?如果配置了,问题还没有解决,建议同学将web.xml,InitServlet,还有RegistServlet中的代码粘贴一下。方便老师具有针对性的为你解答。祝学习愉快~
    2018-11-12 09:51:42
  • 提问者 慕前端6228120 回复 chrismorgen #2
    ,老师你好,昨晚我在观看其他同学的问题时,解决了一部分问题,但后来又出现了新的问题,不是空指针异常了,而是我创建的upload文件拒绝访问,也是500错误,请老师看一看
    2018-11-12 10:08:05
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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