|
       10.5.8 Servlet inser.java
       Acest servlet este apelat de catre servlet-ul insed.java pentru a introduce datele completate de utilizator in baza de date. Fisierele imagine atasate nu sunt salvate in baza de date ci in directorul cu denumirea "/adi/imagini/alimente/cxx" unde xx este numarul subcategoriei in care se insereaza produsele. Deoarece se pot face upload-uri multiple, pana la trei produse in acelasi timp, fisierele imagine se salveaza la inceput sub forma 1.tip_1, 2.tip_2, 3.tip_3, pentru a nu se sterge sau modifica numele pentru cazul in care cele trei (sau 2) fisiere au aceeasi denumire. Chiar daca imaginea este aceeasi se considera astefel ca sunt fisiere distincte. Atunci cand se citesc parametrii upload-ului si se salveaza in baza de date, daca nu s-a completat campul denumire produs atunci fisierul atasat, daca exista, se sterge. Daca campul denumire este completat atunci fisierul atasat, daca exista, este redenumit din x.tip_x in codp.tip_x unde x este de la 1 la 3 iar codp este codul produsului. Exemplu de fisier upload-at:
       10183927312.jpg
unde 10183927312 este codul produsului iar jpg este tipul fisierului.
import java.io.*;
import java.util.*;
import java.util.Date;
import java.sql.*;
import javax.servlet.*;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.*;
import javax.servlet.http.HttpSession;
public class inser extends HttpServlet{
private String baseDir;//directorul aplicatiei pentru imaginile produselor alimentare
public void init(ServletConfig conf)throws ServletException {
super.init(conf);
baseDir = getServletConfig().getInitParameter("imagini");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req,res);
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
HttpSession ses = req.getSession();
Connection con=(Connection) ses.getAttribute("connexion");
String url1 = res.encodeURL("/adi/servlet/insed");
String url2 = res.encodeURL("/adi/servlet/opert");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
out.println("<head>");
out.println("<title> Pagina realizata cu servlet-ul inser" + "</title>");
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">");
out.println("<META content=\"text/html; charset=windows-1252\" http-equiv=Content-Type>");
out.println("<LINK href=\"/adi/tli.css\" rel=STYLESHEET type=text/css>");
out.println("<META content=\"MSHTML 5.00.2614.3500\" name=GENERATOR>");
out.println("<meta http-equiv=\"Pragma\" content=\"no-cache\">");
out.println("</head>");
out.println("<body>");
//butoanele pentru intoarcerea la paginile de editare si subcategorii
out.println("<table cellspacing=\"5\" width=\"100%\">");
out.println("<td width=40% align=\"rigth\">");
out.println("<form action=\"" + url1 + "\"method=\"post\">");
out.println("<input type=\"submit\" value=\"Editare\">");
out.println("</form>");
out.println("</td>");
out.println("<td width=20%> </td>");
out.println("<td width=40% align=\"left\">");
out.println("<form action=\"" + url2 + "\"method=\"post\">");
out.println("<input type=\"submit\" value=\"Categorii\">");
out.println("</form>");
out.println("</td>");
out.println("</table>");
try {
String subcti;
int iRowCount;
//se extrage categoria
subcti=(String)ses.getAttribute("subcat");
//se citeste numele si se calculeaza numarul de inregistrari pentru categorie
Statement stmt = con.createStatement();
ResultSet rs;
rs = stmt.executeQuery("select den from subcat where c2=" + subcti);
out.println("<br><br> Subcategoria \"" + rs.getString(1) + "<br><br>");
rs.close();
rs = stmt.executeQuery("select count(no) from alimente where cat=" + subcti);
if(rs.getString(1)!=null)
iRowCount=Integer.parseInt(rs.getString(1));
else
iRowCount=0;
rs.close();stmt.close();
//directorul cu imaginile categoriei; daca nu exista se creaza
String dir;
File fDir = new File(baseDir + File.separator + "c" + subcti);
if(!fDir.isDirectory())
fDir.mkdir();
dir=fDir.toString();
out.println("<br><br> 1 <br><br>");
//se citesc parametrii
MultipartRequest multi = new MultipartRequest(req,dir,15*1024);
out.println("<br><br> 2 <br><br>");
//se adauga produsele in BD
int countAddProd=0;
for(int i=1;i<4;i++){
File f=null;
File g=null;
String fimp=null;
String type="";
String pname,dp,pret,up,expl,pozp,codp;
stoi Pret, Pozp;
//fisierul pentru upload, el este deja pe disc
pname="imp" + i;
fimp = multi.getFilesystemName(pname);
if(fimp!=null){
type = fimp.substring(fimp.indexOf(".")+1,fimp.length());
f = multi.getFile(pname);
}
//denumire produs
pname="denp" + i;
dp = multi.getParameter(pname);
//conditie minima pentru introducere in baza de date
if(dp!=null){
pname="ump" + i;
up = multi.getParameter(pname);
if(up==null) up=" ";
pname="pretp" + i ;
pret = multi.getParameter(pname);
Pret = new stoi(pret);
pname="pozp" + i ;
pozp = multi.getParameter(pname);
Pozp = new stoi(pozp);
pname="expl" + i;
expl = multi.getParameter(pname);
if(expl==null) expl=" ";
//cod produs pe baza datei la care se adauga i= 1,3
Date dtcod = new Date();
codp=dtcod.getTime()/1000 + "" + i;
countAddProd++;
stmt = con.createStatement();
String querry;
//se adauga produs in pozitia specificata
if(Pozp.IntS()>0 && Pozp.IntS()<=(iRowCount + countAddProd-1)){
//se incrementeaza numarul pentru produsele de "deasupra"
querry="update alimente set no=no+1 where no>=" + Pozp.IntS() + " and cat=" + subcti;
stmt.executeUpdate(querry);
//out.println("<br>"+ querry +"<br>");
//se insereaza produsul
querry="insert into alimente values(" + codp + ",\"" + dp.trim() + "\"," + Pret.IntS()
+ ",\"" + (up.trim()).toLowerCase() + "\",\"\"," + subcti + ",\""
+ expl.trim() + "\"," + Pozp.IntS() + ",\"" + type + "\")";
stmt.executeUpdate(querry);
//out.println("<br>"+ querry +"<br>");
}
else{
//produsul se insereaza la sfarsit
querry="insert into alimente values(" + codp + ",\"" + dp.trim() + "\"," + Pret.IntS()
+ ",\"" + (up.trim()).toLowerCase() + "\",\"\"," + subcti + ",\""
+ expl.trim() + "\"," + (iRowCount + countAddProd) + ",\"" + type + "\")";
stmt.executeUpdate(querry);
//out.println("<br>"+ querry +"<br>");
}
stmt.close();
//se redenumeste fisierul cu codul produsului
String filepath="";
if(fimp!=null){
String ren = dir + File.separator + codp + "." + type;
g = new File(ren);
f.renameTo(g);
//out.println("<br>" + ren + "<br>");
//se afiseaza produsul introdus
filepath=g.toString();
filepath=filepath.substring(filepath.indexOf("adi")-1,filepath.length());
filepath=filepath.replace('\\','/');
}
out.println("<hr>    Produsul " + i + " inregistrat:<br>");
out.println("<table cellspacing=\"5\" width=\"600\">");
out.println("<td align=left valign=middle>");
out.println("Denumire:<br>" + dp + "<br>" + expl + "<br>Pret "
+ Pret.IntS() + " pe " + up + "<br></td>");
out.println("<td valign=middle>");
if(f!=null)
out.println("<img src=" + filepath + " height=70></td>");
out.println("</table>");
}
else{//nu s-a dat denumirea produsului
if(f!=null) f.delete();
}
}
}
catch(SQLException e) {
out.println("An SQL Exception was thrown.");
}
catch(Exception e) { e.printStackTrace(out); }
out.println("</body></html>");
out.close();
}
}
|
|