User Tools

Site Tools


java:servlet

Servlet 3.0

Annotations

Annotation Bedeutung
@WebServlet(urlPatterns = {“/myservlet”, “.abc”})|Ersetzt Einträge <servlet> und <servlet-mapping>| |@WebServlet(…, initParams = {
@WebInitParam(name = “param”, value = “value”), … }) | Init-Parameter setzen (Werte in web.xml übersteuern die Werte in der Annotation)| |@WebFilter(filterName = “MyFilter”, initParams = {…}, urlPatterns = {“/mypattern”})|Ersetzt <filter> und <filter-mapping>| |@WebListener|Ersetzt <listener> in web.xml; gilt für alle möglichen Listener (Servlet
Listener, HttpSession*Listener
@WebServlet(…, asyncSupported = true)Asynchrone Ausführung von Servlet-Requests

Asynchrone Servlets

@WebServlet(name = "AsyncServlet", urlPatterns = {"/async"}, asyncSupported = true)
public class AsyncServlet extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        final AsyncContext ac = request.startAsync();
        ac.start(new Runnable() {
            public void run() {
                // lange, lange Berechnung
                try {
                    ac.getResponse().getWriter().println("Fertig!");
                    ac.complete();
                } catch (IOException ex) {
                    // handle/log exception
                }
            }
        });
        // Dieser http-Worker-Thread kann schon jetzt wieder neue Requests beantworten
        // während unser Client noch auf die Antwort wartet, die aber von einem anderen
        // Thread fertig beantwortet wird.
    }
}

Sonstige Neuerungen

  • META-INF/web-fragment.xml (wie web.xml, aber als XML-Root Element <web-fragment>)
    Kann in einem jar zusammen mit unabhängigen Servlets, Filtern, Listenern, etc. plaziert werden. Das jar kommt in WEB-INF/lib des .war
  • ServletRegistration ServletContext.getServletRegistration(String servletName) zur programmatischen Konfiguration von Servlets und Co.

Servlet 2.x

Example Servlet

 public class ExampleServlet extends javax.servlet.http.HttpServlet
 {
     public void doGet(HttpServletRequest req,
                       HttpServletResponse res)
         throws ServletException, IOException
     {
         res.setContentType("text/html");
         ...
         if (req.getParameter("paramName") == null)
             // Parameter nicht übergeben

         if (req.getMethod().equals("POST"))
             // POST/GET/HEAD/PUT/... Anfragen unterscheiden

         PrintWriter out = res.getWriter();
         out.println("<html> ... </html>");
     }
     public void doPost(/* wie doGet */)
     {
         // für die POST-Anfragen
         doGet(req, res);
     }
     public void init() throws ServletException
     {
         // wird vor erstem Request einmal aufgerufen
         ... getInitParameter("paramName");
     }
     public void destroy()
 }

WAR-Files (Web Application Archive)

index.html
searchcatalog.jsp
WEB-INF/[web.xml]
WEB-INF/lib/mysql_comp.jar
WEB-INF/classes/ExampleServlet.class

GenericServlet implements ..., ServletConfig

  • service()
  • init(), destroy()
  • getInitParameter(), getInitParameterNames()
  • getServletContext(), getServletName()
  • log(msg), log(msg, Throwable)

HttpServlet extends GenericServlet

  • doGet(), doPost(), doHead(), doOptions(), doTrace(), doPut(), doDelete()
  • getLastModified()

    doXxx(HttpServletRequest req, HttpServletResponse res) throws ServletException, java.io.IOException

ServletRequest

  • params:
    String[] getParameterValues(name), getParameter(name), Enumeration getParameterNames(), getParameterMap()
  • dispatching:
    setAttribute(), removeAttribute(), getRequestDispatcher()
  • env:
    getAttribute(“javax.servlet.request.X509Certificate”), getAttributeNames()
  • request:
    getProtocol(), “http” = getScheme(), isSecure(), getServerName(), getServerPort()
  • User:
    getRemoteAddr(), getRemoteHost(), getLocale(), getLocales()
  • request body:
    getContentLength(), getContentType(), getInputStream(), getReader(), get/setCharacterEncoding()

HttpServletRequest extends ServletRequest

  • Wrapper für Subclassing: HttpServletRequestWrapper
  • header:
    getHeader(), getIntHeader(), getDateHeader(), Enum getHeaderNames(), Enum getHeaders()
  • “POST” = getMethod()
  • session:
    getSession(), getSession(bCreate), isRequestedSessionId{Valid|FromURL|FromCookie}(), getRequestedSessionId()
  • Cookie[] getCookies()
  • authentication:
    {BASIC|CLIENTCERT|DIGEST|FROM}AUTH = getAuthType(), getRemoteUser(), getUserPrinicpal(), isUserInRole()
  • getPathInfo() %%http://%%server/app/myservlet/pathinfo?q=abc
  • getPathTranslated() - extra path info, translated to real path “/usr/local/…/pathinfo”
  • getRealPath(“/index.html”) → “/usr/local/…/index.html”
  • getContextPath() %%http://%%server/app/myservlet?q=abc
  • getQueryString() %%http://%%server/app/myservlet?q=abc
  • getRequestURI() %%http://%%server/app/myservlet?q=abc
  • reconstruct URL: HttpUtils.getRequestURL(req)
  • StringBuffer getRequestURL() %%http://%%server/app/myservlet?q=abc
method http://server/app/myservlet/pathinfo?q=abc
getPathInfo() /pathinfo
getPathTranslated()/usr/local/…/pathinfo
getContextPath() /app
getQueryString() q=abc
getRequestURI() /myservlet
HttpUtils.getRequestURL(req)http://server/app/myservlet/pathinfo?q=abc
StringBuffer getRequestURL()http://server/app/myservlet
getServletPath() ???

ServletResponse

  • PrintWriter getWriter(), ServletOutputStream getOutputStream()
  • setContentType(), setContentLength()
  • get/setLocale(), getCharacterEncoding()
  • get/setBufferSize(), flushBuffer(), resetBuffer()
java/servlet.txt · Last modified: 2011/03/08 21:36 by hgoebl