27. maj 2002 - 18:16
Der er
4 kommentarer og 2 løsninger
Tilføj varer til Indkøbskurv via database (paradox)????
Hej jeg har her en servlet der skal ligge vare i en indkøbskurv når kunden har søgt på varerne i databasen og valgt hvilke nogen af dem person vil have. hvad går der egentlig galt. sig til hvis jeg skal poste mere kode!!! package usingjsp.Internetbutik; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.sql.*; /** * * @author * @version */ public class TilFoejTILKurvServlet extends HttpServlet { protected Connection conn; /** Initializes the servlet. */ public void init(ServletConfig config) throws ServletException { super.init(config); try { java.lang.Class.forName("sun.jdbc.odbc.JdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:indkoebdb"); } catch (Exception exc) { getServletContext().log("Error making JDBC connection: ", exc); } } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { String Varenr = request.getString("Varenr"); double Pris = Double.parseDouble(request.getdouble("Pris")); String Beskrivelse = request.getString("Beskrivelse"); int Maengde = request.getInt("Maengde"); int OrdreEnhed = request.getInt("OrdreEnhed"); Varerclass varerclass = new Varerclass(Varenr, Pris, Beskrivelse, Maengde, OrdreEnhed); HttpSession session = request.getSession(); IndkoebskurvClass kurv = (IndkoebskurvClass) session.getAttribute("IndkoebskurvClass"); if (kurv == null) { kurv = new IndkoebskurvClass(); session.setAttribute("IndkoebskurvClass", kurv); } kurv.addVarerclass(varerclass); } /** Destroys the servlet. */ public void destroy() { try { if (conn != null) { conn.close(); } } catch (SQLException exc) { getServletContext().log("Error closing JDBC connection: ", exc); } } /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); /* output your page here out.println("<html>"); out.println("<head>"); out.println("<title>Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("</body>"); out.println("</html>"); */ out.close(); } /** Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Returns a short description of the servlet. */ public String getServletInfo() { return "Short description"; } }
Annonceindlæg fra Thales
her er fejlmeddelelsen: Programmer/Allaire/JRun/servers/default/demo-app/jsp/usingjsp/Internetbutik/TilFoejTILKurvServlet.java [45:1] cannot resolve symbol symbol : method getString (java.lang.String) location: interface javax.servlet.http.HttpServletRequest String Varenr = request.getString("Varenr"); ^ Programmer/Allaire/JRun/servers/default/demo-app/jsp/usingjsp/Internetbutik/TilFoejTILKurvServlet.java [46:1] cannot resolve symbol symbol : method getdouble (java.lang.String) location: interface javax.servlet.http.HttpServletRequest double Pris = Double.parseDouble(request.getdouble("Pris")); ^ Programmer/Allaire/JRun/servers/default/demo-app/jsp/usingjsp/Internetbutik/TilFoejTILKurvServlet.java [47:1] cannot resolve symbol symbol : method getString (java.lang.String) location: interface javax.servlet.http.HttpServletRequest String Beskrivelse = request.getString("Beskrivelse"); ^ Programmer/Allaire/JRun/servers/default/demo-app/jsp/usingjsp/Internetbutik/TilFoejTILKurvServlet.java [48:1] cannot resolve symbol symbol : method getInt (java.lang.String) location: interface javax.servlet.http.HttpServletRequest int Maengde = request.getInt("Maengde"); ^ Programmer/Allaire/JRun/servers/default/demo-app/jsp/usingjsp/Internetbutik/TilFoejTILKurvServlet.java [49:1] cannot resolve symbol symbol : method getInt (java.lang.String) location: interface javax.servlet.http.HttpServletRequest int OrdreEnhed = request.getInt("OrdreEnhed"); ^ 5 errors Errors compiling TilFoejTILKurvServlet.
På en request, kan du kun kalde .getParameter() som så returnerer en String med indholdet, eller null hvis den ikke findes. Derefter må du selv konvertere til int osv. Brug evt. denne klasse jeg har lavet som går det for dig: /* * ParameterParser.java * * Created on 14. februar 2002, 18:47 */ import javax.servlet.http.*; /** * * @author srr * @version */ public class ParameterParser { public static final String STRING_DEFAULT="TEST"; public static final int INT_DEFAULT=-1; public static final long LONG_DEFAULT=-1; public static final float FLOAT_DEFAULT=-1; public static final double DOUBLE_DEFAULT=-1; public static final boolean BOOLEAN_DEFAULT=false; // Is private in order to make sure it can not be instantiated private ParameterParser() { } public static String getString(HttpServletRequest request, String name) { return getString(request, name,STRING_DEFAULT); } public static String getString(HttpServletRequest request, String name, String def) { String temp=request.getParameter(name); if(temp==null || temp.equals("")) return def; return temp; } public static int getInt(HttpServletRequest request, String name) { return getInt(request, name, INT_DEFAULT); } public static int getInt(HttpServletRequest request, String name, int def) { String temp=request.getParameter(name); if(temp==null || temp.equals("")) return def; int val=def; try { def=Integer.parseInt(temp); } catch (NumberFormatException e) { } return def; } public static long getLong(HttpServletRequest request, String name) { return getLong(request, name, LONG_DEFAULT); } public static long getLong(HttpServletRequest request, String name, long def) { String temp=request.getParameter(name); if(temp==null || temp.equals("")) return def; long val=def; try { def=Long.parseLong(temp); } catch (NumberFormatException e) { } return def; } public static float getFloat(HttpServletRequest request, String name) { return getFloat(request, name, FLOAT_DEFAULT); } public static float getFloat(HttpServletRequest request, String name, float def) { String temp=request.getParameter(name); if(temp==null || temp.equals("")) return def; float val=def; try { def=Float.parseFloat(temp); } catch (NumberFormatException e) { } return def; } public static double getDouble(HttpServletRequest request, String name) { return getDouble(request, name, DOUBLE_DEFAULT); } public static double getDouble(HttpServletRequest request, String name, double def) { String temp=request.getParameter(name); if(temp==null || temp.equals("")) return def; double val=def; try { def=Double.parseDouble(temp); } catch (NumberFormatException e) { } return def; } public static boolean getBoolean(HttpServletRequest request, String name) { return getBoolean(request, name, BOOLEAN_DEFAULT); } public static boolean getBoolean(HttpServletRequest request, String name, boolean def) { String temp=request.getParameter(name); if(temp==null || temp.equals("")) return def; if(temp.equalsIgnoreCase("on") || temp.equalsIgnoreCase("true")) return true; return false; } }
Forresten er dette her: protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); /* output your page here out.println("<html>"); out.println("<head>"); out.println("<title>Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("</body>"); out.println("</html>"); */ out.close(); } MEGET grimt, man laver IKKE html kode i en servlet, så får man ligeså dårlig kode som de fleste php kodere laver.
nu ser min kode så sådan ud hvordan får jeg forte for java til at vise det kunden har lagt i kurven på skærmen?? package usingjsp.Internetbutik; import usingjsp.Internetbutik.*; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.sql.*; /** * * @author * @version */ public class TilFoejTILKurvServlet extends HttpServlet { protected Connection conn; /** Initializes the servlet. */ public void init(ServletConfig config) throws ServletException { super.init(config); try { java.lang.Class.forName("sun.jdbc.odbc.JdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:indkoebdb"); } catch (Exception exc) { getServletContext().log("Error making JDBC connection: ", exc); } } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { String Varenr = request.getParameter("Varenr"); double Pris = Double.parseDouble(request.getParameter("Pris")); String Beskrivelse = request.getParameter("Beskrivelse"); int Maengde =Integer.parseInt( request.getParameter("Maengde")); int OrdreEnhed =Integer.parseInt( request.getParameter("OrdreEnhed")); Varerclass varerclass = new Varerclass(Varenr, Pris, Beskrivelse, Maengde, OrdreEnhed); HttpSession session = request.getSession(); IndkoebskurvClass kurv = (IndkoebskurvClass) session.getAttribute("IndkoebskurvClass"); if (kurv == null) { kurv = new IndkoebskurvClass(); session.setAttribute("IndkoebskurvClass", kurv); } kurv.addVarerclass(varerclass); } /** Destroys the servlet. */ public void destroy() { try { if (conn != null) { conn.close(); } } catch (SQLException exc) { getServletContext().log("Error closing JDBC connection: ", exc); } } /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods. * @param request servlet request * @param response servlet response */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType(""); java.io.PrintWriter out = response.getWriter(); out.close(); } /** Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { processRequest(request, response); } /** Returns a short description of the servlet. */ public String getServletInfo() { return "Short description"; } }
Din doGet og doPost-metode bliver aldrig kaldt. Det er service-metoden der kaldes. Du kan altså roligt slette både doGet og doPost-metoden. Det giver lidt mindre (og dermed lettere forståelig) kode. Jeg vil foreslå at du i din service-metode slutter af med et kald til processRequest. Denne metode kan du så lave om til protected void processRequest(HttpServletRequest request,HttpServletResponse response) throws ServletException, java.io.IOException { response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet</title>"); out.println("</head>"); out.println("<body>"); out.println("Min indkøbskurv:<br>"); out.println("(her skal være output der beskriver indkøbskurven)"); out.println("</body>"); out.println("</html>"); out.close(); } Til slut kan du så lave om, så du itererer hen over varerne i din indkøbskurv og præsenterer dem på en pæn måde. På et tidspunkt finder du nok ud af, at det er besværligt at lave output på den måde. Så kan du evt overveje at kigge på servlets.
hvordan laver man et kald til processRequest? Til slut kan du så lave om, så du itererer hen over varerne i din indkøbskurv og præsenterer dem på en pæn måde.- hvordan???
Kurser inden for grundlæggende programmering