java - 执行jsp时无法为JSP编译类
问题描述
我一直在努力让这个项目工作,这个项目在五六年前开发时正在工作,不知道如何让它再次工作。有一个登录表单,每当我尝试这样做时,我都会收到错误
An error occurred at line: [14] in the jsp file: [/web/user2.jsp]
databasecon cannot be resolved
11: String id=null,name=null,userid=null,email=null;
12: try{
13:
14: Connection con = databasecon.getconnection();
15: PreparedStatement ps=con.prepareStatement("select id,name,userid,email from user where userid='"+a+"' && pass='"+b+"'");
16: ResultSet rs=ps.executeQuery();
17: if(rs.next())
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:213)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:544)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:381)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:351)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:335)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:597)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
这是jsp代码
<%@ page import="java.sql.*,databaseconnection.*"%>
<%
String a=request.getParameter("user1");
String b=request.getParameter("pass");
String id=null,name=null,userid=null,email=null;
try{
Connection con = databasecon.getconnection();
PreparedStatement ps=con.prepareStatement("select id,name,userid,email from user where userid='"+a+"' && pass='"+b+"'");
ResultSet rs=ps.executeQuery();
if(rs.next())
{
id=rs.getString("id");
name=rs.getString("name");
userid=rs.getString("userid");
email=rs.getString("email");
session.setAttribute("id",id);
session.setAttribute("name",name);
session.setAttribute("userid",userid);
session.setAttribute("email",email);
//response.sendRedirect("user5.jsp");
response.sendRedirect("user3.jsp");
//out.print(name2);
}
else
{
out.println("enter correct user id and password");
}
}
catch(Exception e2){
out.println(e2.getMessage());
}
%>
java类
package databaseconnection;
import java.sql.*;
public class databasecon
{
static Connection con;
public static Connection getconnection()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/tpa","root","root");
}
catch(Exception e)
{
System.out.println("class error");
}
return con;
}
}
这就是我在 web.xml 中的内容
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
我已经提供了我可以看到人们使用的所有内容,但我无法使其正常工作。
解决方案
目前尚不清楚问题是 JSP 的语法问题还是类路径问题。
我看到的教程都是在导入多个类时在逗号后显示一个空格;例如
<%@ page import="java.sql.*, databaseconnection.*"%>
^
另一方面,我查看的 JSP 2.3 规范并没有明确要求空格。它说:
“该值与 Java 编程语言中的导入声明中一样,是一个(逗号分隔)列表,要么是表示该类型的完全限定 Java 编程语言类型名称,要么是后跟
.*
字符串的包名称,表示所有公共类型在那个包裹里声明。”
或者,您可以使用单独的导入;例如
<%@ page import="java.sql.*"%>
<%@ page import="databaseconnection.*"%>
问题也可能是您没有正确地将包含已编译databasecon
类的 JAR 包含在 webapp 的 WAR 文件中。
话说回来:
忽略 Java 标识符约定是一个坏主意。类名应以大写字母开头。
在 JSP 中嵌入业务逻辑(例如数据库查询)是一个坏主意。最好只使用 JSP 进行渲染。有许多的原因; 有关摘要,请参阅JSTL 与 JSP Scriptlets。
通过字符串连接创建查询是一个非常糟糕的想法,尤其是当某些字符串组件取自用户请求参数时。阅读有关SQL 注入攻击的信息。您应该使用
PreparedStatement
.在数据库中存储密码(明文或加密)是一个非常糟糕的主意;看
推荐的方法是存储加盐的加密哈希。
推荐阅读
- node.js - 重置已运行 cron-node 作业的计时器
- angularjs - 如何使用 Angular js 通过控制器为每个产品详细信息页面传递动态标题和描述?
- python-3.x - 如何防止在从庞大的数据集中仅预测一行数据时出现 0 个样本(形状 =(n,0))的数组的错误?
- android - TextInputLayout 标签颜色不变
- angular - 角度 4.4:无法按表格的某些列排序
- wso2 - Siddihi Pattern 只触发一次
- flutter - 如何设置带有锥形边框的按钮的形状
- ios - 在 Swift 的 UITableView 中保留单元格?
- oracle - 在oracle sql中创建触发器
- android - 如何在我的测试中验证观察到的 ViewModel LiveData?