PA165/Cvičení webové aplikace 1 - Servlet API 3.0: Porovnání verzí

Z FI WIKI
Přejít na: navigace, hledání
(Vytvoření projektu)
(Vytvoření projektu)
Řádka 16: Řádka 16:
  
 
Vytvořený projekt zkuste spustit (klávesa '''F6'''), měl by se otveřít prohlížeč a v něm stránka s nápisem ''Hello World!''.
 
Vytvořený projekt zkuste spustit (klávesa '''F6'''), měl by se otveřít prohlížeč a v něm stránka s nápisem ''Hello World!''.
 +
 +
 +
== úvodní stránka ==
 +
 +
Zeditujte soubor '''index.jsp''' a vyměňte jeho obsah za následující HTML5:
 +
 +
<xml>
 +
<%@page contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
 +
<!DOCTYPE html>
 +
<html>
 +
    <head>
 +
        <title>Domov</title>
 +
    </head>
 +
    <body>
 +
        <h1>Sláva, funguje to!</h1>
 +
        <ul>
 +
            <li><a href="${pageContext.request.contextPath}/text/primo?a=1&b=ccc">text přímo ze servletu</a></li>
 +
            <li><a href="${pageContext.request.contextPath}/text/zjsp">text z JSP</a></li>
 +
            <li><a href="${pageContext.request.contextPath}/soubor">soubor</a></li>
 +
            <li><a href="${pageContext.request.contextPath}/presmerovani">přesměrování</a></li>
 +
            <li><a href="${pageContext.request.contextPath}/text/ble">chyba</a></li>
 +
        </ul>
 +
    </body>
 +
</html>
 +
</xml>
 +
 +
Výraz '''${pageContext.request.contextPath}''' vkládá před relativní odkazy prefix servletové aplikace.
 +
== Servlet ==
 +
 +
V package cz.muni.fi.pa165.web1 vytvořte novou třídu servletu  kliknutím pravým tlačítkem na balík, vyberte ''New - Java class'' a pojmenujte ji '''MyDemoServlet'''.
 +
 +
Přepište zdrojový kód třídy na:
 +
<java>
 +
package cz.muni.fi.pa165.web1;
 +
 +
import java.io.IOException;
 +
import java.io.PrintWriter;
 +
import java.net.URLEncoder;
 +
import java.util.Arrays;
 +
import java.util.Collections;
 +
import java.util.zip.ZipEntry;
 +
import java.util.zip.ZipOutputStream;
 +
import javax.servlet.ServletException;
 +
import javax.servlet.annotation.WebServlet;
 +
import javax.servlet.http.HttpServlet;
 +
import javax.servlet.http.HttpServletRequest;
 +
import javax.servlet.http.HttpServletResponse;
 +
import javax.servlet.ServletOutputStream;
 +
import javax.servlet.http.Cookie;
 +
 +
@WebServlet(urlPatterns = {"/text/*", "/soubor/*", "/presmerovani/*"})
 +
public class MyDemoServlet extends HttpServlet {
 +
 +
    @Override
 +
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 +
        if ("/text".equals(request.getServletPath()) && "/primo".equals(request.getPathInfo())) {
 +
            response.setContentType("text/html;charset=utf-8");
 +
            PrintWriter out = response.getWriter();
 +
            out.println("<pre>text přímo ze servletu");
 +
            out.println("serverInfo=" + getServletContext().getServerInfo());
 +
            out.println("parametry:");
 +
            for (String p : Collections.list(request.getParameterNames())) {
 +
                out.println(p + "=" + request.getParameter(p));
 +
            }
 +
            return;
 +
        } else if ("/text".equals(request.getServletPath()) && "/zjsp".equals(request.getPathInfo())) {
 +
            request.setAttribute("seznam", Arrays.asList("mléko", "rohlíky", "salám"));
 +
            request.getRequestDispatcher("/stranka.jsp").forward(request, response);
 +
            return;
 +
        } else if ("/soubor".equals(request.getServletPath())) {
 +
            response.setContentType("application/zip");
 +
            response.setHeader("Content-disposition", "attachment; filename=\"neco.zip\"");
 +
            ServletOutputStream sos = response.getOutputStream();
 +
            ZipOutputStream zos = new ZipOutputStream(sos);
 +
            zos.putNextEntry(new ZipEntry("neco.txt"));
 +
            zos.write("nějaký text".getBytes());
 +
            zos.putNextEntry(new ZipEntry("necojineho.txt"));
 +
            zos.write("jiný text".getBytes());
 +
            zos.close();
 +
            return;
 +
        } else if ("/presmerovani".equals(request.getServletPath())) {
 +
            String url = request.getContextPath() + "/text/primo?z=" + URLEncoder.encode("?/ =", "utf-8");
 +
            response.sendRedirect(response.encodeRedirectURL(url));
 +
        } else {
 +
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Nerozpoznane URL");
 +
            return;
 +
        }
 +
    }
 +
}
 +
</java>
 +
 +
Opět spusťte aplikacia proklikejte si odkazy.

Verze z 5. 11. 2012, 11:33


Prostředí

  • NetBeans 7.2
  • Oracle JDK 7
  • Tomcat 7
  • Maven 3
module add netbeans-7.2 jdk-1.7.0_03 maven-3.0.4

Vytvoření projektu

Vytvořte v NetBeans nový projekt pro webovou aplikaci typu Maven tj. File - New project - Categories:Maven - Project: Web Application, položku Package zvolte jako cz.muni.fi.pa165.web1.

Vytvořený projekt zkuste spustit (klávesa F6), měl by se otveřít prohlížeč a v něm stránka s nápisem Hello World!.


úvodní stránka

Zeditujte soubor index.jsp a vyměňte jeho obsah za následující HTML5:

 
<%@page contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <title>Domov</title>
    </head>
    <body>
        <h1>Sláva, funguje to!</h1>
        <ul>
            <li><a href="${pageContext.request.contextPath}/text/primo?a=1&b=ccc">text přímo ze servletu</a></li>
            <li><a href="${pageContext.request.contextPath}/text/zjsp">text z JSP</a></li>
            <li><a href="${pageContext.request.contextPath}/soubor">soubor</a></li>
            <li><a href="${pageContext.request.contextPath}/presmerovani">přesměrování</a></li>
            <li><a href="${pageContext.request.contextPath}/text/ble">chyba</a></li>
        </ul>
    </body>
</html>

Výraz ${pageContext.request.contextPath} vkládá před relativní odkazy prefix servletové aplikace.

Servlet

V package cz.muni.fi.pa165.web1 vytvořte novou třídu servletu kliknutím pravým tlačítkem na balík, vyberte New - Java class a pojmenujte ji MyDemoServlet.

Přepište zdrojový kód třídy na:

 
package cz.muni.fi.pa165.web1;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Collections;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
 
@WebServlet(urlPatterns = {"/text/*", "/soubor/*", "/presmerovani/*"})
public class MyDemoServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if ("/text".equals(request.getServletPath()) && "/primo".equals(request.getPathInfo())) {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println("<pre>text přímo ze servletu");
            out.println("serverInfo=" + getServletContext().getServerInfo());
            out.println("parametry:");
            for (String p : Collections.list(request.getParameterNames())) {
                out.println(p + "=" + request.getParameter(p));
            }
            return;
        } else if ("/text".equals(request.getServletPath()) && "/zjsp".equals(request.getPathInfo())) {
            request.setAttribute("seznam", Arrays.asList("mléko", "rohlíky", "salám"));
            request.getRequestDispatcher("/stranka.jsp").forward(request, response);
            return;
        } else if ("/soubor".equals(request.getServletPath())) {
            response.setContentType("application/zip");
            response.setHeader("Content-disposition", "attachment; filename=\"neco.zip\"");
            ServletOutputStream sos = response.getOutputStream();
            ZipOutputStream zos = new ZipOutputStream(sos);
            zos.putNextEntry(new ZipEntry("neco.txt"));
            zos.write("nějaký text".getBytes());
            zos.putNextEntry(new ZipEntry("necojineho.txt"));
            zos.write("jiný text".getBytes());
            zos.close();
            return;
        } else if ("/presmerovani".equals(request.getServletPath())) {
            String url = request.getContextPath() + "/text/primo?z=" + URLEncoder.encode("?/ =", "utf-8");
            response.sendRedirect(response.encodeRedirectURL(url));
        } else {
            response.sendError(HttpServletResponse.SC_NOT_FOUND, "Nerozpoznane URL");
            return;
        }
    }
}

Opět spusťte aplikacia proklikejte si odkazy.