Programação Web Aula 12 - Java Web Software Bruno Müller Junior Departamento de Informática UFPR 25 de Maio de 2015
1 Java 2 Java Web Software 3 Servlets Modelo de Trabalho Funcionamento API Java Código Java Código html Exemplos de Servlets Criação de Servlets no Netbeans Projeto Greet Servlet Containers Projeto Survey Projeto votecounter 4 JSP Modelo Exemplos EL JSTL JavaBeans Aula 12 - Java Web Software Programação Web
Java Sun - 1995 Linguagem OO compilada em bytecode. Máquina virtual executa bytecode. Multiplataforma (só precisa da MVJ na máquina hospeira). Projeto de uma MV que opera em navegadores (plugin). Segurança: MV não permite acesso a infos locais. Usada inicialmente só no lado cliente, porém também foi estendida para operar no servidor.
Java Web Software Esta aula aborda as tecnologias existentes no lado do servidor usando a linguagem Java. A ferramenta utilizada para exemplificar é Netbeans. Exemplos de ferramentas: Tomcat, JBoss, etc; Foco principal: Servlets; Ferramenta utilizada para exemplos: Netbeans;
Servlets Servlet: objeto java executado no servidor Web que responde requisições HTML; Utilizado para gerar respostas dinâmicas às requisições dos navegadores. normalmente instanciado quando uma requisição HTML é enviada à URL. Servlet Container ou Servlet Engine: é o dispositivo de software no servidor que gerencia Servlets. Ao receber uma requisição, o servidor Web verifica se é para um servlet. Se for, despacha a req. para o Servlet Engine.
Modelo de Trabalho Modelo de Trabalho
Funcionamento Funcionamento 1 Web server recebe uma requisição HTTP, e a examina. 2 Se a requisição envolve um servlet, o Web Server passa a requisição ao Servlet Container. 3 O Container analisa qual Servlet deve ser executado, o instancia (se necessário) e o chama. 4 A chamada passa dois parâmetros: o objeto da request e o objeto da response. 5 O objeto request pode conter dados de formulário (form) e identidade do cliente (por exemplo, cookies). 6 O Servlet pode conter código para gerar dinamicamente o documento HTML de response.
API Java API Java Há uma pacote java chamado Servlet (em javax.servlet) que contém interfaces para implementar servlets. Exemplos: ServletRequest e ServletResponse. Para criar um novo Servlet é necessário estender HttpServlet, que contém vários métodos, como por exemplo doget, dopost, doput, dodelete. public classe Exemplo extends HttpServlet { protected void doget (HttpServletRequest request, HttpServletRequest response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter (); out.println("<html><head><title>"); out.println("exemplo Simples"); out.println("</title></head><body></body></html>"); } }
Código Java Código Java Código Java: Figura : Programming The WWW (Robert Sebesta)
Código html Código html Código html: Figura : Programming The WWW (Robert Sebesta)
Exemplos de Servlets Exemplos de Servlets A parte mais complexa da criação de um Servlet está na implantação dele. Por exemplo, no Tomcat, bastava criar um subdiretório abaixo do diretório principal e colocar lá o código compilado do Servlet. Com a criação de mais Servlet Containers (GlassFish, BEA entre outros), foram criado padrões para a implantação e da organização dos diretórios onde: A aplicação é empacotada em arquivos WAR (Web application ARchive), que tem estrutura semelhante a arquivos.zip contém descritor da implantação chamado web.xml na raiz. Por ser complexo, raramente codifica-se um Servlet sem o uso de um ambiente próprio como por exemplo Eclipse e Netbeans. Por esta razão, a criação do Servlet exemplo dos próximos Bruno Müller Junior slides utiliza o ambiente Netbeans. Departamento de Informática UFPR
Criação de Servlets no Netbeans Criação de Servlets no Netbeans Arquivo -> Novo Projeto Java Web -> Aplicação Web (<Próximo>) Dar nome (<Próximo>) Sem Framework <Finalizar> Novo -> Servlet <Finalizar>
Projeto Greet Projeto Greet Cria página com um botão que ativa o servlet. É necessário criar dois arquivos: 1 documento html para a primeira interação (index.html); 2 documento java que é o servlet (Greet.java). Observações: 1 Veja o projeto greetn: a forma de indicar o servlet a ser executado quando o button for ativado é a seguinte: <form action="greet" method="get"> 2 Observe como a resposta é criada (response object) 3 Observe os métodos doget e dopost;
Servlet Containers Servlet Containers São os programas responsáveis por responder a requisição do cliente (docto html ou servlet).
Projeto Survey Projeto Survey Usa um servlet para responder um formulário com radio input. Aspectos a serem observados: 1 Como é a associação entre a propriedade name com o código java: <input type="radio" name="gender" value="female" /> gender = request.getparameter("gender");
Projeto votecounter Projeto votecounter Mostra como utilizar cookies: Criar um cookie: newcookie=new Cookie("iVoted","true"); Especificar duração: newcookie.setmaxage(50); Enviar cookie: response.addcookie(newcookie); Verificar cookies da requisição: cookies = request.getcookies();
JSP Servlets misturam código HTML com código java println, por exemplo. Grande parte das organizações utiliza duas equipes: projetistas web (markup) e programadores web (lógica do negócio). Ambos tem de trabalhar nos mesmos arquivos, gerando problemas previsíveis. O objetivo de JSP (Java Servlet Pages) é permitir a criação de projetos com uma distinção clara entre markup e lógica do negócio. Em alguns casos, permite que os projetistas web contruam toda a aplicação.
Modelo Modelo JSP inclui uma camada acima de servlet.
Exemplos Exemplos Como JSP inclui várias possibilidades de implementação, serão apresentados vários versões para uma mesma aplicação: converter uma temperatura de Celsius para Fahrenheit: Usando Expression Language (EL); Usando JSTL Control Action Statements; Posteriormente a mesma aplicação será implementada usando JavaBeans.
EL EL As expressões a serem executadas são colocadas no documento de resposta (.jsp) usando o formato ${expressão EL} Projeto tempconvertel: index.html tempconverterel2.jsp
JSTL JSTL Inclui tags para executar condicionais. Úteis por exemplo para analisar se o usuário digitou um número. Projeto tempconvertel1: index.html tem um condicional que verifica se a mensagem contém uma requisição com dados (requisição contém POST). Atenção à inclusão e uso das tags condicionais (JSP) <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>... <c:if test = "${pagecontext.request.method!= POST }"> </c:if> Projeto MoreJSP: Usa radio, e JSTL <c:choose> (switch).
JavaBeans JavaBeans A arquitetura JavaBeans apresenta uma série de regras para construir classes especiais java projetados para serem usados como componentes reusáveis de software. Estes componentes são chamados beans. Há uma série de convenções rígidas. Exemplo: é obrigatória a existência de getter e setter começando com get e set. Assim, se a bean contém um inteiro chamado celsius, então os nomes são getcelsius e setcelsius Em JSP, são normalmente usados como recipientes para dados da aplicação Web.
Acesso Acesso Dados armazenados em um bean é chamado propriedade; Nomes de propriedades são como variáveis em java, mas começam sempre com minúscula e são privadas (com métodos públicos para acesso); o elemento JSP abaixo inclui a classe java contendo um bean: <jsp:usebean id="mybean" class="org.mypackage.convert.converter" /> Existem duas ações padrão para acessar um bean: <jsp:setproperty name="mybean" param="celsius" property="celsius" /> (equivalente a) <jsp:setproperty name="mybean" property="celsius" /> <jsp:getproperty name="mybean" property="celsius" />
Exemplo Exemplo projeto tempconvertb arquivo index.jsp arquivo response.jsp arquivo Converter.java (em Pacotes de código-fonte), atenção ao org.mypackage.convert.
MVC Existem basicamente três formas de criar MVC usando JSP: 1 JSP = {Controlador, View}, Beans = {Model}; 2 Servlet = {aceitar requisições, lógica }, Beans = {manipulação de dados}, JSP = {View}; 3 Servlet = {Controlador}, JSP = {View}, EJB 1 = {Model} 1 Enterprise Java Beans, componentes java distribuídos