如何从JSP中读取值到Java类(仅运行Java类场景)
如何通过独立Java类从JSP读取变量值
嘿,我看你想通过独立运行的Java类(SAMPLE.java)从JSP页面里拿到变量值对吧?你当前的代码逻辑有点绕——现在是JSP主动调用Java类的方法,而不是Java类主动获取JSP里的变量。我来帮你调整下,让流程更顺畅:
1. 先调整JSP的输出逻辑
你的JSP原本直接调用SAMPLE.getValue(),这不符合“Java类读取JSP变量”的需求。我们需要让JSP把处理后的变量值输出到HTTP响应里,这样发起请求的Java类就能读取到:
<%@page import="java.sql.*" %> <% Class.forName("com.mysql.jdbc.Driver").newInstance(); Connection conn = null; String mphone = request.getParameter("mobile"); int mcompregkeyid = 0; try { conn = DriverManager.getConnection("jdbc:mysql://localhost/myschema","myuser","mypass"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("Select max(keyid) from mytable"); // 加个判断避免空指针异常 if(rset.next()) { mcompregkeyid = rset.getInt(1); } // 把变量值输出到响应中,供Java类读取 out.print(mcompregkeyid); } catch (Exception e) { // 异常时输出错误信息 out.print("Error: " + e.getMessage()); } finally { // 确保数据库连接关闭 if (conn != null) { try { conn.close(); } catch (SQLException e) { out.print("Could not connect to local server. Please try after some time.!!!"); } } } %>
2. 修改Java类代码,读取JSP的响应
你的Java类目前只建立了连接,但没读取JSP返回的内容。我们要添加代码来获取响应,拿到变量值:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class SAMPLE { public static void main(String[] args) { String mmobile = "1234567890"; // 替换成你实际要传递的mobile值 URL myURL = null; URLConnection myURLConnection = null; BufferedReader reader = null; try { // 构造带参数的请求URL String mainUrl = "http://localhost:8080/Portal/example.jsp?mobile=" + mmobile; myURL = new URL(mainUrl); myURLConnection = myURL.openConnection(); myURLConnection.connect(); // 读取JSP返回的响应内容 reader = new BufferedReader(new InputStreamReader(myURLConnection.getInputStream())); String response = reader.readLine(); if (response != null) { // 成功拿到JSP返回的变量值 System.out.println("从JSP获取到的keyId:" + response); // 调用类中的方法处理这个值(如果需要) getValue(response); } } catch (IOException e) { e.printStackTrace(); } finally { // 关闭资源,避免内存泄漏 try { if (reader != null) reader.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void getValue(String keyId) { // 这里写你自己的业务逻辑 System.out.println("正在处理keyId:" + keyId); } }
3. 几个关键注意点
- 现在的流程是:Java类发起HTTP请求到JSP → JSP处理数据库查询 → JSP把变量值输出到响应 → Java类读取响应拿到变量值,完全符合你“仅运行Java类,从JSP读取变量”的需求。
- 记得确保你的Web服务器(比如Tomcat)已经启动,JSP页面部署在
http://localhost:8080/Portal/路径下。 - 代码里加了异常处理和资源关闭,避免出现内存泄漏或空指针问题。
内容的提问来源于stack exchange,提问作者A Singh
相关产品推荐
相关产品推荐

