2014-01-06 5 views
2
import java.net.*; 
import java.io.*; 
public class sample 
{ 
    public static void main (String args[]) 
    { 
     String line; 
     try 
     { 
      URL url = new URL("http://localhost:8080/WeighPro/CommPortSample"); 
      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
      line = in.readLine(); 
      System.out.println(line); 
      in.close(); 
     } 
     catch (Exception e) 
     { 
      System.out.println("Hello Project::"+e.getMessage()); 
     } 
    } 
} 

Моего сервлет ссылающийся на другую страницу JSP, как ниже,Вызов сервлета из Java основного метода

RequestDispatcher rd=request.getRequestDispatcher("index.jsp"); 
rd.forward(request, response); 

Я не получаю реакцию/вывода в браузере, где сервлет должен выполняться один раз он вызывается.

Я пропустил какой-либо базовый шаг для этого процесса? Пожалуйста помоги!!!

+0

как делает ваш сервлет выглядеть? что произойдет, если вы введете адрес в отдельный браузер? –

+0

Мой сервлет просто отправляется на другую страницу jsp, RequestDispatcher rd = request.getRequestDispatcher ("index.jsp"); rd.forward (запрос, ответ); – Mathu

+0

браузер не загружается! Фактически, мой jsp, на который он отправляется, состоит из таблицы, и он будет отображаться в браузере. – Mathu

ответ

2

Если вы хотите, чтобы открыть его в браузере попробовать этот

java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://localhost:8080/WeighPro/CommPortSample")); 
+0

Спасибо, я попробовал ваш код, который на самом деле вызывает браузер, чтобы открыть данный URL-адрес, но в сервлет. Я устанавливаю атрибут, чтобы получить запрос в index.jsp, поэтому эта операция будет отсутствовать, когда я пытаюсь выше кода. – Mathu

+0

@Mathu Открытие URL-адреса просто вызовет ваш сервлет, поэтому как эта операция будет пропущена.? –

+0

Thank You So much, It's working - он вызывает сервлет сейчас, он не работал, так как я не передал требуемое значение в URL-адресе. – Mathu

-2

Просто вы не можете этого сделать.

Отклик и пара запросов будут созданы веб-контейнером. Вы не можете создать объект ответа и отправить его в браузер.

Кстати, какой клиент/браузер вы ожидаете получить ответ? Без понятия. Правильно ?

Когда контейнер получает запрос от клиента, тогда он генерирует объект ответа и служит для доступа к этому ответу в методе службы.

Если вы хотите увидеть/проверить ответ, вы должны запросить оттуда.

+2

Downvoter вы можете прокомментировать? –

+0

Я не дубликат, но, пожалуйста, объясните мне эту строку: «Вы не можете создать объект ответа и отправить в браузер». ! Что вы пытаетесь передать? – NINCOMPOOP

+0

И, во-вторых, заявив: «Просто вы не можете этого сделать». , что вы пытаетесь сказать - «Вы не можете вызвать Servlet из POJO» ??? – NINCOMPOOP

1

Вопрос не ясен. Вы действительно хотите вызвать Servlet из метода Main, или хотите сделать HTTP-запрос в своем веб-приложении?

Если вы хотите сделать HTTP-запрос, я не вижу никаких очевидных проблем с вашим кодом выше, что заставляет меня думать, что проблема в сервлете. Вы также отмечаете, что вы ничего не получаете в браузере, но выполнение вашей программы выше не связано с браузером.

ли вы имеете в виду, что вы не получите ответ, когда вы идете в

http://localhost:8080/WeighPro/CommPortSample 

в браузере?

Как говорит Суреш, вы не можете вызвать сервлет непосредственно из основного метода. Ваш Servlet должен вместо этого вызывать методы для других классов, а те другие классы должны быть вызваны из основного метода или из тестовых случаев. Вам необходимо архивировать ваше приложение, чтобы сделать это возможным.

+0

Лучший ответ, но он запрашивает ресурс по URL-адресу «http: // localhost: 8080/WeighPro/CommPortSample», конечным результатом которого является контейнер, вызывающий Servlet. – NINCOMPOOP

+0

'http: // localhost: 8080/WeighPro/CommPortSample' Когда я вхожу в этот URL, он показывает мне результат! Из основного метода я фактически передаю значение сервлету, из сервлета одно и то же значение должно быть передано на страницу index.jsp с использованием request.setAttribute. Поэтому из метода Main можно вызвать сервлет, который выполняет диспетчер в браузере. – Mathu

+0

Когда я выполняю основной метод, могу ли я ожидать вывода в браузере, просто вызвав сервлет? – Mathu

0
import java.io.BufferedInputStream; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 

public class OutBoundSimul { 

    public static void main(String[] args) { 

     sendReq(); 

    } 

    public static void sendReq() { 
     String urlString = "http://ip:port/applicationname/servletname"; 

     String respXml = text; 

     URL url = null; 

     HttpURLConnection urlConnection = null; 
     OutputStreamWriter out = null; 
     BufferedInputStream inputStream = null; 
     try { 
      System.out.println("URL:"+urlString); 
      url = new URL(urlString); 
      urlConnection = (HttpURLConnection)url.openConnection(); 
      urlConnection.setDoInput(true); 
      urlConnection.setDoOutput(true); 
      urlConnection.setRequestMethod("POST"); 
      System.out.println("SendindData"); 
      out = new OutputStreamWriter(urlConnection.getOutputStream()); 
      System.out.println("Out:"+out); 
      out.write(respXml); 
      out.flush(); 
      inputStream = new BufferedInputStream(urlConnection.getInputStream()); 
      int character = -1; 
      StringBuffer sb = new StringBuffer(); 
      while ((character = inputStream.read()) != -1) { 
       sb.append((char) character); 
      } 
      System.out.println("Resp:"+sb.toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 

} 
+0

Я уверен, что код прекрасен, но вы могли бы добавить какое-то объяснение относительно того, что он делает? Я могу понять, для чего он нужен, но кто-то менее опытный не может. Кроме того, вы уверены, что хотите получить POST-запрос? – NickJ

+0

@RahulJi 'String respXml = "text";' Каким должен быть вход для этой переменной? Путь Web.xml? или? – Mathu

+0

Вы можете установить метод запроса как GET или POST ... В respXml вы можете указать, какие данные вам нужно передать сервлету ... –

0

Вызов сервлет параметры запроса Форма Основной метод

Java IO

public static String accessResource_JAVA_IO(String httpMethod, String targetURL, String urlParameters) { 
    HttpURLConnection con = null; 
    BufferedReader responseStream = null; 
    try { 
     if (httpMethod.equalsIgnoreCase("GET")) { 
      URL url = new URL(targetURL+"?"+urlParameters); 
      responseStream = new BufferedReader(new InputStreamReader(url.openStream())); 
     }else if (httpMethod.equalsIgnoreCase("POST")) { 
      con = (HttpURLConnection) new URL(targetURL).openConnection(); 
      // inform the connection that we will send output and accept input 
      con.setDoInput(true); con.setDoOutput(true); con.setRequestMethod("POST"); 
      con.setUseCaches(false); // Don't use a cached version of URL connection. 
      con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      con.setRequestProperty("Content-Length", Integer.toString(urlParameters.getBytes().length)); 
      con.setRequestProperty("Content-Language", "en-US"); 

      DataOutputStream requestStream = new DataOutputStream (con.getOutputStream()); 
      requestStream.writeBytes(urlParameters); 
      requestStream.close(); 

      responseStream = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); 
     } 

     StringBuilder response = new StringBuilder(); // or StringBuffer if not Java 5+ 
     String line; 
     while((line = responseStream.readLine()) != null) { 
      response.append(line).append('\r'); 
     } 
     responseStream.close(); 
     return response.toString(); 
    } catch (Exception e) { 
     e.printStackTrace();  return null; 
    } finally { 
     if(con != null) con.disconnect(); 
    } 
} 

Apache Commonsиспользование commons- ~.банк {httpclient, logging}

public static String accessResource_Appache_commons(String url){ 
    String response_String = null; 

    HttpClient client = new HttpClient(); 

    GetMethod method = new GetMethod(url); 
// PostMethod method = new PostMethod(url); 
    method.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1"); 
    method.setQueryString(new NameValuePair[] { 
     new NameValuePair("param1","value1"), 
     new NameValuePair("param2","value2") 
    }); //The pairs are encoded as UTF-8 characters. 
    try{ 
     int statusCode = client.executeMethod(method); 
     System.out.println("Status Code = "+statusCode); 

     //Get data as a String OR BYTE array method.getResponseBody() 
     response_String = method.getResponseBodyAsString(); 
     method.releaseConnection(); 
    } catch(IOException e) { 
     e.printStackTrace(); 
    } 
    return response_String; 
} 

Apache использования httpclient.jar

public static String accessResource_Appache(String url) throws ClientProtocolException, IOException{ 
    try { 
     CloseableHttpClient httpclient = HttpClients.createDefault(); 
     URIBuilder builder = new URIBuilder(url) 
           .addParameter("param1", "appache1") 
           .addParameter("param2", "appache2"); 

     HttpGet method = new HttpGet(builder.build()); 
//  HttpPost method = new HttpPost(builder.build()); 

     // Create a custom response handler 
     ResponseHandler<String> responseHandler = new ResponseHandler<String>() { 
      @Override 
      public String handleResponse(final HttpResponse response) throws IOException { 
       int status = response.getStatusLine().getStatusCode(); 
       if (status >= 200 && status < 300) { 
        HttpEntity entity = response.getEntity(); 
        return entity != null ? EntityUtils.toString(entity) : null; 
       } 
       return ""; 
      } 
     }; 
     return httpclient.execute(method, responseHandler); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Jersyиспользование JARS {клиент, ядро, сервер}

public static String accessResource_JERSY(String url){ 
    ClientConfig config = new DefaultClientConfig(); 
    Client client = Client.create(config); 
    WebResource service = client.resource(url); 
    ClientResponse response = service.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class); 
    if (response.getStatus() != 200) { 
     System.out.println("GET request failed >> "+ response.getStatus()); 
    }else{ 
     String str = response.getEntity(String.class); 
     if(str != null && !str.equalsIgnoreCase("null") && !"".equals(str)){ 
      return str; 
     } 
    } 
    return ""; 
} 

Java Основной метод

public static void main(String[] args) throws IOException { 

    String targetURL = "http://localhost:8080/ServletApplication/sample"; 
    String urlParameters = "param1=value11&param2=value12"; 

    String response = ""; 
//  java.awt.Desktop.getDesktop().browse(java.net.URI.create(targetURL+"?"+urlParameters)); 
//  response = accessResource_JAVA_IO("POST", targetURL, urlParameters); 
//  response = accessResource_Appache_commons(targetURL); 
//  response = accessResource_Appache(targetURL);  
    response = accessResource_JERSY(targetURL+"?"+urlParameters); 
    System.out.println("Response:"+response); 
} 
Смежные вопросы