【问题标题】:simple JSP Page not loading简单的 JSP 页面未加载
【发布时间】:2013-07-30 09:10:11
【问题描述】:

以下jsp代码出错:

 <%@ page import ="java.sql.*" %>
<%@ page import ="javax.sql.*" %>
<%
String user=request.getParameter("userid"); 
session.putValue("userid",user); 
String pwd=request.getParameter("pwd"); 
String fname=request.getParameter("fname"); 
String lname=request.getParameter("lname"); 
String email=request.getParameter("email"); 
Class.forName("com.mysql.jdbc.Driver"); 
java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test",
"root","123"); 
Statement st= con.createStatement(); 
ResultSet rs; 
int i=st.executeUpdate("insert into users values ('"+user+"','"+pwd+"','"+fname+"',
'"+lname+"','"+email+"')"); 


%>

得到的错误如下:

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 15 in the jsp file: /db/reg.jsp
String literal is not properly closed by a double-quote
12: "root","123"); 
13: Statement st= con.createStatement(); 
14: ResultSet rs; 
15: int i=st.executeUpdate("insert into users values ('"+user+"','"+pwd+"','"+fname+"',
16: '"+lname+"','"+email+"')"); 
17: 
18: 


Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:469)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

我不知道这里出了什么问题。我是jsp新手,所以请帮我做一个简单的解释。端口号、用户名密码和其他对 jsp 文件正确的内容。还有什么我忽略的。请帮我纠正错误。

【问题讨论】:

  • 我不认为你已经展示了你的 JSP 的正确部分。你已经展示了一个选择,但你的错误是指插入。
  • 抱歉代码错误。现在检查我已经编辑了它
  • ..还有另一件事。你说你在学习JSP,所以我想指出你的例子中有很多不好的东西,比如在JSP中做DB工作,以及SQL注入。
  • 您还必须放置 try 和 catch 块。因为 Class.forName 会抛出 ClassNotFoundException .. 并且数据库连接也...

标签: java html jsp


【解决方案1】:

首先,don't use scriptlets in JSP file,你可以在 Servlet 或一些 DAO 类中拥有这个逻辑。

接下来,下面一行应该是一行:

java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123"); 

甚至把它放在一行中:

int i=st.executeUpdate("insert into users values ('"+user+"','"+pwd+"','"+fname+"','"+lname+"','"+email+"')"); 

最好用占位符构造一个查询字符串并使用PreparedStatement 并设置每个值。它将防止所有这些字符串格式问题以及来自SQL Injection

String query = "insert into users values (?,?,?,?,?,?)";
PreparedStatement statement = connection.prepareStatement(query);
statement.setString(user);
.............
.............
int updateSuccessful = statement.executeUpdate();

【讨论】:

  • 查询语句有什么问题?
  • 看我从9lessons.info/2008/09/…得到这个例子,
  • 那里似乎工作正常。我只是想知道为什么现有代码不起作用
  • 您看过该网站吗?你能帮我解决这个问题吗
【解决方案2】:

怀疑String 格式,试试这个:

java.sql.Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+
"test","root","123"); 

【讨论】:

    【解决方案3】:

    您必须包含带双引号的字符串文字 -> "。我无法运行代码,但您的错误在您的 sql 语句中。术语“插入用户值”被解释为字符串。

    【讨论】:

    • 它应该被解释为一个字符串,不是吗?
    • 试试新白痴已经回答的提示。对不起,我不想冒犯。这只是他的绰号。您可以更好地使用带有占位符的“准备好的语句”并稍后插入值。
    猜你喜欢
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多