Wprowadzenie

Download Report

Transcript Wprowadzenie

Projektowanie warstwy serwera
Wprowadzenie
Plan wykładu (I)
•
•
•
•
•
•
•
•
Projektowanie warstwy serwera
Zagadnienia wstępne: Servlety, JDBC
Strony JSP
Spring i SpringMVC
DisplayTag
SpringAOP
Definiowanie znaczników
Zabezpieczenia stron
Zagadnienia związane z przetwarzaniem plików
XML
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
2
Plan wykładu (II)
•
•
•
•
•
•
Projektowanie warstwy serwera
Co to są servlety?
Podstawowe metody servletów
Request, response i session
Co to jest JDBC?
Nawiązywanie połączenia z bazą danych
Współpraca z bazą danych przez JDBC
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
3
Projektowanie warstwy serwera
Servlety
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
4
Projektowanie warstwy serwera
Metody Servletów
public void init(ServletConfig config)
public void destroy()
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
5
Przykładowy Servlet
Projektowanie warstwy serwera
public class PrzykladServlet extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
PrintWriter out;
String title = „Tytul";
response.setContentType("text/html");
out = response.getWriter();
out.println(HTML>\n" +"<HEAD><TITLE>Strona1</TITLE></HEAD>\n"
+"<BODY>\n" +"<H1>” + title+ ”</H1>\n" +"</BODY></HTML>");
out.close();
}}
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
6
Projektowanie warstwy serwera
Zapytanie (I)
HttpServletRequest request – zapytanie
String getParameter(String)
void setParameter(String,String)
String [] getParameterValues(String)
Enumeration getParametersNames()
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
7
Projektowanie warstwy serwera
Zapytanie (II)
String sort = ServletRequestUtils.getStringParameter(request, "sort",null);
int page = ServletRequestUtils.getIntParameter(request, "page", -1);
public static int[] getIntParameters(request, ”name”)
public static int getRequiredIntParameter(request, ”name”)
throws ServletRequestBindingException
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
8
Projektowanie warstwy serwera
Zapytanie (III)
request.getServerPort();
request.getServletPath();
Cookie[] cookies = request.getCookies();
for (Cookie c : cookies) {
if (c.getName().equals("wykonano"))
{
boolean a = Boolean.parseBoolean(c.getValue());
.....
}
}
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
9
Projektowanie warstwy serwera
Zapytanie (IV)
String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE")
{
...
}
else if (userAgent.contains("Opera"))
{
...
}
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
10
Odpowiedź (I)
Projektowanie warstwy serwera
HttpServletResponse response - odpowiedź
OutputStream o = response.getOutputStream();
response.setCharacterEncoding("UTF-8");
response.setContentType(”text/html”);
response.setHeader(”...”);
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
11
Projektowanie warstwy serwera
Odpowiedź (II)
Cookie c = new Cookie(”wykonano",
Boolean.FALSE.toString());
c.setPath("/");
c.setMaxAge(-1);
response.addCookie(c);
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
12
Projektowanie warstwy serwera
HttpSession (I)
HttpSession session = request.getSession(true)
String getAttribute(String)
void setAttribute(String,String)
public void removeAttribute(String name)
public Enumeration getAttributeNames()
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
13
Projektowanie warstwy serwera
HttpSession (II)
request.getSession().setAttribute("preselection”, preselection);
preselection = (Preselection)
request.getSession().getAttribute(”preselection”);
request.getSession().removeAttribute("preselection”);
Long time = request.getSession().getLastAccessedTime();
request.getSession().setMaxInactiveInterval(1); // sekundy
request.getSession().getId();
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
14
Projektowanie warstwy serwera
ServletContext
WebApplicationContext ctx =
WebApplicationContextUtils.getWebApplicationContext(
request.getSession().getServletContext() );
ApplicationContext ctx =
new FileSystemXmlApplicationContext(new String[] {
servletContext.getRealPath(
"WEB-INF” +
System.getProperty("file.separator") +
”biblioteka-daoInna.xml” )});
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
15
Przykładowy Servlet (I)
Projektowanie warstwy serwera
public class ListyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
WebApplicationContext ctx = WebApplicationContextUtils.
getWebApplicationContext(request.getSession().getServletContext());
UzytkownikService uzytkownikService = (UzytkownikService)
ctx.getBean("uzytkownikService");
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
16
Przykładowy Servlet (II)
Projektowanie warstwy serwera
StringBuilder wynik = new StringBuilder();
String szukanyStart = request.getParameter(”q");
if (szukanyStart == null) return;
ArrayList<Criterion> criteriaList = new ArrayList<Criterion>();
criteriaList.add(new BooleanCriterion("aktywny", "Aktywny",true));
criteriaList.add(new StringFirstCriterion("nazwisko",
"Nazwisko",szukanyStart));
ArrayList<Uzytkownik> list = (ArrayList<Uzytkownik>)
uzytkownikService.findByFirstLetter(criteriaList);
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
17
Przykładowy Servlet (III)
Projektowanie warstwy serwera
18
Iterator<Uzytkownik> listIterator = list.iterator();
while (listIterator.hasNext()) {
Uzytkownik uzytkownik = listIterator.next();
wynik.append(uzytkownik.getNazwisko()+ " " + uzytkownik.getImie() + "\n");
}
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.print(wynik.toString());
out.close();
}}
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
Projektowanie warstwy serwera
Przykładowy Servlet (uzupełnienie)
<form:input path="identyfikatorUzytkownika" />
<script type="text/javascript">
$().ready(function () {
$("#identyfikatorUzytkownika").autocomplete('<c:url value="/listy/" />', {
width: 400,
selectFirst: false,
extraParams: {"pole" : "uzytkownik"}
});
});
</script>
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
19
Projektowanie warstwy serwera
DAO
• Data Access Object (DAO) to wzorzec projektowy
dostępu do danych zewnętrznych zakładający
rozdzielenie kodu odpowiedzialnego za trwałość
obiektów od kodu implementującego reguły
biznesowe.
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
20
Genercja połączenia
•
•
•
•
•
•
•
Projektowanie warstwy serwera
Pobranie sterownika (driver) JDBC.
Zdefiniowanie obiektu connection.
Ustanowienie połączenia.
Utworzenie objektu statement.
Wykonanie zapytania.
Pobranie wyników zapytania.
Zamknięcie połączenia.
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
21
Projektowanie warstwy serwera
JDBC - przykład (baza danych)
CREATE TABLE uzytkownik (
idUzytkownik int(11) NOT NULL auto_increment,
imie varchar(255) default NULL,
nazwisko varchar(255) default NULL,
wiek int(11) default NULL,
email varchar(255) default NULL,
haslo varchar(255) default NULL,
login varchar(255) default NULL,
telefon varchar(255) default NULL,
idPokoj int(11) default NULL,
idRole int(11) default NULL,
PRIMARY KEY (idOsoba)
) charset utf8 TYPE=MyISAM;
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
22
Projektowanie warstwy serwera
JDBC (obiekt domenowy)
public class UzytkownikBean {
private String idUzytkownik="";
private String imie="";
private String nazwisko="";
private String wiek="";
private String email="";
private String haslo="";
private String telefon = "";
private String idRole="";
private String idPokoj="";
...
}
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
23
JDBC - przykład
Projektowanie warstwy serwera
try {
Class.forName(driver);
Connection connection =
DriverManager.getConnection(url, username, password);
Statement statement = connection.createStatement();
String query = "SELECT * FROM fruits";
ResultSet resultSet = statement.executeQuery(query);
while(resultSet.next()) {
System.out.print(" " + resultSet.getInt(1));
}
} catch(ClassNotFoundException cnfe) {
System.err.println("Error loading driver: " + cnfe);
} catch(SQLException sqle) {
System.err.println("Error connecting: " + sqle);
}
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
24
JDBC - przykład (II)
Projektowanie warstwy serwera
protected static String SELECT_UZYTKOWNIK ="SELECT " +
"idUzytkownik,"+
"imie,"+
"nazwisko"+
" FROM "+ "uzytkownik";
protected static String SELECT_UZYTKOWNIK_WHERE_ID =
SELECT_OSOBA + " WHERE idUzytkownik=?";
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
25
JDBC - przykład (III)
Projektowanie warstwy serwera
• public UzytkownikBean selectUzytkownikWhereId(String id) {
UzytkownikBean f= null;
Connection con= getConnection();
PreparedStatement ps= null;
ResultSet rs= null;
try {
ps= con.prepareStatement(SELECT_UZYTKOWNIK_WHERE_ID);
ps.setString(1, id);
rs= ps.executeQuery();
......
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
26
JDBC - przykład (IV)
Projektowanie warstwy serwera
while (rs != null && rs.next()) {
f = new UzytkownikBean();
f.setIdUzytkownik(rs.getString("idUzytkownik"));
f.setImie(rs.getString("imie"));
f.setNazwisko(rs.getString("nazwisko"));
}
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
closeAll(con, ps, rs);
rs= null;
ps= null;
con= null;
}
return f; }
Projekt współfinansowany przez Unię Europejską
w ramach Europejskiego Funduszu Społecznego
27