IDEA 学习 Servlet 报错及解决办法记录

1. Cannot resolve symbol ‘Servlet’

第一次使用 IDEA 写 Servlet 程序,结果提示我找不到这个类。
解决办法:idea “cannot resolve symbol servlet”的解决
方法二对我来说的最快速的解决办法,因为电脑已经安装好 TomCat,直接在 TomCat/lib 下面找到这个包然后装进去就可以了。

2. JDBC 获取 properties 为 null

这个报错我真的无语了。
在建立数据库连接之前,需要先获取 properties 文件作为 stream。
开始我是这样写道,

InputStream in 
	= getClass().getClassLoader().getResourceAsStream("mysql.properties");

然后疯狂报错,说 in 就是 null。
我查了查资料,然后换了一种写法

InputStream in 
	= JDBCTest.class.getResourceAsStream("mysql.properties");

结果 in 还是 null。
好嘛,我忍气吞声就为了你这个快被淘汰的破玩意找解决办法且找了个把小时,结果?我删掉 getClassLoader() 就可以了???宁有毒吧!

InputStream in = getClass().getResourceAsStream("mysql.properties");

为什么删掉就可以了呢?鄙人才疏学浅,根本不晓得为啥呀!

源码如下,有兴趣可以看看

/**
 * 编写一个通用的方法,在不修改源程序的情况下,可以获取任何数据库的连接
 * 解决方案:把数据库驱动Driver实现类的全类名、url. user. password放入一个
 * 配置文件中,通过修改配置文件的方式实现和具体的数据库解耦。
 */
public Connection getConnection() throws ClassNotFoundException, IllegalAccessException, InstantiationException, SQLException, IOException {
    String driverClass = null;
    String jdbcUrl = null;
    String user = null ;
    String password = null;

    // 读取文件,in 为什么是 null 呢?
    InputStream in = getClass().getResourceAsStream("mysql.properties");
    Properties properties = new Properties();
    properties.load(in);
    driverClass = properties.getProperty("driver");
    jdbcUrl = properties.getProperty("url");
    user = properties.getProperty("username");
    password = properties.getProperty("password");

    Driver driver = (Driver) Class.forName(driverClass).newInstance();
    Properties info = new Properties();
    info.put("user", user);
    info. put("password", password) ;
    Connection connection = driver.connect(jdbcUrl, info);
    return connection ;
}

mysql.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8
username=root
password=123

3. IDEA 中无法使用 JSP 页面中的 pageContext 对象

在这里插入图片描述

如图所示,pageContext 无法调用任何函数。
原因:是因为项目中没有引入 jsp 的包
解决方案: 去 Tomcat 中找 jsp-api.jar 并导入,导入方法如第 1 点。

4. 程序包com.mchange.v2.c3p0不存在

在这里插入图片描述

下载 c3p0 的包就可以了。地址:c3p0 下载地址
页面拉到最下面。
在这里插入图片描述

5. 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

解决办法:这篇文章的第一条评论

在这里插入图片描述

6. Encountered illegal body of tag “c:set” tag

这是因为该标签有 value 的时候,必须为空。比如以下代码会报错:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<c:set var="name" value="铁牛" scope="page">Set Name!</c:set>
<hr>
name: ${ pageScope.name }

</body>
</html>

换成

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<c:set var="name" value="铁牛" scope="page"></c:set>
name: ${ pageScope.name }

</body>
</html>

7. java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/ConditionalTagSupport

IDEA 中报错:
在这里插入图片描述
浏览器报错:
在这里插入图片描述

起因:我在 JSP 中使用了标签 <c:if>

<c:set value="20" var="ager" scope="request" />
<c:if test="${ requestScope.ager > 18 }" scope="session">
    成年了!
</c:if>

2000 YEARS LATER…

我哭了,居然是因为我忘记把 jstl.jar 放到 WEB/lib 下了。于是我按照第五点的方法,把该 jar 包放进去。然后我发现 <c:if> 中的 scope 错误。修改代码如下:

<h1>c: if —— 没有else,但可以把判断的结果储存起来,以备之后使用</h1> <br>
<c:set value="20" var="ager" scope="request" />
<c:if test="${ requestScope.ager > 18 }">成年了!</c:if>

<br>
<c:if test="${ param.age > 18 }" var="isAdult" scope="request" />
isAdult: <c:out value="${ requestScope.isAdult }" />
<hr>

<h1>c: choose, c: when, c: otherwise —— 可以实现 if ... else if ... 的效果</h1>
<c:choose>
    <c:when test="${ param.age > 60 }"> 老年 </c:when>
    <c:when test="${ param.age > 40 }"> 中年 </c:when>
    <c:when test="${ param.age > 18 }"> 青年 </c:when>
    <c:otherwise> 未成年 </c:otherwise>
</c:choose>

运行结果如下:
在这里插入图片描述

8. org.apache.tomcat.util.modeler. BaseModelMBean.invoke Exception invoking method

在这里插入图片描述
错误原因:
@WebServlet(name = “customerServlet”, urlPatterns = “/*.do”)

看出来错误了吗?再看一次:
@WebServlet(name = “customerServlet”, urlPatterns = “/*.do”)

是的,把 / 去掉就可以了。这种错误一般都是因为 urlPatterns 错了。
正确写法如下:
@WebServlet(name = “customerServlet”, urlPatterns = “*.do”)

9. java.lang.reflect.InvocationTargetException

在这里插入图片描述

我没有解决这个问题TAT

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值