报错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设置为启动即初始化。如下图所示,建议你对照我的步骤去检查并修改,如果还有问题,可以再次提问,祝学习愉快~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | //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文件夹,因为你的报错提示就是找不到这个文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 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积分~
来为老师/同学的回答评分吧