#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. как получить результат и отобразить его на веб-странице?