java/nekurak.net-web/src/java/cz/frantovo/nekurak/servlet/SuperServlet.java
author František Kučera <franta-hg@frantovo.cz>
Thu Jul 21 15:20:58 2011 +0200 (2011-07-21)
changeset 193 5ec59a8d902e
parent 179 2ed9f3231a28
permissions -rw-r--r--
Systematičtější extrahování ID objektu z URL
     1 package cz.frantovo.nekurak.servlet;
     2 
     3 import java.io.IOException;
     4 import java.util.Locale;
     5 import javax.servlet.RequestDispatcher;
     6 import javax.servlet.ServletException;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 /**
    12  *
    13  * @author fiki
    14  */
    15 public class SuperServlet extends HttpServlet {
    16 
    17 	public static final String PARAMETR_JAZYK = "jazyk";
    18 	private static final String ATRIBUT_JAZYK = "javax.servlet.jsp.jstl.fmt.locale.session";
    19 	private static final String ADRESAR_SABLON = "/WEB-INF/casti/";
    20 
    21 	@Override
    22 	protected void doGet(HttpServletRequest požadavek, HttpServletResponse odpověď) throws ServletException, IOException {
    23 		společné(požadavek, odpověď);
    24 	}
    25 
    26 	/**
    27 	 * <p>Vytáhne z požadované cesty (konec URL) ID objektu.</p>
    28 	 * 
    29 	 * <p>Příklad:
    30 	 * pro <code>GET /podnik/123</code>
    31 	 * vrátí 123 (podnik je název objektu/akce)
    32 	 * </p>
    33 	 * 
    34 	 * @param požadavek HTTP požadavek
    35 	 * @return ID objektu
    36 	 */
    37 	protected int getIdCesty(HttpServletRequest požadavek) {
    38 		String[] parametryCesty = (požadavek.getPathInfo().split("/"));
    39 		return Integer.parseInt(parametryCesty[1]);
    40 	}
    41 
    42 	/**
    43 	 * Vykreslí stránku pomocí JSP šablony
    44 	 * @param jsp JSP šablona stránky – např. detail.jsp (nacházejí se v /WEB-INF/casti/)
    45 	 */
    46 	protected void zpracujJSP(String jsp, HttpServletRequest požadavek, HttpServletResponse odpověď) throws ServletException, IOException {
    47 		/** Nastavení správného MIME typu */
    48 		//požadavek.setAttribute("jspMimeTyp", MIME_TYP);
    49 		/**
    50 		 * odpověď.setContentType(MIME_TYP); – nefunguje (JSP si tam procpe svoje text/xml)
    51 		 */
    52 		/*
    53 		 * Mělo by jít změnit přes web.xml:
    54 		<jsp-config>
    55 		<jsp-property-group>
    56 		<url-pattern>/</url-pattern>
    57 		<default-content-type>application/xhtml+xml</default-content-type>
    58 		</jsp-property-group>
    59 		</jsp-config>
    60 		 */
    61 		RequestDispatcher rd = getServletContext().getRequestDispatcher(ADRESAR_SABLON + jsp);
    62 		rd.forward(požadavek, new XhtmlOdpověď(odpověď));
    63 	}
    64 
    65 	/**
    66 	 * Společné činnosti, které děláme pro všechny HTTP metody (GET, POST atd.)
    67 	 */
    68 	private void společné(HttpServletRequest požadavek, HttpServletResponse odpověď) throws ServletException, IOException {
    69 		nastavJazyk(požadavek);
    70 	}
    71 
    72 	/**
    73 	 * Pokud se chce uživatel ručně přepnout na jiný jazyk, než jaký posílá jeho prohlížeč.
    74 	 */
    75 	private void nastavJazyk(HttpServletRequest požadavek) {
    76 		String jazyk = požadavek.getParameter(PARAMETR_JAZYK);
    77 		if (jazyk != null) {
    78 			požadavek.getSession().setAttribute(ATRIBUT_JAZYK, new Locale(jazyk));
    79 		}
    80 	}
    81 }