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