Замена Сриплетов Сервлетами в Java - PullRequest
0 голосов
/ 26 августа 2018

У меня есть страница JPS, с которой я хочу выполнить сценарий оболочки, размещенный на сервере: приведенный ниже код работает нормально, и сценарий "/tmp/Sample.sh" выполняется на сервере.

Теперь я хочучтобы сделать 2 вещи:

1.The script is getting executed as soon as page is loaded, but i want to execute it only when button is clicked.

2.I understand that use of scriplets is discouraged, what I googled is that I should call a servlet, when button is clicked, in which i can move the java code.

Я новичок в этих терминологиях, так как мой основной навык не Java.Я перечитал теорию сервлетов, но, не понимая, как именно я могу достичь выше двух функциональных возможностей.Любая помощь в достижении выше двух пунктов будет принята с благодарностью

<%@ 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></title>
</head>
<body>
   <%
    String unixCommand = "sh /tmp/Sample.sh";
    Runtime rt = Runtime.getRuntime();
    rt.exec(unixCommand);
   %>
</body>
</html>

ОБНОВЛЕННЫЙ КОД В СООТВЕТСТВИИ С ПРЕДЛОЖЕНИЯМИ:

http://10.111.24.21:7001/Project_1/Test_1.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></title>
</head>
<body>
<button onclick="location.href = 'http://10.111.24.21:7001/Project_1/JavaServletClass.java';" id="RedirectButton" > Execute</button>
</body>
</html>

http://10.111.24.21:7001/Project_1/JavaServletClass.java

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class JavaServletClass extends HttpServlet 
{
   public void init() throws ServletException { }
   private void ExampleMethod() throws IOException 
    {
      String unixCommand = "sh /tmp/Sample.sh";
      Runtime rt = Runtime.getRuntime();
      rt.exec(unixCommand);
    }

   public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  
    {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      ExampleMethod();
      out.println("<h1>" + "Method Executed" + "</h1>");          
    }

   public void destroy() {  }
}

1 Ответ

0 голосов
/ 26 августа 2018

Страница JSP в конечном итоге переводится в сервлет, поэтому вы можете сделать то же самое, что вы сделали в сервлете.Если использование JSP-страницы абсолютно необходимо, вы можете сделать следующее:

  1. Создать сервлет, следуя инструкциям по Создать сервлет
  2. Создать метод для выполнения команды
private void ExampleMethod() {
   String unixCommand = "sh /tmp/Sample.sh";
   Runtime rt = Runtime.getRuntime();
   rt.exec(unixCommand);
}
Вызов метода от doGet
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      // Set response content type
      response.setContentType("text/html");

      // Call commands
      PrintWriter out = response.getWriter();
      ExampleMethod();
      out.println("<h1>" + Method Executed + "</h1>");
   }

Заменить скриптлет в теле jsp на:

Выполнить

Заменить имя сервера, местоположение (localhost:8080) с вашими значениями ...

Забудьте все, что сервлеты и скрипты в HTML настолько стары, и их нельзя использовать больше
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...