У меня есть немного сложный вопрос. Я пытаюсь найти лучший способ использовать ваниль HttpServlet
из проекта Spring-Flex (с BlazeDS), над которым я работаю. У моей команды есть HttpServlet, который они использовали в прошлом (созданный другой командой), который обрабатывает запрос, учитывая несколько пар ключ / значение, переданных через HTTP GET. Я хочу использовать этот класс HttpServlet для выполнения той же работы, но я хочу вызывать его на Java, когда мой клиент Flex вызывает метод для службы. В идеале класс, вызывающий HttpServlet, может использовать стандартные аннотации @Service
и @RemotingDestination
( см. Здесь ).
Итак, это HttpServlet:
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SomeServlet extends HttpServlet {
private int responseCode;
private String responseMsg;
private String dynamicValue;
public void processRequest(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
try {
res.setContentType("text/html");
res.setHeader("Cache-Control", "no-cache");
PrintWriter out = res.getWriter();
StringBuffer postdata = new StringBuffer();
StringBuffer parameterssb = new StringBuffer();
HttpURLConnection conn = null;
if (req.getParameter("dynamicValue") != null)
dynamicValue = req.getParameter("dynamicValue").toString();
parameterssb.append("key=value&key2=" + dynamicValue);
postdata.append("GET /wr/ProcessIt.asp HTTP/1.0\n");
postdata.append("Pragma: no-cache\n");
postdata.append("Content-Type: application/x-www-form-urlencoded\n");
postdata.append("Content-Length: " + parameterssb.length() + "\n");
postdata.append("\n");
postdata.append(parameterssb.toString());
postdata.append("\n\n");
String urlString = "";
urlString = "http://domain.com/wr/ASP_processing_page.asp";
URL url = new URL(urlString);
HttpURLConnection.setFollowRedirects(true);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoOutput(true);
conn.connect();
OutputStreamWriter osw = new OutputStreamWriter(
conn.getOutputStream());
osw.write(postdata.toString());
osw.flush();
responseCode = conn.getResponseCode();
responseMsg = conn.getResponseMessage();
String redirURL = conn.toString();
if (redirURL.indexOf("success=yes") >= 0) {
// Handle success
} else {
// Handle failure
}
if (conn != null) {
conn.disconnect();
}
out.close();
} catch (Exception e) {
// Handle failure
}
}
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processRequest(req, resp);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
processRequest(req, resp);
}
}
Я пытаюсь понять, как написать мой @Service
класс. Я пытался пройти несколько разных дорог, но мне не повезло. До сих пор я рассмотрел и придумал второстепенные вопросы по этому вопросу (но мне еще предстоит выработать решение):
- Нужна ли мне
@Controller
для такого рода работы?
- Нужна ли фабрика сервлетов?
- Может ли HttpServlet быть управляемым компонентом Spring и вызывать страницу ASP другим способом?
- (мне эта идея нравится меньше всего) Должен ли я вызвать HttpServlet из Flex и использовать ведение журналов и данных, необходимых сервлету, с помощью Remote Object ?
Причиной моего упрямства в желании сделать это из Java является то, что я хочу вести некоторые журналы и, возможно, использовать некоторые другие компоненты Singleton в рамках класса @Service
. Тем не менее, я решаю это, я хочу быть как можно ближе к «Best Practices». Кто-нибудь может предложить какую-нибудь помощь?