Har börjat arbeta på et böna som jag vill skall returnera ett sant eller falskt värde.
Denna skall användas för att att se om en användre är inloggad, och ifall denna har access till den berörda sidan.
Helst skulle jag vilja kolla på jsp-nivå:
ilia.admin.access.AccessBean ab = new ilia.admin.access.AccessBean();
if (!ab.getAccess()) {
response.sendRedirect("no_access.jsp");
return;
}
och ha en böna i stil med:
package ilia.admin.access;
import ilia.*;
import java.sql.*;
import java.io.*;
import java.util.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
public class AccessBean {
ConnectionPool pool = new ConnectionPool();
Connection con = null;
public boolean getAccess() throws ClassNotFoundException, SQLException{
int userPermission = 8;
String URI = "/ilia/access.jsp";
PreparedStatement pStmt2 = con.prepareStatement("SELECT * FROM admin_access WHERE status = 1 and url = ? and value = value & ?");
pStmt2.setString(1, URI);
pStmt2.setInt(2, userPermission);
ResultSet rs2 = pStmt2.executeQuery();
if(!rs2.next()){
return false;
}
else{
return true;
}
pool.putConnection(con);
}
}
Så mina problem är:
1. Hur kan jag få böna att antingen returnera ett true, eller ett false värde.
2. Hur kan jag göra så jag kan använda sessions inne i min böna.
3. Kan jag på något sätt använda, "request.getRequestURI()" inne i bönan?
1. Gör du inte redan det? Om inte så förstår jag inte riktigt frågan :)
2. Skicka med pageContext som en parameter till funktionen i din böna, då kommer du åt allt som du kommer åt i JSP sidan.
3. Se svaret på fråga 2 :)
Sen två saker till, funktionen avslutas direkt efter att du har anroppat return, eftersom du alltid anroppar return, antingen true eller false så kommer koden "pool.putConnection(con);" aldrig att köras och en connection kommer aldrig att lämnat tillbaka, samma sak om något går fel. Kör med try, catch och finally block istället och i t.ex. catch så kan du kasta vidare ett exception om du vill det, men då kommer ändå finally blocket att köras (och där har du "pool.putConnection(con);" koden).
Eftersom du nu har en catch och en finally så kan programmet hoppa över ditt return statement om något går fel innan det så du måste ha en return i slutet av funktionen också.
finally{
pool.putConnection(con);
}
return(false); //om något går fel, ge inte access.
}
Java API - PageContext, request blir inte en global variabel för att du skickar med PageContext utan du måste hämta ditt request objekt från din PageContext,
C:\Tomcat 5.5\webapps\ilia\WEB-INF\classes>javac ilia/admin/access/AccessBean.ja
va
ilia/admin/access/AccessBean.java:20: cannot find symbol
symbol : class HttpServletRequest
location: class ilia.admin.access.AccessBean
String uri2 = ((HttpServletRequest)context.getRequest())
.getRequestURI();
^
1 error
Skumt importerade "import javax.servlet.*;" då fungerade inte, men när jag specifierade som du beskrev Viktor så fungerade det. Tack.
Hur gör jag nu lättas för att hämta session-värden?