JSP - Servlet kommunikation
Hej,Jeg har en jsp side der skal kommunikere med en servlet controller (fra Goodwill "developing java servlets 2.d ed") - men det går bare ikke rigtigt.
I min navigations-jsp henviser jeg til Controlleren som:
<tr>
<td>
a href="/catalog/Controller?service=ListMovies&catid=1&target=/ListMovies.jsp">
Action/Adventure
</a>
</td>
</tr>
Controllerens doPost er angivet nedenfor. Den snupper parameteren "service" og finder ud af, hvilken service skal køres.
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Get the name of the Transaction to perform
String serviceName = request.getParameter("service");
if (serviceName == null) {
throw new ServletException("No service named!");
}
// Get the target of the request
String target = request.getParameter("target");
if (target == null) {
throw new ServletException("No target named!");
}
ServletContext context = getServletContext();
// Create and execute an instance of the named service
try {
// Create an instance of the fully qualified Service Class
Class cls = Class.forName(serviceName);
Service service = (Service)cls.newInstance();
// Execute the Transaction
service.execute(request, response, context);
}
catch (ClassNotFoundException ce) {
throw new ServletException(ce.getMessage());
}
catch (IllegalAccessException iae) {
throw new ServletException(iae.getMessage());
}
catch (Exception e) {
throw new ServletException(e.getMessage());
}
// Forward the results
forward(request, response, target);
}
Den smider altså requesten videre til en service, i dette tilfælde ListMovies.java der implementerer Service interfacet. I ListMovies bruges catid parameteren fra jsp-siden i execute().
public void execute(HttpServletRequest request,
HttpServletResponse response,
ServletContext context) throws Exception {
// Get categorie_id from the request
String catid = request.getParameter("catid");
try
{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/Moviecatalog");
Connection con = ds.getConnection("root", "jokl98ac");
if ( con != null ) {
Statement statement = con.createStatement();
// Get titles with matching category id
StringBuffer query = new StringBuffer("SELECT * FROM TITLES");
query.append(" WHERE CATEGORY_ID = " + catid);
ResultSet rs =
statement.executeQuery(query.toString());
Object[] movies = parseResultSet(rs);
// Add the resulting movies to the request
request.setAttribute("movies", movies);
}
}catch(Exception e){}
Når jeg pakker det og kører det får jeg flg exception report
javax.servlet.ServletException: ListMovies
servlets.Controller.doPost(Controller.java:105)
servlets.Controller.doGet(Controller.java:59)
javax.servlet.http.HttpServlet.service(HttpServlet.java:748)
javax.servlet.http.HttpServlet.service(HttpServlet.java:861)
sun.reflect.GeneratedMethodAccessor159.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:289)
java.security.AccessController.doPrivileged(Native Method)
Der bliver kstet en undtagelse i linie 105 i controlleren, hvilket er en ClassNotFoundException. Kan ikke helt forstå hvilke klasse det er den ikke kan finde?
Please hjælp! Det er til et eksamensprojekt og jeg er ude på ret (meget!) dybt vand!
mvh Jonas