从Plain Java应用程序调用JSP并获得响应

时间:2015-06-23 04:52:59

标签: java jsp

我有一个包含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文件中获取这些值。我做错了吗?我想通过我在代码中提供的方法获取这些参数值。有人可以帮忙吗?

3 个答案:

答案 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();