Avatar billede decrypto Nybegynder
19. november 2005 - 23:48 Der er 31 kommentarer

getPathInfo() returner hele tiden null

Meget nemt spørgsmål:

I min servlet har jeg en streng, hvori jeg sætter *.getPathInfo() lig med.

String pathInfo = request.getPathInfo();

Problemet er at der altid står null i det, hvad overser jeg?

Hvis jeg har et link på en side

<a href="/hip/?register">Klik her</a>

Burde jeg så ikke få noget i getPathInfo()? Jeg har sat min servlet som start i min web.xml filen i WEB-INF.

<welcome-file>
            ControllerServlet
</welcome-file>

Hvad overser jeg?
Avatar billede arne_v Ekspert
19. november 2005 - 23:51 #1
ikke som jeg læser docs

request.getQueryString() burde give noget
Avatar billede decrypto Nybegynder
19. november 2005 - 23:52 #2
Her paster lige min servlet ind her....

--------------------------- Servlet ------------------

/*
* ControllerServlet.java
*
* Created on 11. november 2005, 21:42
*/

import classes.*;
import interfaces.*;
import entities.*;
import services.*;

import java.io.IOException;
import java.net.*;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*
* @author Administrator
* @version
*/


public class ControllerServlet extends HttpServlet {
   
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
    * @param request servlet request
    * @param response servlet response
    */
   
    //Definition of incoming request paths
   
    private final String HOME_PAGE_PATH = "/index.jsp";

    private final String registerPath = "/register";
    private final String loginPath = "/login";
    private final String inspectionLstPath = "/inspection";
    private final String customerLstPath = "/customers";
    private final String propertyLstPath = "/properties";
    private final String propertyPath = "/property";
   
    private final String VIEWS_ROOT_DIR = "/hip";
    private final String DEFAULT_VIEW = VIEWS_ROOT_DIR + "/index.jsp";
    private final String registerView = VIEWS_ROOT_DIR + "/register.jsp";
    private final String loginView = VIEWS_ROOT_DIR + "/customerLogin.jsp";
    private final String inspectionLstView = VIEWS_ROOT_DIR + "/inspectionLst.jsp";
    private final String customerLstView = VIEWS_ROOT_DIR + "/customerLst.jsp";
    private final String propertyLstView = VIEWS_ROOT_DIR + "/propertyLst.jsp";
    private final String propertyView = VIEWS_ROOT_DIR + "/property.jsp";
   
   
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
       
        String viewUrl = null;
        String pathInfo = request.getPathInfo();
             
        //---- Views -----*/
        if(HOME_PAGE_PATH.equals(pathInfo)||(pathInfo==null)){
            viewUrl = DEFAULT_VIEW;
        }
       
        if(registerPath.equals(pathInfo)){
            viewUrl = registerView;
        }
     
        if(loginPath.equals(pathInfo)){
            viewUrl = loginView;
        }
       
        if(inspectionLstPath.equals(pathInfo)){
            viewUrl = inspectionLstView;
        }
        response.sendRedirect(viewUrl);
    }
   
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       
       
        /*Overall page requests*/
                       
    }                 

   
    /** Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
       
        String pathInfo = request.getPathInfo();
       
    }
   
    /** Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}
Avatar billede decrypto Nybegynder
19. november 2005 - 23:52 #3
Hvad bruger man så getPathInfo() til?
Avatar billede arne_v Ekspert
19. november 2005 - 23:55 #4
Avatar billede decrypto Nybegynder
19. november 2005 - 23:56 #5
Eller hvordan kan jeg sørge for, at der står det, jeg skal bruge i dem?
Avatar billede decrypto Nybegynder
19. november 2005 - 23:56 #6
Dødt link
Avatar billede decrypto Nybegynder
19. november 2005 - 23:57 #7
Nåhh nu forstår jeg, det var ikke et link -Sorry, var lidt for hurtig
Avatar billede arne_v Ekspert
19. november 2005 - 23:58 #8
:-)
Avatar billede decrypto Nybegynder
19. november 2005 - 23:59 #9
Men burde jeg så ikke fange 'register' i getPathInfo() fra dette link <a href="/hip/?register">Klik her</a>
????
Avatar billede arne_v Ekspert
20. november 2005 - 00:01 #10
nej

efter servlet før ? => getPathInfo

efter ? => getQueryString
Avatar billede decrypto Nybegynder
20. november 2005 - 00:01 #11
Eller skal der stå <a href="/hip/register?register">Klik her</a>???

Men så får jeg en:

HTTP Status 404 - /hip/register

--------------------------------------------------------------------------------

type Status report

message /hip/register

description The requested resource (/hip/register) is not available.
Avatar billede decrypto Nybegynder
20. november 2005 - 00:02 #12
Jeg vil jo have at min ControllerServlet fanger register uden brug af querystring, kun brug af getPathInfo(), eller er der noget jeg fuldstændigt har misforstået?
Avatar billede decrypto Nybegynder
20. november 2005 - 00:04 #13
Så mit link burde hedde

<a href="/hip/ControllerServlet/register">Klik her</a>

Og så kan jeg fange register vha. getPathInfo()?

hmmm det virker vist heller ikke..
Avatar billede arne_v Ekspert
20. november 2005 - 00:05 #14
det burde faktisk virke

ihverfald uden wildcard mapping

men det har du jo nok
Avatar billede decrypto Nybegynder
20. november 2005 - 00:06 #15
Ok, prøver lige igen....
Avatar billede decrypto Nybegynder
20. november 2005 - 00:07 #16
Jeg er bare ikke glad for at der står ControllerServlet i linket.
Avatar billede decrypto Nybegynder
20. november 2005 - 00:08 #17
<a href="/hip/ControllerServlet/register">Klik her</a>

Jeg fanger ikke 'register' vha getPathInfo metoden.
Avatar billede decrypto Nybegynder
20. november 2005 - 00:10 #18
Er der noget jeg skal sætte op i min web.xml fil, for nu når jeg tænker på det har jeg jo ikke en mappe, der hedder 'register' i mit project, men det behøver jeg vel ikk, vel?
Avatar billede arne_v Ekspert
20. november 2005 - 12:58 #19
<%=request.getRequestURI()%><br>
<%=request.getScheme()%><br>
<%=request.getServerName()%><br>
<%=request.getServerPort()%><br>
<%=request.getContextPath()%><br>
<%=request.getServletPath()%><br>
<%=request.getPathInfo()%><br>
<%=request.getQueryString()%><br>

http://localhost:8080/test/urlparse.jsp?k=v

/test/urlparse.jsp
http
localhost
8080
/test
/urlparse.jsp
null
k=v
Avatar billede arne_v Ekspert
20. november 2005 - 12:59 #20
package test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UrlParseServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().println(request.getRequestURL() + "<br>");
        response.getWriter().println(request.getScheme() + "<br>");
        response.getWriter().println(request.getServerName() + "<br>");
        response.getWriter().println(request.getServerPort() + "<br>");
        response.getWriter().println(request.getContextPath() + "<br>");
        response.getWriter().println(request.getServletPath() + "<br>");
        response.getWriter().println(request.getPathInfo() + "<br>");
        response.getWriter().println(request.getQueryString() + "<br>");
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
    <servlet>
        <servlet-name>UrlParseServlet</servlet-name>
        <servlet-class>test.UrlParseServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UrlParseServlet</servlet-name>
        <url-pattern>/UrlParseServlet/*</url-pattern>
    </servlet-mapping>
</web-app>

http://localhost:8080/test/UrlParseServlet/xxx?k=v

http://localhost:8080/test/UrlParseServlet/xxx
http
localhost
8080
/test
/UrlParseServlet
/xxx
k=v
Avatar billede arne_v Ekspert
20. november 2005 - 13:00 #21
http://localhost:8080/test/urlparse.jsp/xxx?k=v

HTTP Status 404 - /test/urlparse.jsp/xxx

--------------------------------------------------------------------------------

type Status report

message /test/urlparse.jsp/xxx

description The requested resource (/test/urlparse.jsp/xxx) is not available.


--------------------------------------------------------------------------------

Apache Tomcat/5.5.9
Avatar billede decrypto Nybegynder
20. november 2005 - 13:22 #22
Det ser meget rigtigt ud, men konklusionen er vel, at det ikke er getPathInfo jeg skal bruge...
Avatar billede decrypto Nybegynder
20. november 2005 - 13:25 #23
Eller i det næstsidste eksempel kan jeg se at du får det ud alligevel.
Avatar billede decrypto Nybegynder
20. november 2005 - 13:25 #24
ok, der har du sat noget op i web.xml filen. Jeg prøver også lige....
Avatar billede arne_v Ekspert
20. november 2005 - 13:25 #25
JSP : virker ikke

servlet : virker hvis mappingen ender i en *
Avatar billede decrypto Nybegynder
20. november 2005 - 13:34 #26
Ok.

min web.xml fil ser nu således ud....
----------------- web.xml ------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  <servlet>
    <servlet-name>ConrtrollerServlet</servlet-name>
    <servlet-class>ConrtrollerServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>ControllerServlet</servlet-name>
    <servlet-class>ControllerServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>ConrtrollerServlet</servlet-name>
    <url-pattern>/ConrtrollerServlet/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ControllerServlet</servlet-name>
    <url-pattern>/ControllerServlet/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>
            30
        </session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>
            ControllerServlet
        </welcome-file>
  </welcome-file-list>
</web-app>
Avatar billede decrypto Nybegynder
20. november 2005 - 13:35 #27
Jeg undrer mig bare over at nogle af tingene er gentaget. Men hvis jeg fjerner gentagelserne, så virker det ikke...
Avatar billede decrypto Nybegynder
20. november 2005 - 13:38 #28
Sådan så fanger jeg register, jeg er dog ikke glad for at der står /ControllerServlet/register i min URL, da det jo gerne skulle være skjult.
Avatar billede arne_v Ekspert
20. november 2005 - 13:58 #29
hvad giver en mapning af /*.dinextension/* ?
Avatar billede arne_v Ekspert
20. november 2005 - 19:49 #30
ConrtrollerServlet
ControllerServlet

der er et ekstra r i nogen af dem !
Avatar billede arne_v Ekspert
31. december 2005 - 14:41 #31
kom det til at virke ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester