ich nutze ein Servlet auf Apache Tomcat. Den Code dafür habe ich aus irgendeinem Javabuch entnommen. In diesem Servlet wird die Post-Anfrage automatisch an GET weitergeleitet.
Ist es sinnvoll, das so zu machen? Kann ich das aus dem GET einfach entfernen und den Code direkt im POST ausführen? Ich nutze das Servlet nur für POST-Aufrufe...
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
BufferedReader in = request.getReader();
String key = in.readLine();
if (key != null) {
result = ovp.processInput(key, s);
out.println(result);
}
}
/*
* (non-Java-doc)
*
* @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request,
* HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
Ich find diesen Ansatz einfacher:
1. die Namen der benötigten Felder in einen java.util.Set schreiben (name hier: setRequiredFields). Am besten natürlich extern auslesbar. In web.xml, spring-config.xml (in meinem Fall ist es bei so was meist das) oder properties Datei.
Dann ungefähr so:
Map mResOpenView = New HashMap ();
Enumeration allReqParamNames = request.getParameterNames();
while (allReqParamNames.hasMoreElements()) {
String reqParamName = allReqParamNames.nextElement().toString();
if (setRequiredFields.contains(reqParamName) {
String value = req.getParameter(reqParamName);
mResOpenView.put(reqParamName, value);
}
}
// mResOpenView irgendwie nach openView übergeben.
halte das für am einfachsten und transparentesten.
Gruß Axel
du kannst z.B. die zu überprüfenden Parameter als komma-separierte Liste in einen Tag der web.xml schreiben.
https://wiki.imise.uni-leipzig.de/Themen/WebApp/WebXml#h686-7
In deinem Fall wäre das so ungefähr:
<context-param>
<param-name>requiredFields</param-name>
<param-value>name,strasse, plz, ort</param-value>
<description>list of names of request Parameters to monitor.</description>
</context-param>
Dann die Liste als Property der Klasse.
class MyServlet extends Servlet {
private Set setRequiredFields = new HashSet();
//@override von GenericServlet
public void init( ServletConfig config) {
ServletContext context = config.getServletContext(); // muss nicht sein.
String rawInitParameter = context.getInitParameter("requiredFields");
String[] initParametersAsArray = rawInitParameters.split(",");
for (int i=0; i <initParametersAsArray.length; i++) {
String param = initParametersAsArray[i].trim();
if ((param!=null) && (param.length() > 0))
setRequiredFields.add(initParametersAsArray[i].trim());
}
}
setRequiredFields = new HashSet()
public void doPost (HttpServletRequest req, HttpServletResponse res)
[...]
}
Das Servlet läuft ja Multithreaded. D.h. es bedient mehrere Requests (sogar quasi gleichzeitig). Die init-Methode wird aber nur genau einmal beim Start des Servlets aufgerufen.