报错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 份
- 解答问题 10205 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星