我有一个包含main方法的Java文件。我想从该java文件调用一个JSP页面,该文件将调用另一个java文件并将结果返回到我的主Java文件。第二个java文件将从数据库中获取结果。
流量
主要Java类 < ---> Jsp < ----> 另一个Java类
我的工作(编辑):
主Java文件:
public String someMethod() throws Exception
{
HttpClient client = new DefaultHttpClient();;
HttpEntity httpEntity = null;
String result=null;
HttpPost method = new HttpPost("url to jsp");
method.setHeader("Content-Type","application/xml");
int statusCode = 0;
try
{
List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
urlParameters.add(new BasicNameValuePair("parameterName1", "value"));
urlParameters.add(new BasicNameValuePair("parameterName2", "value"));
method.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse httpResponse = client.execute(method);
httpEntity = httpResponse.getEntity();
statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK)
{
//do some work
}
else
{
//do some work
}
return statusMessage;
}
catch(Exception e)
{
e.printStackTrace();
}
}
我的jsp:
<%
String parameter1 = (request.getParameter("parameterName1"));
String parameter2 = (request.getParameter("parameterName2"));
%>
通过这种方法调用了Jsp,但是我没有在jsp文件中获取参数值(获取空值)。但是如果我在url本身中添加参数(另一种称为Url Rewriting的方法),我会在jsp文件中获取这些值。我做错了吗?我想通过我在代码中提供的方法获取这些参数值。有人可以帮忙吗?
答案 0 :(得分:1)
JSP意味着在servlet容器下运行,例如Tomcat或Jetty。这是因为JSP可能具有依赖于容器服务的复杂代码:访问http会话,包含其他jsp片段,SSL等。 所以我个人只是以安全的方式运行它 - 要么是单独安装的Tomcat,要么是嵌入式Tomcat(=从我的Java代码启动,请参阅下面的注释)。然后我使用apache HttpClient从java调用它(它发送HTTP请求,就像它是一个浏览器一样)。
注意 - 如果您想使用嵌入式容器,可以查找:http://java.dzone.com/articles/embedded-tomcat-minimal
http://www.eclipse.org/jetty/documentation/current/embedding-jetty.html
请注意,可能需要进行一些调整。
答案 1 :(得分:1)
您可以尝试使用以下Java类代码 - &gt; JSP
URL url = new URL("<JSP page url>");
URLConnection conn = url.openConnection();
conn.connect();
有关网址的详细信息,请阅读以下内容:http://docs.oracle.com/javase/1.4.2/docs/api/java/net/URL.html
对于JSP - &gt; JAVA班级
第1步:在Jsp <%@ page import="mypackage.MyJavaClass" %>
步骤2:调用您的方法并从被调用方法返回值
<% MyJavaClass c = new MyJavaClass()
c.your_method();
%>
或者 如果您了解JAVA Beans,我建议您使用JAVA Beans。
<jsp:useBean id="cust" class="mypackage.MyJavaClass" scope="session"/>
答案 2 :(得分:0)
我是以一种不同的方式做到的。而不是内容类型为&#34; application / xml&#34;,我使用&#34; application / json&#34;并在地图中传递了一个参数。
主Java文件:
public String someMethod() throws Exception
{
Map reqMap = new LinkedHashMap();//contains your parameter and values
reqMap.put("parameter1", "value1");
reqMap.put("parameter2", value2);
HttpClient client = new DefaultHttpClient();;
HttpEntity httpEntity = null;
String result=null;
HttpPost httpPost = new HttpPost("url to jsp");
httpPost.setHeader("Content-Type","application/json");
httpPost.setHeader("Accept", "application/json");
int statusCode = 0;
try
{
JSONObject holder = new JSONObject(reqMap);//convert it to jsonObject
StringEntity stringEntity = new StringEntity(holder.toString());//convert it to StringEntity
httpPost.setEntity(stringEntity);//set the entity
httpPost.setEntity(new UrlEncodedFormEntity(urlParameters));
HttpResponse httpResponse = client.execute(httpPost);
httpEntity = httpResponse.getEntity();
statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK)
{
//do some work
}
else
{
//do some work
}
return statusMessage;
}
catch(Exception e)
{
e.printStackTrace();
}
}
在jsp中:
<%
StringBuilder stringBuilder = new StringBuilder();
BufferedReader reader = request.getReader();
try
{
String line;
while ((line = reader.readLine()) != null)
{
stringBuilder.append(line).append('\n');
}
}
finally
{
reader.close();
}
System.out.println(stringBuilder.toString());
%>
你会得到一个字符串。将其转换为JsonObject为
JSONObject jsonObject = new JSONObject(stringBuilder.toString());
并做进一步的工作。
添加:如果您愿意,可以根据您的要求在请求中传递List而不是Map(reqMap)。然后在jsp中你必须将字符串转换为
JSONArray jsonArray = new JSONArray(stringBuilder.toString());
注意:在项目中为Json包含jar。
对于从jsp到主类的响应,我添加了一个表达式标记(你可以随心所欲)并以json格式返回一个地图。
<%= gson.toJson(somemap) %>
在httpResponse中获得响应后,您可以执行类似这样的操作
InputStreamReader inputStreamReader = new InputStreamReader(httpResponse.getEntity().getContent());
BufferedReader bufferedreader = new BufferedReader(inputStreamReader);
String result = bufferedreader.readLine();