MVC/DAO	

JSP/JSTL/EL	

JDBC/ORM
java web
Mario Jorge Pereira
14

20

13

20

12

20

11

20

10

20

09

20

08

20

07

20

06

20

05

20

04

20

03

20

02

20
Agenda
• Java Servlet	

• Java Server Pages - JSP	

• JavaServer Pages Standard Tag Library - JSTL	

• Expression Language...
JSP
i
g
lo

p
js
.
n

versão 1.0

<!DOCTYPE html>	
<html>	
<head>	
<title>Login</title>	
</head>	
<body>	
	 <form method="post...
p
js
.
e

versão 1.0

m
o
h

<!DOCTYPE html>	
<html>	
<head>	
<title>HOME</title>	
</head>	
<body>	
	 Bem vindo, <%=reques...
Servlet
Autenticador.java

versão 2.0

package br.com.mariojp;	

!
import
import
import
import

!

java.io.*;	
javax.servlet.*;	
j...
i
g
lo

p
js
.
n

versão 2.0

<!DOCTYPE html>	
<html>	
<head>	
<title>Login</title>	
</head>	
<body>	
	 <form method="post...
p
js
.
e

versão 2.0

m
o
h

<!DOCTYPE html>	
<html>	
<head>	
<title>HOME</title>	
</head>	
<body>	
	 Bem vindo, <%=reques...
MVC
U

.j
io
r
a
u
s

a
v
a

package br.com.mariojp;	

!

versão 3.0

public class Usuario {	
	 private Integer id;	
	 private...
Autenticador.java

versão 3.0

@WebServlet("/Autenticador")	
public class Autenticador extends HttpServlet {	

!

	 protec...
Autenticador.java

versão 3.0

	
!
	
	
	
	
	
	
	

private boolean autenticar(Usuario user) {	
	 boolean autenticado = fals...
i
g
lo

p
js
.
n

versão 3.0

<!DOCTYPE html>	
<html>	
<head>	
<title>Login</title>	
</head>	
<body>	
	 <form method="post...
m
o
h

p
js
.
e

versão 3.0

<!DOCTYPE html>	
<%@page import="br.com.mariojp.Usuario"%>	
<html>	
<head>	
<title>HOME</titl...
Revisão Rapida
• Java Servlet	

• Java Server Pages - JSP	

• Model View Controller - MVC
E agora?
• JavaServer Pages Standard Tag Library - JSTL	

• Expression Language - EL
WEB-INFlib
• javax-1.servlet.jsp.jstl-1.2.1.jar	

• javax-1.servlet.jsp.jstl-api-1.2.1.jar
i
g
lo

p
js
.
n

versão 3.1

<!DOCTYPE html>	
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>	
<html>	
<...
m
o
h

p
js
.
e

versão 3.1

<!DOCTYPE html>	
<%@page import="br.com.mariojp.Usuario"%>	
<%@ taglib uri="http://java.sun.c...
JDBC
HSQLDB
java -cp hsqldb.jar org.hsqldb.server.Server -database.0 file:mydb --dbname.0 banco
HSQL Database Manager
!

Type: HSQL Database Engine Server	

Driver: org.hsqldb.jdbcDriver	

URL: jdbc:hsqldb:hsql://local...
HSQLDB
CREATE TABLE USUARIOS ( USUARIO_ID INTEGER
IDENTITY, LOGIN varchar(100) NOT NULL , SENHA
varchar(100) NOT NULL ) ;	...
WEB-INFlib

• hsqldb.jar
BancoUtil.java

package br.com.mariojp;	
versão 4.0
!
import java.sql.Connection;	
import java.sql.DriverManager;	
!
publi...
Autenticador.java

versão 4.0

private boolean autenticar(Usuario user) {	
	 	 boolean autenticado = false;	
	 	 Connectio...
Segurança
• Voce consegue acessar o home.jsp?	

• Pela url	

• Sql Injection
m
o
h

p
js
.
e

versão 4.1

<!DOCTYPE html>	
<%@page import="br.com.mariojp.Usuario"%>	
<%@ taglib uri="http://java.sun.c...
Teste?
• Use Login = 123 e Senha = ' or '1' = ‘1	

• Use Login = ' OR 1=1 --
Autenticador.java

versão 4.1
private boolean autenticar(Usuario user) {	
	 	 boolean autenticado = false;	
	 	 Connection...
DAO
package br.com.mariojp;	

versão 5.0

!
import
import
import
import

java.sql.Connection;	
java.sql.PreparedStatement;	
ja...
Autenticador.java

versão 3.0

@WebServlet("/Autenticador")	
public class Autenticador extends HttpServlet {	
	 private Us...
Hibernate

• Framework de mapeamento objeto
relacional
WEB-INFlib
• hibernate-core-4.3.0.Final.jar	

• antlr-2.7.7.jar	

• dom4j-1.6.1.jar	

• hibernate-commons-annotations-4.0....
package br.com.mariojp;	

versão 6.0

!
import java.io.Serializable;	

Usuario.java

!
import
import
import
import

javax....
package br.com.mariojp;	

versão 6.0

!
import
import
import
import

org.hibernate.SessionFactory;	
org.hibernate.boot.reg...
package br.com.mariojp;	
versão 6.0
!
import org.hibernate.Session;	
!
public class UsuarioDAO {	
!
	 public boolean auten...
versão 6.0

<?xml version="1.0" encoding="UTF-8"?>	
<!DOCTYPE hibernate-configuration PUBLIC	
"-//Hibernate/Hibernate Conf...
Esta obra está licenciada sob a licença Creative Commons
Atribuição-CompartilhaIgual 3.0 Não Adaptada. Para ver uma cópia
...
Java web
Mario Jorge Pereira
Como me encontrar?
http://www.mariojp.com.br
twitter.com/@mariojp
mariojp@gmail.com
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MVC, etc
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MVC, etc
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MVC, etc
Upcoming SlideShare
Loading in …5
×

Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MVC, etc

2,936 views

Published on

Material sobre Java WEB super mão na massa. Vou construindo e alterando uma aplicação durante a apresentação os assuntos cobertos são:
Java Servlet
Java Server Pages - JSP
JavaServer Pages Standard Tag Library - JSTL
Expression Language - EL
Java Database Connectivity - JDBC
Data Access Object - DAO
Model View Controller - MVC
Hibernate
...
Apresento também formas de fugir do sqlinjection

Published in: Education, Technology

Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MVC, etc

  1. 1. MVC/DAO JSP/JSTL/EL JDBC/ORM
  2. 2. java web Mario Jorge Pereira
  3. 3. 14 20 13 20 12 20 11 20 10 20 09 20 08 20 07 20 06 20 05 20 04 20 03 20 02 20
  4. 4. Agenda • Java Servlet • Java Server Pages - JSP • JavaServer Pages Standard Tag Library - JSTL • Expression Language - EL • Java Database Connectivity - JDBC • Data Access Object - DAO • Model View Controller - MVC • Hibernate
  5. 5. JSP
  6. 6. i g lo p js . n versão 1.0 <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <form method="post" action=“home.jsp"> Login: <input name="login" type="text"> <br> Senha: <input name="senha" type="password"><br> <input type="submit"> </form> </body> </html>
  7. 7. p js . e versão 1.0 m o h <!DOCTYPE html> <html> <head> <title>HOME</title> </head> <body> Bem vindo, <%=request.getParameter("login")%> </body> </html>
  8. 8. Servlet
  9. 9. Autenticador.java versão 2.0 package br.com.mariojp; ! import import import import ! java.io.*; javax.servlet.*; javax.servlet.annotation.*; javax.servlet.http.*; Regra: 
 Se o login igual a senha esta ok! @WebServlet("/Autenticador") public class Autenticador extends HttpServlet { ! } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String login = request.getParameter("login"); String senha = request.getParameter("senha"); if(login!=null && senha!=null && login.equalsIgnoreCase(senha)){ response.sendRedirect("home.jsp?user="+login); }else{ String erro = "Usuario ou Senha Invalidos!"; response.sendRedirect("login.jsp?erro="+erro); } }
  10. 10. i g lo p js . n versão 2.0 <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <form method="post" action=“Autenticador"> Login: <input name="login" type="text"> <br> Senha: <input name="senha" type="password"><br> <input type="submit"> </form> <% String erro = request.getParameter("erro"); if(erro!=null && !erro.trim().equals("")){ out.print(erro); } %> </body> </html> Aciona o servlet Apresenta o erro de login
  11. 11. p js . e versão 2.0 m o h <!DOCTYPE html> <html> <head> <title>HOME</title> </head> <body> Bem vindo, <%=request.getParameter("user")%> </body> </html>
  12. 12. MVC
  13. 13. U .j io r a u s a v a package br.com.mariojp; ! versão 3.0 public class Usuario { private Integer id; private String login; private String senha; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getLogin() { return login; } public void setNome(String login) { this.login = login; } public String getSenha() { return senha; } public void setSenha(String senha) { this.senha = senha; } }
  14. 14. Autenticador.java versão 3.0 @WebServlet("/Autenticador") public class Autenticador extends HttpServlet { ! protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Usuario user = new Usuario(); String login = request.getParameter("login"); String senha = request.getParameter("senha"); user.setLogin(login); user.setSenha(senha); if(autenticar(user)){ request.getSession().setAttribute("user", user); response.sendRedirect("home.jsp"); }else{ request.setAttribute("erro", "Usuario ou Senha Invalidos!"); RequestDispatcher d= request.getRequestDispatcher("login.jsp"); d.forward(request,response); } } private boolean autenticar(Usuario user) {...} ! }
  15. 15. Autenticador.java versão 3.0 ! private boolean autenticar(Usuario user) { boolean autenticado = false; if(user.getLogin()!=null && user.getSenha()!=null && user.getLogin().equals(user.getSenha())){ autenticado = true; } return autenticado; }
  16. 16. i g lo p js . n versão 3.0 <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <form method="post" action=“Autenticador"> Login: <input name="login" type="text"> <br> Senha: <input name="senha" type="password"><br> <input type="submit"> </form> <% String erro = (String) request.getAttribute(“erro”); if(erro!=null && !erro.trim().equals("")){ out.print(erro); } %> </body> </html>
  17. 17. m o h p js . e versão 3.0 <!DOCTYPE html> <%@page import="br.com.mariojp.Usuario"%> <html> <head> <title>HOME</title> </head> <body> <% Usuario user = (Usuario) session.getAttribute("user");%> Bem vindo, <%=user.getLogin() %> </body> </html>
  18. 18. Revisão Rapida • Java Servlet • Java Server Pages - JSP • Model View Controller - MVC
  19. 19. E agora? • JavaServer Pages Standard Tag Library - JSTL • Expression Language - EL
  20. 20. WEB-INFlib • javax-1.servlet.jsp.jstl-1.2.1.jar • javax-1.servlet.jsp.jstl-api-1.2.1.jar
  21. 21. i g lo p js . n versão 3.1 <!DOCTYPE html> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>Login</title> </head> <body> <form method="post" action=“Autenticador"> Login: <input name="login" type="text"> <br> Senha: <input name="senha" type="password"><br> <input type="submit"> </form> <c:out value="${erro}"/> </body> </html>
  22. 22. m o h p js . e versão 3.1 <!DOCTYPE html> <%@page import="br.com.mariojp.Usuario"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>HOME</title> <jsp:useBean id="user" class="br.com.mariojp.Usuario" scope=“session” /> </head> <body> Bem vindo, <c:out value=“${user.login}" /> </body> </html>
  23. 23. JDBC
  24. 24. HSQLDB java -cp hsqldb.jar org.hsqldb.server.Server -database.0 file:mydb --dbname.0 banco
  25. 25. HSQL Database Manager ! Type: HSQL Database Engine Server Driver: org.hsqldb.jdbcDriver URL: jdbc:hsqldb:hsql://localhost/banco User: SA
  26. 26. HSQLDB CREATE TABLE USUARIOS ( USUARIO_ID INTEGER IDENTITY, LOGIN varchar(100) NOT NULL , SENHA varchar(100) NOT NULL ) ; ! INSERT INTO USUARIOS ( "LOGIN", "SENHA" ) VALUES ('user', ‘1234’); ! SELECT * FROM USUARIOS;
  27. 27. WEB-INFlib • hsqldb.jar
  28. 28. BancoUtil.java package br.com.mariojp; versão 4.0 ! import java.sql.Connection; import java.sql.DriverManager; ! public class BancoUtil { private static Connection connection; static { try { Class.forName("org.hsqldb.jdbc.JDBCDriver" ); connection = DriverManager.getConnection( "jdbc:hsqldb:hsql://localhost/banco", "SA", ""); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection() { return connection; } }
  29. 29. Autenticador.java versão 4.0 private boolean autenticar(Usuario user) { boolean autenticado = false; Connection con = BancoUtil.getConnection(); try { Statement stmt = con.createStatement(); ResultSet resultSet = stmt.executeQuery( "select * from usuarios where "+ "login='"+user.getLogin().trim()+"' and "+ "senha='"+user.getSenha().trim()+"';" ); if(resultSet.next()){ autenticado = true; } resultSet.close(); stmt.close(); } catch (SQLException e) { e.printStackTrace(); } return autenticado; }
  30. 30. Segurança • Voce consegue acessar o home.jsp? • Pela url • Sql Injection
  31. 31. m o h p js . e versão 4.1 <!DOCTYPE html> <%@page import="br.com.mariojp.Usuario"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <html> <head> <title>HOME</title> <jsp:useBean id="user" class="br.com.mariojp.Usuario" scope=“session” /> </head> <body> <c:if test="${user.login == null}"> <c:redirect url=“login.jsp" /> </c:if> Bem vindo, <c:out value=“${user.login}" /> </body> </html>
  32. 32. Teste? • Use Login = 123 e Senha = ' or '1' = ‘1 • Use Login = ' OR 1=1 --
  33. 33. Autenticador.java versão 4.1 private boolean autenticar(Usuario user) { boolean autenticado = false; Connection con = BancoUtil.getConnection(); try { String sql = "select * from usuarios where " + "login=? and senha=?;"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, user.getLogin()); pstmt.setString(2, user.getSenha()); ResultSet resultSet = pstmt.executeQuery(); if(resultSet.next()){ autenticado = true; } resultSet.close(); pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } return autenticado; }
  34. 34. DAO
  35. 35. package br.com.mariojp; versão 5.0 ! import import import import java.sql.Connection; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.SQLException; ! public class UsuarioDAO { ! } public boolean autenticar(Usuario user) { boolean autenticado = false; Connection con = BancoUtil.getConnection(); try { String sql = "select * from usuarios where login=? and senha=?;"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setString(1, user.getLogin()); pstmt.setString(2, user.getSenha()); ResultSet resultSet = pstmt.executeQuery(); if(resultSet.next()){ autenticado = true; } resultSet.close(); pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } return autenticado; } UsuarioDAO.java
  36. 36. Autenticador.java versão 3.0 @WebServlet("/Autenticador") public class Autenticador extends HttpServlet { private UsuarioDAO usuarioDAO = new UsuarioDAO(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Usuario user = new Usuario(); String login = request.getParameter("login"); String senha = request.getParameter("senha"); user.setLogin(login); user.setSenha(senha); if(usuarioDAO.autenticar(user)){ request.getSession().setAttribute("user", user); response.sendRedirect("home.jsp"); }else{ request.setAttribute("erro", "Usuario ou Senha Invalidos!"); RequestDispatcher d= request.getRequestDispatcher("login.jsp"); d.forward(request,response); } } }
  37. 37. Hibernate • Framework de mapeamento objeto relacional
  38. 38. WEB-INFlib • hibernate-core-4.3.0.Final.jar • antlr-2.7.7.jar • dom4j-1.6.1.jar • hibernate-commons-annotations-4.0.4.Final.jar • hibernate-jpa-2.1-api-1.0.0.Final.jar • jandex-1.1.0.Final.jar • javassist-3.18.1-GA.jar • jboss-logging-3.1.3.GA.jar • jboss-logging-annotations-1.2.0.Beta1.jar • jboss-transaction-api_1.2_spec-1.0.0.Final.jar
  39. 39. package br.com.mariojp; versão 6.0 ! import java.io.Serializable; Usuario.java ! import import import import javax.persistence.Entity; javax.persistence.GeneratedValue; javax.persistence.Id; javax.persistence.Table; ! @Entity @Table(name="usuarios") public class Usuario implements Serializable{ private static final long serialVersionUID = 1L; ! @Id @GeneratedValue private Integer id; ! } private String login; private String senha; //get’s e set's
  40. 40. package br.com.mariojp; versão 6.0 ! import import import import org.hibernate.SessionFactory; org.hibernate.boot.registry.StandardServiceRegistryBuilder; org.hibernate.cfg.Configuration; org.hibernate.service.ServiceRegistry; ! public class BancoUtil { private static SessionFactory factory; ! static { Configuration configuration = new Configuration().configure(); StandardServiceRegistryBuilder serviceRegistryBuilder; serviceRegistryBuilder = new StandardServiceRegistryBuilder(); serviceRegistryBuilder.applySettings(configuration.getProperties()); ServiceRegistry serviceRegistry = serviceRegistryBuilder.build(); factory = configuration.buildSessionFactory(serviceRegistry); ! } ! ! } public static SessionFactory getFactory() { return factory; } BancoUtil.java
  41. 41. package br.com.mariojp; versão 6.0 ! import org.hibernate.Session; ! public class UsuarioDAO { ! public boolean autenticar(Usuario user) { ! String query = "select u from Usuario as u where " + "u.login=:login and u.senha=:senha"; Session session = BancoUtil.getFactory().openSession(); session.beginTransaction(); Usuario usuario = (Usuario) session .createQuery(query) .setString("login", user.getLogin()) .setString("senha", user.getSenha()).uniqueResult(); session.getTransaction().commit(); session.close(); return usuario != null; ! } ! } UsuarioDAO.java
  42. 42. versão 6.0 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration > <session-factory> <property name="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property> <property name="hibernate.connection.url">jdbc:hsqldb:hsql://localhost/ banco</property> <property name="hibernate.connection.username">SA</property> <property name="hibernate.connection.password"></property> <property name="hibernate.connection.pool_size">1</property> <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</ property> <property name="hibernate.current_session_context_class">thread</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProv ider</property> <!-- Echo all executed SQL to stdout --> <property name="hibernate.show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hibernate.hbm2ddl.auto">create</property> <mapping class="br.com.mariojp.Usuario"/> </session-factory> </hibernate-configuration> hibernate.cfg.xml
  43. 43. Esta obra está licenciada sob a licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-sa/3.0/.
  44. 44. Java web Mario Jorge Pereira Como me encontrar? http://www.mariojp.com.br twitter.com/@mariojp mariojp@gmail.com

×