как использовать или вызвать класс Java в сервлете и отобразить результат в jsp

#java #jsp #servlets

#java #jsp #сервлеты

Вопрос:

Я могу передать поисковый запрос в NewFile.jsp в сервлет HelloWorld и отобразить результат в wecome jsp. У меня есть другая программа, написанная в новом классе Java.Я не знаю, как передать условие поиска в класс Java. чтобы запустить программу.

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/HelloWorld</url-pattern>
  </servlet-mapping>
</web-app>
  

NewFile.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title> My JSP page </title>
    </head> 
    <body>      
        <form method="post" action="HelloWorld">            
             Please enter a Keyword <br>
            <input type="text" name="searchTerm"size="20px">
            <input type="submit" value="submit">                        
        </form>     
    </body> 
</html>
  

welcomepage.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%String X = (String)request.getAttribute("searchTerm");%>

 The search word is<%=X %>

<%-- welcom <%=request.getAttribute("searchTerm")%> --%>

</body>
</html>
  

сервлет: HelloWorld.java

 import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;

public class HelloWorld extends HttpServlet { 
  protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException 
  {
    doPost(request,response);

  }

  protected void doPost(HttpServletRequest request, 
          HttpServletResponse response) throws ServletException, IOException 
      {


    // ..........reading the user input
    String searchTerm= request.getParameter("searchTerm");  
  request.setAttribute("searchTerm",searchTerm);
  request.getRequestDispatcher("welcomepage.jsp").forward(request, response);


  }  

  }
  

другой javascript:
Myprogram.java

 public class ParameterPy {

public static void main(String a[]){
try{

String searchTerm="google";

ProcessBuilder pb = new ProcessBuilder("C:/Python27/python","D://program.py","" searchTerm);
Process p = pb.start();

BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));

System.out.println(".........start   process.........");  
String line = "";     
while ((line = bfr.readLine()) != null){
    System.out.println("Python Output: "   line);
}
System.out.println("........end   process.......");


}catch(Exception e){System.out.println(e);}
}
}
  

Как мне связать переменную searchterm в Myprogram.java с переменной в HelloWorld.java (замените «google» на поисковый запрос, вводимый пользователем в режиме реального времени) со времен HelloWorld.java — это сервлет, который может отображаться в jsp.

Комментарии:

1. Откуда вы хотите передать переменную searchterm в класс ParameterPy. 1) из формы в NewFile.jsp в класс ParameterPy 2) или из любого jsp / сервлета в класс ParameterPy

2. я создаю сервлет с именем HelloWorld.java , я хочу передать переменную из сервлета в класс java

Ответ №1:

Используйте приведенный ниже код:
Класс ParameterPy

 import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ParameterPy
{

    public static void myMethodName(String searchTerm)  
        {
            try
                {
                    ProcessBuilder pb = new ProcessBuilder("C:/Python27/python", "D://program.py", ""  searchTerm);
                    Process p = pb.start();

                    BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));

                    System.out.println(".........start   process.........");
                    String line = "";
                    while ((line = bfr.readLine()) != null)
                        {
                            System.out.println("Python Output: "   line);
                        }
                    System.out.println("........end   process.......");

                } catch (Exception e)
                {
                    System.out.println(e);
                }
        }
}
  

Сервлет HelloWorld:

 import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,  HttpServletResponse response) throws ServletException, IOException 
      {
        doPost(request,response);

      }

      protected void doPost(HttpServletRequest request, 
              HttpServletResponse response) throws ServletException, IOException 
          {
        // ..........reading the user input

      String searchTerm= request.getParameter("searchTerm");  

      ParameterPy.myMethodName(searchTerm);//Call to java class method

      request.setAttribute("searchTerm",searchTerm);
      request.getRequestDispatcher("welcomepage.jsp").forward(request, response);

      }  
} 
  

Для вашего запроса в комментариях прямо сейчас вы печатаете результат ParameterPy on System.out . Для отображения результата на jsp веб-странице вам нужен JspWriter объект, т.е. out .
Для этого я изменил вашу логику, как показано ниже, чтобы вернуть результат как String . Этот String результат будет отображен на странице jsp.

 import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ParameterPy
{
    public static String myMethodName2(String searchTerm)   
        {
            StringBuilder sb=null;
            try
                {
                    ProcessBuilder pb = new ProcessBuilder("C:/Python27/python", "D://program.py", ""  searchTerm);
                    Process p = pb.start();

                    BufferedReader bfr = new BufferedReader(new InputStreamReader(p.getInputStream()));

                    sb=new StringBuilder();
                    sb.append(".........start   process.........");
                    String line = "";
                    while ((line = bfr.readLine()) != null)
                        {
                            sb.append("Python Output: "   line);
                        }
                    sb.append("........end   process.......");

                } catch (Exception e)
                {
                    System.out.println(e);
                }
                return sb.toString();
        }
}
  

JSP:

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" import="stack.filter.ParameterPy"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
    String searchTerm = request.getParameter("searchTerm");
    out.println(ParameterPy.myMethodName2(searchTerm));
%>
</body>
</html>
  

Комментарии:

1. Большое спасибо. Я понял. кстати, могу я задать вам один вопрос? Если я хочу отобразить результат ParameterPy на странице jsp после вызова «ParameterPy.myMethodName (searchTerm);// Вызов метода класса java» в serlvet. как получить результат и отобразить его на веб-странице?