Professional Documents
Culture Documents
SERVLETI
1
Prosleđivanje odgovora i redirekcija iz servleta
Servlet može da prosledi obradu drugom servletu ili da kreirani odgovor prosledi na jsp
stranicu
request.getRequestDispatcher("index.jsp").forward(request, response);
response.sendRedirect("index.jsp");
JSP: prednosti
JSP: mane
Servleti: prednosti
za kontrolnu logiku
Servleti: mane
2
KREIRANJE: Nakon kreiranja Servleta dobija se sledeći kod:
public class TEST extends HttpServlet {
private static final long serialVersionUID = 1L;
public TEST() {
super();
}
}
}
Dve osnovne metode su doGet , doPost sa parametrima
HttpServletRequest request, HttpServletResponse response
3
o 1.7 anotacija i mapiranje servleta bez web.xml fajla, iznad definicije servleta
pomoću @WebServlet("/imeServleta")
4
Link sa parametrima
U velikom broju slučajeva neophodno je pomoću nekog linka pozvati Servlet i u isto vreme
proslediti im i parametre za obradu.
Ovako prosleđeni parametri se u Servletu (u doGet metodi) ili na jsp stranici kupe sa:
String br = request.getParametar("br");
o request.getParameter(“ime")
Dobija se String vrednost prvog elementa koji se zove ime
Rezultat je null ako ne postoji takav parametar u elementima forme
o request.getParameterValues(“ime")
Dobija se niz String[] vrednosti za sve elemente koji se zovu ime
Dobija se niz sa jednim elementom, ako se ime pojavljuje samo jednom
Rezultat je null ako ne postoji takav parametar u elementima forme
o request.getParameterNames() ili request.getParameterMap()
Dobija se Enumeration ili Map objekti od poslatih elemenata i običajeno je
da je rezervisano za debagovanje
5
PRIMER 1. Kreirati jsp stranicu sa formom u kojoj se unosi ime i proslediti je na Servlet koji
treba da prihvati prosleđeno ime i kreira html stranicu sa pozdravnom porukom i prosleđenim
imenom.
<!-- index -->
<form action="Servlet" method="get">
<p>Ime: <input type="text" name="ime"></p>
<input type="submit" value="Posalji">
</form>
response.setContentType("text/html");
String ime = request.getParameter("ime");
NAPOMENA: Kao i kod JSP svi parametri se UVEK prosleđuju kao String pa se moraju
konvertovati u željeni format u try-catch bloku ako je potrebna njihova obrada.
String br = request.getParameter("br");
try{
a=Integer.parseInt(br); // ocekuje se celobrojna vrednost
}
catch(NumberFormatException nfe){
// ovde preduzeti neophodne korake u slučaju pogrešnih parametara
nfe.printStackTrace();
}
6
ZADATAK 1: Za kreiranu formu za piceriju (sa prethodnog časa) sa svim elementima forme
proslediti zahtev servletu ServletTest koji će da pročita prosleđene parametre i da kreira stranicu
izgleda prikazanog ispod. Ista logika kao za rešenje sa jsp stanicom. Dodati i sve provere.
Rešenje:
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
String num = request.getParameter("num");
String size = request.getParameter("size");
String[] top = request.getParameterValues("top");
String name = request.getParameter("name");
String phone = request.getParameter("phone");
String adress = request.getParameter("address");
String pass = request.getParameter("pass");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(
"<HTML>\n" +
"<HEAD><TITLE>Hello</TITLE></HEAD>\n"+
"<BODY>\n" +
"<H1>PICERIJA</H1><br>");
out.println(
"vasa porudzbina :<br>"+
"PICA : komada: "+ num+" velicina:
"+size+"<br><H3>DODACI:</H3>");
for(String pom: top)
out.println(pom+", ");
out.println("<br><H3>Podaci o poruciocu:</H3>" +
"<br>Ime:"+name+
"<br>Telefon:"+phone+
"<br>Adresa:"+adress
);
out.println("</BODY></HTML>");
}
7
ZADATAK 2: Kreirati formu za unos parametara (ime, prezime, godine, sifra, validacija) i
validirati je na servletu. Potrebno je kreirati:
index.jsp – ima formu za unos imena, prezimena, godina jedne osobe. Takođe na dnu
strane neophodno je uneti rezultat prikazane matematičke operacije (zbir dva random
broja) radi provere napada.
Servlet – učitava prosleđene parametre i proverava :
o da li su svi parametri uneti,
o da li je godina int
o da li je sifra „12345“
o da li je tačan rezultat matematičke operacije.
Ukoliko:
je sve zadovoljeno pri validaciji forme prosledi atribute na osoba.jsp (view) stranicu gde
će se podaci ispisivati u formatu: Ja sam „IME PREZIME“ i imam „GODINA“.
nije sve zadovoljeno odgovarajući atribut msg vraća na index.jsp
UVOD U MVC:
VIEW
o index.jsp
o osoba.jsp
CONTROLLER
o Servlet.java
8
<!-- index.jsp body deo -->
<!-- Generisanje dva jednocifrena broja -->
<%
int prvi = (int)Math.ceil(Math.random()*10);
int drugi = (int)Math.ceil(Math.random()*10);
%>
9
// Servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ucitavanje parametara
String ime = request.getParameter("ime");
String prezime = request.getParameter("prezime");
String godine = request.getParameter("godine");
String sifra = request.getParameter("sifra");
String validacija = request.getParameter("validacija");
String zbir = request.getParameter("zbir");
10
<!-- osoba.jsp -->
<body>
<%
String ime = (String) request.getAttribute("ime");
String prezime = (String) request.getAttribute("prezime");
String godine = (String) request.getAttribute("godine");
%>
<%
if (ime != null && prezime != null && godine != null) {
%>
Ja sam <%=ime%> <%=prezime%> i imam <%=godine%> godina !!!
<%
} else {
%>
Nema podataka o osobi za ispis !!!
<%
}
%>
</body>
// direktan pristup
// http://localhost:8080/validacija/osoba.jsp
MVC:
VIEW
o index.jsp
o osoba.jsp
CONTROLLER
o Servlet.java
11
ZADATAK 3: Prepraviti Zadatak 2:
Kreirati klasu Osoba sa atributima ime, prezime, godine.
U servletu kad se uradi validacija kreirati osobu i dodati je u listu osoba.
Tu listu osoba poslati na listaOsoba.jsp preko atributa lo
Kreirati straniu listaOsoba.jsp da prihvata atribut lo i da listu prikaze kao nenumerisanu
listu
UVOD U MVC:
VIEW
o index.jsp
o listaOsoba.jsp
CONTROLLER
o Servlet.java
12
<!-- index.jsp body deo -->
<!-- Generisanje dva jednocifrena broja -->
<%
int prvi = (int)Math.ceil(Math.random()*10);
int drugi = (int)Math.ceil(Math.random()*10);
%>
13
package rs;
@Override
public String toString() {
// TODO Auto-generated method stub
return ime+" "+prezime+" "+godine;
}
}
// Servlet
public class Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
14
// LISTA OSOBA KAO ATRIBUT SERVELTA, DA BI JOJ SE PRISTUPALO IZ METODA
private ArrayList<Osoba> lo = new ArrayList<Osoba>();
lo.add(o);
request.setAttribute("lo", lo);
request.getRequestDispatcher("listaOsoba.jsp").forward(request, response);
} catch (Exception e) {
request.setAttribute("msg", "Godine moraju biti broj");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else{
request.setAttribute("msg", "pogresna validacija");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else{
request.setAttribute("msg", "Pogresna sifra");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}else{
request.setAttribute("msg", "Morate popunitis sva polja");
request.getRequestDispatcher("index.jsp").forward(request, response);
}
}
}
15
<!-- listaOsoba.jsp -->
<%@page import="rs.Osoba"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<%
ArrayList<Osoba> lo = (ArrayList<Osoba>)request.getAttribute("lo");
%>
<body>
<%
if(lo!=null && lo.size()>0){
%>
<h1>LISTA OSOBA</h1>
<ul>
<% for(int i = 0; i<lo.size();i++){ %>
<li><%=lo.get(i) %></li>
<%} %>
</ul>
<%
}else{
response.sendRedirect("index.jsp");
}
%>
</body>
</html>
16
IDEJE ZE DOPUNU
17