HTTP Status 500 – Internal Server Error
package com.imooc.web.action;
import java.io.IOException;
import java.io.File;
import java.util.List;
import java.util.Map;
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 com.imooc.domain.Category;
import com.imooc.domain.Product;
import com.imooc.service.CategoryService;
import com.imooc.service.ProductService;
import com.imooc.service.impl.CategoryServiceImpl;
import com.imooc.service.impl.ProductServiceImpl;
import com.imooc.utils.UploadUtils;
@WebServlet("/ProductServlet")
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收method参数
String methodName = request.getParameter("method");
if("findAll".equals(methodName)) {
//查询商品
findAll(request,response);
}else if("saveUI".equals(methodName)) {
//添加商品
saveUI(request,response);
}else if("save".equals(methodName)) {
save(request,response);
}else if("edit".equals(methodName)) {
edit(request,response);
}else if("update".equals(methodName)) {
update(request,response);
}else if("delete".equals(methodName)) {
delete(request,response);
}
}
/*
* 商品管理,删除商品
*/
private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
Integer pid = Integer.parseInt(request.getParameter("pid"));
ProductService productService = new ProductServiceImpl();
productService.delete(pid);
System.out.println(productService);
//删除图片
Product product = productService.findOne(pid);
String path = product.getPath();
if(path != null && "".equals(path)) {
String realPath = this.getServletContext().getRealPath(path);
File file = new File(realPath);
if(file.exists()) {
file.delete();
System.out.println("删除成功");
}
}
//跳转页面
response.sendRedirect(request.getContextPath()+"/ProductServlet?method=findAll");
}
/*
* 商品管理,修改保存商品
*/
private void update(HttpServletRequest request, HttpServletResponse response) throws IOException {
Map<String, String> map = UploadUtils.uploadFile(request);
Product product = new Product();
product.setPid(Integer.parseInt(map.get("pid")));
product.setPname(map.get("pname"));
product.setAuthor(map.get("author"));
product.setPrice(Double.parseDouble(map.get("price")));
product.setDescription(map.get("description"));
product.setFilename(map.get("filename"));
product.setPath(map.get("path"));
product.getCategory().setCid(Integer.parseInt(map.get("cid")));
//处理数据
ProductService productService = new ProductServiceImpl();
productService.update(product);
//页面跳转
response.sendRedirect(request.getContextPath()+"/ProductServlet?method=findAll");
}
/*
* 商品管理,编辑商品
*/
private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Integer pid = Integer.parseInt(request.getParameter("pid"));
ProductService productService = new ProductServiceImpl();
Product product = productService.findOne(pid);
// System.out.println(product);
CategoryService categoryService = new CategoryServiceImpl();
List<Category> categoryList = categoryService.findAll();
//页面跳转
request.setAttribute("product", product);
request.setAttribute("categoryList", categoryList);
request.getRequestDispatcher("/admin/product_update.jsp").forward(request, response);
}
private void save(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 文件上传
Map<String,String> map = UploadUtils.uploadFile(request);
//将数据完成封装
Product product = new Product();
product.setPname(map.get("pname"));
product.setAuthor(map.get("author"));
product.setPrice(Double.parseDouble(map.get("price")));
product.setDescription(map.get("description"));
product.setFilename(map.get("filename"));
product.setPath(map.get("path"));
product.getCategory().setCid(Integer.parseInt(map.get("cid")));
//处理数据
ProductService productService = new ProductServiceImpl();
productService.save(product);
System.out.println("findAll-1");
//跳转页面
response.sendRedirect(request.getContextPath()+"/ProductServlet?method=findAll");
}
/*
* 商品模块,跳转到添加页面的方法
*/
private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查询所有分类
CategoryService categoryService = new CategoryServiceImpl();
List<Category> list = categoryService.findAll();
//页面跳转
request.setAttribute("categoryList", list);
request.getRequestDispatcher("/admin/product_add.jsp").forward(request, response);
}
/*
* 商品模块,查询所有商品的方法
*/
private void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ProductService productService = new ProductServiceImpl();
List<Product> list = productService.findAll();
//页面跳转
request.setAttribute("list", list);
request.getRequestDispatcher("/admin/product_list.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server.服务器版本: Apache Tomcat/8.5.50
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: 服务器构建: Dec 7 2019 19:19:46 UTC
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: 服务器版本号(:8.5.50.0
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name: Windows 10
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS.版本: 10.0
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: 架构: amd64
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java 环境变量: J:\jdk1.8.0_101\jre
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM 版本: 1.8.0_101-b13
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM.供应商: Oracle Corporation
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE: J:\apache-tomcat-8.5.50
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME: J:\apache-tomcat-8.5.50
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=J:\apache-tomcat-8.5.50
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=J:\apache-tomcat-8.5.50
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=J:\apache-tomcat-8.5.50\webapps
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=J:\apache-tomcat-8.5.50\endorsed
二月 14, 2020 6:47:39 下午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=GBK
二月 14, 2020 6:47:39 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [J:\jdk1.8.0_101\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;J:/jre1.8.0_101/bin/server;J:/jre1.8.0_101/bin;J:/jre1.8.0_101/lib/amd64;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;J:\jdk1.8.0_101\bin;J:\jdk1.8.0_101\jre\bin;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;J:\ProgramFiles\Nodejs\;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Users\51768\AppData\Local\Android\Sdk\tools;C:\Users\51768\AppData\Local\Android\Sdk\platform-tools;J:\apache-maven-3.6.3-bin\apache-maven-3.6.3\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\51768\AppData\Local\Microsoft\WindowsApps;C:\Users\51768\AppData\Roaming\npm;J:\ProgramFiles\Microsoft VS Code\bin;C:\Users\51768\AppData\Local\atom\bin;J:\eclipse;;.]
二月 14, 2020 6:47:40 下午 org.apache.coyote.AbstractProtocol init
信息: 初始化协议处理器 ["http-nio-8080"]
二月 14, 2020 6:47:40 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
二月 14, 2020 6:47:40 下午 org.apache.coyote.AbstractProtocol init
信息: 初始化协议处理器 ["ajp-nio-8009"]
二月 14, 2020 6:47:40 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
信息: Using a shared selector for servlet write/read
二月 14, 2020 6:47:40 下午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 1103 ms
二月 14, 2020 6:47:40 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service [Catalina]
二月 14, 2020 6:47:40 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/8.5.50
二月 14, 2020 6:47:43 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
二月 14, 2020 6:47:43 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: 把web 应用程序部署到目录 [J:\apache-tomcat-8.5.50\webapps\docs]
二月 14, 2020 6:47:45 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
二月 14, 2020 6:47:45 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory [J:\apache-tomcat-8.5.50\webapps\docs] has finished in [1,810] ms
二月 14, 2020 6:47:45 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: 把web 应用程序部署到目录 [J:\apache-tomcat-8.5.50\webapps\examples]
二月 14, 2020 6:47:47 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
二月 14, 2020 6:47:47 下午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
二月 14, 2020 6:47:47 下午 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
二月 14, 2020 6:47:47 下午 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: attributeAdded('StockTicker', 'async.Stockticker@1d00a697')
二月 14, 2020 6:47:47 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory [J:\apache-tomcat-8.5.50\webapps\examples] has finished in [2,031] ms
二月 14, 2020 6:47:47 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: 把web 应用程序部署到目录 [J:\apache-tomcat-8.5.50\webapps\host-manager]
二月 14, 2020 6:47:48 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
二月 14, 2020 6:47:48 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory [J:\apache-tomcat-8.5.50\webapps\host-manager] has finished in [1,533] ms
二月 14, 2020 6:47:48 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: 把web 应用程序部署到目录 [J:\apache-tomcat-8.5.50\webapps\manager]
二月 14, 2020 6:47:50 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
二月 14, 2020 6:47:50 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory [J:\apache-tomcat-8.5.50\webapps\manager] has finished in [2,091] ms
二月 14, 2020 6:47:50 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: 把web 应用程序部署到目录 [J:\apache-tomcat-8.5.50\webapps\ROOT]
二月 14, 2020 6:47:52 下午 org.apache.jasper.servlet.TldScanner scanJars
信息: 至少有一个JAR被扫描用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
二月 14, 2020 6:47:52 下午 org.apache.catalina.startup.HostConfig deployDirectory
信息: Deployment of web application directory [J:\apache-tomcat-8.5.50\webapps\ROOT] has finished in [1,875] ms
二月 14, 2020 6:47:52 下午 org.apache.coyote.AbstractProtocol start
信息: 开始协议处理句柄["http-nio-8080"]
二月 14, 2020 6:47:52 下午 org.apache.coyote.AbstractProtocol start
信息: 开始协议处理句柄["ajp-nio-8009"]
二月 14, 2020 6:47:52 下午 org.apache.catalina.startup.Catalina start
信息: Server startup in 12358 ms
aaa 123
二月 14, 2020 6:48:06 下午 com.mchange.v2.log.MLog <clinit>
信息: MLog clients using java 1.4+ standard logging.
二月 14, 2020 6:48:07 下午 com.mchange.v2.c3p0.C3P0Registry banner
信息: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
二月 14, 2020 6:48:07 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge1dla8iodaim1kfrdjz|1ba274a4, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.cj.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge1dla8iodaim1kfrdjz|1ba274a4, idleConnectionTestPeriod -> 0, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql:///shop?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 15, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
filename=1.jpg
{path=/shop/upload/af99f99784d2457082e52dafd833414b.jpg, filename=1.jpg, pname=阿达, price=1200, author=小黑, cid=2}
findAll-2-1
findAll-3-3
findAll-2-2
findAll-1
com.imooc.service.impl.ProductServiceImpl@7fd345e6
二月 14, 2020 6:48:36 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: 在路径为[/shop]的上下文中,servlet[com.imooc.web.action.ProductServlet]的Servlet.service()引发异常
java.lang.NullPointerException
at com.imooc.web.action.ProductServlet.delete(ProductServlet.java:58)
at com.imooc.web.action.ProductServlet.doGet(ProductServlet.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.imooc.web.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:609)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:810)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
productService输出了不为空
正在回答
同学你好

同学这里少了一个叹号 ,应该是不为“”。

请同学修改后再试一下。
如果我的回答解决了你的问题,请采纳,祝学习愉快。
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程



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