[ cope.rs @ 18.12.2008. 12:45 ] @
Biću kratak. Mislim da je ovo sigurno moguće ali ni za živu glavu ne uspevam da nadjem na netu nekakvo objašnjenje ili hint

Dakle, umesto:
www.some-site.com/welcome.jsp

Hteo bih da jednostavno mogu da koristim:
www.some-site.com/welcome

dakle, ovakav link bi onda otvorio welsome.jsp stranicu ali u adresi ne bi pisalo .jsp

Da li neko ima ideju kako bi ovo moglo da se sredi? Ili bare GDE bih mogao o tome da čitam?

Hvala unapred!
[ gajo2 @ 18.12.2008. 13:32 ] @
Napravis jedan servlet, i u web.xml-u namestis da mu je servlet-mapping *
To znaci da ce taj servlet da uhvati sve requeste. Zatim u kod servleta, iz requesta uzmes ime koji je korisnik trazio, i forwardujes ka ime+".jsp"... ne znam napamet, nesto kao request.getRequestDispatcher(ime+".jsp").forward(request,response)

Na ovakav nacin radi Struts, osim sto on hvata *.do requeste
[ cope.rs @ 18.12.2008. 14:12 ] @
TIL D DŽADŽA!!!

taj forward ću da provalim, tj. nađio sam ga već:
Code:

String path = request.getRequestURI();
String ime = path...
RequestDispatcher rd = request.getRequestDispatcher(ime+".jsp");
rd.forward(request, response);


A za servlet-mapping mi sad nešto pade na pamet, zar ne bi moglo da se podesi sa * da mappuje sve na to+.jsp?
Nešto u fazonu mapuj * na *.jsp ?

Moram da vidim za servlet-mapping...

Razmišljam da li bi radilo:
Code:

<servlet-mapping>
  <servlet-name>*.jsp</servlet-name>
  <url-pattern>*</url-pattern>
</servlet-mapping>


Mada sam 99,99% siguran da ne bi
[ cope.rs @ 18.12.2008. 19:01 ] @
Citat:
gajo2: Napravis jedan servlet, i u web.xml-u namestis da mu je servlet-mapping *
To znaci da ce taj servlet da uhvati sve requeste. Zatim u kod servleta, iz requesta uzmes ime koji je korisnik trazio, i forwardujes ka ime+".jsp"... ne znam napamet, nesto kao request.getRequestDispatcher(ime+".jsp").forward(request,response)
Na ovakav nacin radi Struts, osim sto on hvata *.do requeste


Joksim...

Code:

java.lang.StackOverflowError
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
    at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
    ...
[ Ivan Ivanic @ 18.12.2008. 19:36 ] @
http://en.wikipedia.org/wiki/Rewrite_engine

http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

http://www.sitepoint.com/article/apache-mod_rewrite-examples/

Pogledaj prvo ovaj članak na wiki.
Pošto vidim da koristiš apache evo ti link za apache mod rewrite.
[ gajo2 @ 19.12.2008. 07:36 ] @
Citat:
preff.net: Joksim...

Code:

java.lang.StackOverflowError
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:545)
...

Da to ima smisla, jer je servlet-mapping * pa se stalno zove isti servlet. Onda mozes koristiti ovo sto je napisao Ivan, a uspeo sam da uradim i uz pomoc filtera. Dakle potpuno ista ideja kao servlet, u web.xml se deklarise filter i u filter-mappingu se upise url-pattern *, zatim kod filtera izgleda ovako:

Code:
public class RequestFilter implements Filter {

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest)request;
        String path = req.getRequestURI();
        String name = path.substring(path.lastIndexOf("/"));
        if (name.endsWith(".jsp")) {     // ako je JSP stranica onda je prikazi
            chain.doFilter(request, response);
        } else {      // inace forwarduj do nje
            req.getRequestDispatcher(name+".jsp").forward(request, response);
        }
    }
    
    public void destroy() { }

    public void init(FilterConfig cfg) throws ServletException { }

}


Prednost filtra nad servletom je ta da mozes prekinuti izvrsavanje tako sto na kraju metode ne napises chain.doFilter(request, response); tako da Tomcat nece uci u peskonacnu petlju...
Mada vidim da ces i ovako imati probleme sa slikama i drugim ne-jsp fajlovima, pa mozda ti je bolje da ne koristis format http://www.mojsajt.com/stranica nego neki drugi npr. sa .html ekstenzijom? Napravis servlet ili filter ili koristis mod_rewrite tako da .html requeste forwarduje ka .jsp?
[ cope.rs @ 19.12.2008. 09:01 ] @
Citat:
gajo2: Da to ima smisla, jer je servlet-mapping * pa se stalno zove isti servlet. Onda mozes koristiti ovo sto je napisao Ivan, a uspeo sam da uradim i uz pomoc filtera.


TO GAJO MAJSTORE

Sad mi krivo što sam na poslu pa ne mogu da probam, ali čim stignem kući večeras odmah kuckam sve ovo

Ako sam dobro skapirao, samo treba da dodam u web.xml:
Code:

    <filter>
        <filter-name>RequestFilter</filter-name>
        <filter-class>cope.RequestFilter</filter-class>
        <description>Ubiva potrebu za .jsp u URL-u</description>
    </filter>

i to je to?

[Ovu poruku je menjao preff.net dana 19.12.2008. u 10:24 GMT+1]
[ gajo2 @ 19.12.2008. 10:11 ] @
Pa ja sam na poslu napisao ovo, treba nekako da prođe vreme kad je sve ušlo u zastoj zbog praznika

Forum misli da koristim caps lock kad pisem cirilicom?

Edit: vidi ti to, konvertirano u latinicu!
[ cope.rs @ 19.12.2008. 18:37 ] @
RADI!!!

Ako nekome treba evo detaljnog koda:
(obratiti pažnju da se pokriju sve ekstenzije koje koristite, na primer png ili recimo .dwr ako ga koristite, taj me je mučio...)
Code:

package cope;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class RequestFilter implements Filter
{

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException
    {
        HttpServletRequest req = (HttpServletRequest) request;
        String path = req.getRequestURI();
        String name = path.substring(path.lastIndexOf("/"));
        if (name.endsWith(".js")) chain.doFilter(request, response);
        else if (name.endsWith(".ico")) chain.doFilter(request, response);
        else if (name.endsWith(".css")) chain.doFilter(request, response);
        else if (name.endsWith(".jpg")) chain.doFilter(request, response);
        else if (name.endsWith(".gif")) chain.doFilter(request, response);
        else if (name.endsWith(".jsp")) chain.doFilter(request, response);
        else if (name.endsWith("/")) req.getRequestDispatcher(name + "index.jsp").forward(request, response);
        else req.getRequestDispatcher(name + ".jsp").forward(request, response);
    }

    public void destroy()
    {}

    @SuppressWarnings("unused")
    public void init(FilterConfig cfg) throws ServletException
    {}

}


i u web.xml na vrhu:
Code:

    <filter>
        <filter-name>RequestFilter</filter-name>
        <filter-class>cope.RequestFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>RequestFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
[ cope.rs @ 20.12.2008. 10:39 ] @
Mali dodatak da bi se najbrže provalile ekstenzije koje nam trebaju a koje smo zaboravili da pokrijemo.

Umesto
Code:

else req.getRequestDispatcher(name + ".jsp").forward(request, response);


staviti
Code:

        else
        {
            System.out.println(name);
            req.getRequestDispatcher(name + ".jsp").forward(request, response);
        }


I onda će ispisati fajlove koje smo zaboravili