@bruno.daniel escreveu:
Bom dia a todos,
Estou fazendo um curso de Jsp + Servlets e estou encontrando dificuldades em um dos exercícios que foi apresentado, gostaria de tentar sanar uma dúvida na correção do mesmo com os colegas. O meu objetivo é conseguir ler o conteúdo de um arquivo .txt, exibi-lo em uma página jsp de forma que eu consiga fazer um crud com ela.
Segue abaixo a minha classe Properties.
`
package model; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Enumeration; import java.util.Map; import java.util.TreeMap; /** * CLASSE QUE REPRESENTA A MINHA REGRA DE NEGÓCIO - faz o carregamento do conteúdo do arquivo e depois salva as alterações nele * @author ALLINONE * */ public class Properties { // private static final String FILE_NAME = "c:/Bruno/properties.txt"; private static final String FILE_NAME = "e:/properties.txt"; // essa coleção properties serve para mapear chaves a valores private static java.util.Properties props; /** * METODO RESPONSAVEL POR INSTANCIAR O OBJETO properties E CARREGAR AS INFORMAÇÕES DELE * NO OBJETO properties. */ static { props = new java.util.Properties(); try { props.load(new FileInputStream(FILE_NAME)); } catch(IOException e) { e.printStackTrace(); } } private Properties() { } /** * TEM POR OBJETIVO RETORNAR O CONTEÚDO DO ARQUIVO PROPERTIES.TXT * @return string como chave e string como valor */ public static Map<String, String> getProperties() { Map<String, String> map = new TreeMap<String, String>(); Enumeration<Object> e = props.keys(); while(e.hasMoreElements()) { String key = (String) e.nextElement(); String value = props.getProperty(key); map.put(key, value); } return map; } /** * REMOVE OS DADOS DESEJADOS NO PROPERTIES E RECRIA ELE NOVAMENTE CONTENDO OS DADOS * @param key * @throws IOException */ public static void delete(String key) throws IOException { props.remove(key); props.store(new FileOutputStream(FILE_NAME), ""); } /** * SALVA OS DADOS DESEJADOS NO PROPERTIES E RECRIA ELE NOVAMENTE CONTENDO OS NOVOS DADOS * @param key * @param value * @throws IOException */ public static void save(String key, String value) throws IOException { props.setProperty(key, value); props.store(new FileOutputStream(FILE_NAME), ""); } /** * RETORNA UMA STRING COM BASE NA CHAVE QUE EU PASSO * @param key * @return */ public static String getValue(String key) { return props.getProperty(key); } }
`
Servlet para listar as informações do arquivo e depois envia-lo para a página jsp.
`
package servlet; import java.io.IOException; import java.util.Map; 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 model.Properties; @WebServlet("/List") public class ListServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // pegando o conteúdo das propriedades Map<String, String> props = Properties.getProperties(); // o servlet coloca esse atributo "properties" na request, para que o jsp possa ler ele mais tarde // a request é um atributo que cria uma comunicação entre o servlet e o jsp, fazendo com que através de uma var // o conteúdo possa ser compartilhado. Nesse caso, o conteúdo do Map props poderá ser usado pelo jsp. request.setAttribute("props", props); //fazendo um direcionamento através do forward para a página list.jsp request.getRequestDispatcher("list.jsp").forward(request, response); }
}
`Página Jsp a qual deverá exibir as informações para o usuário
`
<%@page import="java.util.Map"%> <%@ 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>Propriedades</title> </head> <body> <% @SuppressWarnings("unchecked") // estou lendo aqui os atributos enviados pelo servlet. Map<String, String> props = (Map<String, String>) request.getAttribute("props"); %> <CENTER><H1>Propriedades</H1></CENTER> <a href="Edit">Criar nova propriedade</a> <br><br> <table border="1" width="100%"> <tr> <td align="center"><strong>Propriedade</strong></td> <td align="center"><strong>Valor</strong></td> <td colspan="2"></td> </tr> <% for(Map.Entry<String, String> entry : props.entrySet()) { %> <tr> <td align="center"><%=entry.getKey()%></td> <td align="center"><%=entry.getValue()%></td> <td align="center"><a href="Edit?key=<%=entry.getKey()%>">Editar</a></td> <td align="center"><a href="Delete?key=<%=entry.getKey()%>">Excluir</a></td> </tr> <% } %> </table> </body> </html>
`
Quando eu executo a aplicação o seguinte erro tem sido exibido:
`
dez 10, 2016 12:01:00 PM org.apache.tomcat.util.digester.SetPropertiesRule begin ADVERTÊNCIA: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Aula06_Integrando_Servlet_e_JSP' did not find a matching property. dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Server version: Apache Tomcat/8.0.32 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Server built: Feb 2 2016 19:34:53 UTC dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Server number: 8.0.32.0 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: OS Name: Windows 7 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: OS Version: 6.1 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Architecture: amd64 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Java Home: C:\Program Files\Java\jre1.8.0_92 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: JVM Version: 1.8.0_92-b14 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: JVM Vendor: Oracle Corporation dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: CATALINA_BASE: C:\Users\ALLINONE\Google Drive\CURSOS\SOFTBLUE\ Java Web com Servlets e JSPs\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: CATALINA_HOME: C:\Program Files\Apache Software Foundation\Tomcat 8.0 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Command line argument: -Dcatalina.base=C:\Users\ALLINONE\Google Drive\CURSOS\SOFTBLUE\ Java Web com Servlets e JSPs\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Command line argument: -Dcatalina.home=C:\Program Files\Apache Software Foundation\Tomcat 8.0 dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Command line argument: -Dwtp.deploy=C:\Users\ALLINONE\Google Drive\CURSOS\SOFTBLUE\ Java Web com Servlets e JSPs\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Command line argument: -Djava.endorsed.dirs=C:\Program Files\Apache Software Foundation\Tomcat 8.0\endorsed dez 10, 2016 12:01:00 PM org.apache.catalina.startup.VersionLoggerListener log INFORMAÇÕES: Command line argument: -Dfile.encoding=UTF-8 dez 10, 2016 12:01:00 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFORMAÇÕES: Loaded APR based Apache Tomcat Native library 1.1.34 using APR version 1.5.1. dez 10, 2016 12:01:00 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent INFORMAÇÕES: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. dez 10, 2016 12:01:01 PM org.apache.catalina.core.AprLifecycleListener initializeSSL INFORMAÇÕES: OpenSSL successfully initialized (OpenSSL 1.0.1q 3 Dec 2015) dez 10, 2016 12:01:01 PM org.apache.coyote.AbstractProtocol init INFORMAÇÕES: Initializing ProtocolHandler ["http-apr-8080"] dez 10, 2016 12:01:01 PM org.apache.coyote.AbstractProtocol init INFORMAÇÕES: Initializing ProtocolHandler ["ajp-apr-8009"] dez 10, 2016 12:01:01 PM org.apache.catalina.startup.Catalina load INFORMAÇÕES: Initialization processed in 1816 ms dez 10, 2016 12:01:01 PM org.apache.catalina.users.MemoryUserDatabase createRole ADVERTÊNCIA: Null or zero length role name specified. The role will be ignored. dez 10, 2016 12:01:01 PM org.apache.tomcat.util.digester.FactoryCreateRule begin INFORMAÇÕES: [FactoryCreateRule] Create exception ignored: Null or zero length role name specified. The role will be ignored. dez 10, 2016 12:01:01 PM org.apache.catalina.core.StandardService startInternal INFORMAÇÕES: Starting service Catalina dez 10, 2016 12:01:01 PM org.apache.catalina.core.StandardEngine startInternal INFORMAÇÕES: Starting Servlet Engine: Apache Tomcat/8.0.32 dez 10, 2016 12:01:02 PM org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom INFORMAÇÕES: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [176] milliseconds. dez 10, 2016 12:01:02 PM org.apache.coyote.AbstractProtocol start INFORMAÇÕES: Starting ProtocolHandler ["http-apr-8080"] dez 10, 2016 12:01:02 PM org.apache.coyote.AbstractProtocol start INFORMAÇÕES: Starting ProtocolHandler ["ajp-apr-8009"] dez 10, 2016 12:01:02 PM org.apache.catalina.startup.Catalina start INFORMAÇÕES: Server startup in 772 ms dez 10, 2016 12:01:27 PM org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet [jsp] in context with path [/Aula06_Integrando_Servlet_e_JSP] threw exception [An exception occurred processing JSP page /list.jsp at line 28 25: <td colspan="2"></td> 26: </tr> 27: 28: <% for(Map.Entry<String, String> entry : props.entrySet()) { %> 29: <tr> 30: <td align="center"><%=entry.getKey()%></td> 31: <td align="center"><%=entry.getValue()%></td> Stacktrace:] with root cause java.lang.NullPointerException at org.apache.jsp.list_jsp._jspService(list_jsp.java:138) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2500) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2489) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)
`
E esse é o conteúdo contido dentro do meu arquivo (Properties.txt )para exibição na página jsp.
p1=v1
p2=v2
p3=v3Desde já agradeço por qualquer ajuda.
Mensagens: 1
Participantes: 1