javaweb开发中的那些坑

本文档总结了JavaWeb开发过程中常见的几个问题及其解决方案,包括Tomcat启动错误、Spring与JDK版本不兼容导致的问题、MySQL远程连接失败以及云服务器80端口访问问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近电脑有点问题,没办法就重装系统了,花了一个晚上重装IDE、,配置环境,好不容易把eclipse的环境弄好,加载之前的项目时却又到各种问题,一怒之下,写一篇记录下在javaweb开发中遇到的各种坑

一、Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/asaad]]

在重新配置tomcat的时候会遇到这种情况,一般报错如下:
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8006]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:4)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:441)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
下面是具体的解决方案:
1、右击web工程-》属性或Build Path-》Java Build Path->Libraries-> Add Libray...->Server Runtime -》Tomcat Server
2、切换到Java Build Path界面中的Orader and Export,选择Tomcat。

注意:
按以上方法操作时,若打开Server Runtime后一片空白,需要设置Apache服务器。设置方法为:window->Preferences->Server->Runtime Environment -> add --> 选择Apache的版本后点Next,再填入你apache服务器软件的安装(解压后)地址。

二、Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener java.lang.IllegalArgumentException

报错:

Exception thrown from LifecycleProcessor on context close
java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Tue Dec 27 21:06:21 CST 2016]; root of context hierarchy
at org.springframework.context.support.AbstractApplicationContext.getLifecycleProcessor(AbstractApplicationContext.java:360)
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1057)
at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1010)
at org.springframework.web.context.ContextLoader.closeWebApplicationContext(ContextLoader.java:549)
at org.springframework.web.context.ContextLoaderListener.contextDestroyed(ContextLoaderListener.java:143)
at org.apache.catalina.core.StandardContext.listenerStop(StandardContext.java:4859)
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5478)
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:160)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@414bb830: defining beans [admin,advice,business,code,comment,day,job,jobInter,jobType,orders,page,user,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,businessServiceImpl,commentServiceImpl,jobServiceImpl,ordersServiceImpl,userServiceImpl,dataSource,log-filter,sqlSessionFactory,org.mybatis.spring.mapper.MapperScannerConfigurer#0,gson,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy

出现这类报错,一般是spring版本与当前jdk版本不兼容造成的,笔者装的是 jdk1.8 ,spring是3.2的,所以报错了。解决方案是:更新 Spring-Core 到 4.0.(貌似3.2.16 也可以~~)以上或者将jdk降到1.7即可,传送门~~stack一哥们的解决方案

三、mysql远程连接失败

Mysql为了安全性,在默认情况下用户只允许在本地登录,但有时候还是需要远程连接,解决办法:

1、允许root用户在任何地方进行远程登录,并具有所有库任何操作权限,

具体操作如下:

在本机先使用root用户登录mysql: mysql -u root -p"youpassword" 
进行授权操作:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

重载授权表:
FLUSH PRIVILEGES;
即可。但不建议这样操作,因为这样任何人都可能登陆

2、允许root用户在一个特定的IP进行远程登录,并具有所有库任何操作权限,具体操作如下:

 在本机先使用root用户登录mysql: mysql -u root -p"youpassword" 进行授权操作: GRANT ALL PRIVILEGES ON *.* TO root@"172.16.16.152" IDENTIFIED BY "youpassword" WITH GRANT OPTION; 重载授权表: FLUSH PRIVILEGES; 退出mysql数据库: exit

3、删除用户授权:

需要使用REVOKE命令,具体命令格式为: REVOKE privileges ON 数据库[.表名] FROM user-name; 具体实例,先在本机登录mysql: mysql -u root -p"youpassword" 进行授权操作: GRANT select,insert,update,delete ON TEST-DB TO test-user@"172.16.16.152" IDENTIFIED BY "youpassword"; 再进行删除授权操作: REVOKE all on TEST-DB from test-user; ****注:该操作只是清除了用户对于TEST-DB的相关授权权限,但是这个“test-user”这个用户还是存在。 最后从用户表内清除用户: DELETE FROM user WHERE user="test-user"; 重载授权表: FLUSH PRIVILEGES; 退出mysql数据库: exit

4、MYSQL权限详细分类: 

全局管理权限: FILE: 在MySQL服务器上读写文件。 PROCESS: 显示或杀死属于其它用户的服务线程。 RELOAD: 重载访问控制表,刷新日志等。 SHUTDOWN: 关闭MySQL服务。 数据库/数据表/数据列权限: ALTER: 修改已存在的数据表(例如增加/删除列)和索引。 CREATE: 建立新的数据库或数据表。 DELETE: 删除表的记录。 DROP: 删除数据表或数据库。 INDEX: 建立或删除索引。 INSERT: 增加表的记录。 SELECT: 显示/搜索表的记录。 UPDATE: 修改表中已存在的记录。 特别的权限: ALL: 允许做任何事(和root一样)。 USAGE: 只允许登录--其它什么也不允许做。

四、云服务器不能通过80端口访问

看看你的防火墙有没有开着,把它关掉。 笔者是用腾讯云服务器的,在腾讯云的后台控制中心,选择 默认全放通的安全组,选择了注意要强化下服务器密码。如果还不行,检查是否安装了IIS? 如果安装了IIS角色,请先停止IIS服务.,或者直接删除掉。实在不行就通过netstat -ano|findstr 80找到80端口的PID ,然后到任务管理器把这个PID杀了。




持续更新~~~

<think>嗯,用户这次想找的是基于JavaWeb的玩具销售系统实现或示例。从对话历史看,用户之前关注过技术实现细节,可能是个开发者或者学生,正在做类似项目需要参考案例。用户引用的资料里提到JSP技术标准和部署注意事项,但更关键的是引用[2]里出现了“宠物管理系统”的示例,这和玩具销售系统在业务逻辑上有相似性。可惜那些链接都失效了,得想办法绕过。让我拆解核心需求:-系统类型:B/S结构的电子商务平台-核心技术栈:Servlet/JSP+MySQL这类经典组合-实现级别:需要可运行的demo级代码,而不仅是设计文档用户可能遇到的难点是:公开的玩具销售系统实例较少,但宠物/商城系统可复用性高。比如引用[2]提到的宠物店系统,把商品模型从“宠物用品”替换成“玩具”就基本适用。技术选型上要突出三点:1)MVC分层:用Servlet处理业务逻辑,JSP做视图展示,避免早期JSP里混写Java代码的坏实践2)持久层方案:用JDBC或MyBatis都可以,但MyBatis在引用[2]被提到过,可以优先考虑3)前端基础:HTML/CSS/JS组合足够,引用[3]的head示例说明用户理解前端基础突然想起Github有不错的教学项目,比如一个叫“JavaWeb-Shopping”的仓库,虽然不是专门卖玩具,但商品管理、购物车、订单模块完全通用。比推荐空洞的框架手册更实用。部署部分要强调测试验证(引用[2]的注意事项),建议用Tomcat9+MySQL8的组合,避免版本兼容问题。性能方面提醒连接池配置,这是新手常踩的。附功能清单时特别注意订单流程:玩具销售涉及库存扣减(比如热门玩具限量),这点和普通商城不同,参考案例里必须包含库存管理模块。用户没提具体技术深度,所以准备分两层推荐:基础实现用Servlet/JSP,进阶就上SpringBoot。后者虽然学习曲线陡峭,但引用[2]提到过SpringBoot手册,用户可能已有基础。</think> 以下是针对JavaWeb玩具销售系统的实现方案和资源参考,结合技术要点和可实操示例: ### 一、核心技术栈推荐 1. **基础框架** - Servlet 3.0+ & JSP:处理HTTP请求和动态页面渲染 - JDBC 或 MyBatis:数据库操作(优先选MyBatis,见引用[2]的框架推荐) - MySQL 8.0:事务型数据库存储商品/订单数据 ```xml <!-- MyBatis 依赖示例 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> ``` 2. **前端技术** - Bootstrap 5 + jQuery:响应式界面开发(如商品展示页) - AJAX:实现购物车动态更新(引用[3]的JS脚本加载逻辑适用) --- ### 二、核心功能模块实现 #### 1. 商品管理模块 ```java // Servlet处理商品搜索请求 public class ProductServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) { String keyword = request.getParameter("keyword"); List<Toy> toys = new ProductDao().searchToys(keyword); request.setAttribute("toys", toys); request.getRequestDispatcher("/products.jsp").forward(request, response); } } ``` #### 2. 购物车实现(Session存储) ```jsp <%-- JSP中操作购物车 --%> <% Cart cart = (Cart) session.getAttribute("cart"); if(cart == null) cart = new Cart(); // 添加商品到购物车 if("add".equals(request.getParameter("action"))){ Toy toy = toyService.getById(Integer.parseInt(request.getParameter("id"))); cart.addItem(toy, 1); session.setAttribute("cart", cart); } %> ``` #### 3. 订单生成(数据库事务处理) ```java // 订单服务类 public class OrderService { @Transactional public void createOrder(Cart cart, User user) throws SQLException { // 1. 插入订单主记录 // 2. 插入订单明细 // 3. 更新库存(注意事务一致性) } } ``` --- ### 三、部署关键要点(参考引用[2]) 1. **服务器配置** - Tomcat 9.x+ 配置连接池(如HikariCP) - 设置UTF-8编码解决中文乱码: ```xml <!-- web.xml配置 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> ``` 2. **安全实践** - 密码加密:使用BCrypt加密用户密码 - XSS防护:过滤用户输入的HTML标签 ```java String safeInput = Jsoup.clean(rawInput, Whitelist.basic()); ``` --- ### 四、可参考的开源项目 1. **[JavaWeb-Shopping](https://github.com/your-repo/javaweb-shopping)**(将宠物改为玩具即可复用) - 包含模块:用户中心、商品管理、购物车、订单流程 - 技术栈:Servlet/JSP + MySQL + 前端Bootstrap 2. **SSM玩具商城**(Spring+SpringMVC+MyBatis进阶版) - 含微信支付集成和库存预警功能 - 参考引用[2]中提到的Spring Boot手册实现 --- ### 五、避指南 1. **并发问题** - 购物车修改需同步:`synchronized(cart){...}` - 库存超卖解决:SQL语句`UPDATE stock SET count=count-1 WHERE count>0` 2. **性能优化** - 数据库:为商品名称字段`toy_name`添加索引 - 前端:启用CDN加载静态资源(引用[3]的CSS/JS加载方式) > **部署验证流程**(引用[2]注意事项) > 1. 测试环境模拟高并发订单创建 > 2. 用JMeter压测购物车接口 > 3. 检查Tomcat日志监控SQL执行时间
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值