Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > jsp Расширение заменить на другое


Автор: 4epT 26.12.2011, 23:53
Добрый вечер! Имеется проект написанный на JSP и Servlets, в урлах везде светится расширение страниц jsp ... как то можно через web.xml сказать что пусть все страницу будут html ? но сами страницы не менять ? или вообще как поменять расширение ?)

Автор: Stolzen 27.12.2011, 05:19
Можно написать фильтр, который будет получать адрес с расширением html, отбрасывать его и делать форвардинг на jsp.
В итоге может получиться что-то типа такого:

Код

class HtmlToJspFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        
        if (!(request instanceof HttpServletRequest)) {
            chain.doFilter(request, response);
            return;
        }
        
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String uri = httpRequest.getRequestURI();
        boolean htmlRequest = uri.endsWith("html");
        
        if (htmlRequest) {
            String jsp = uri.substring(uri.length() - 4) + "jsp";
            RequestDispatcher requestDispatcher = httpRequest.getRequestDispatcher(jsp);
            requestDispatcher.forward(request, response);
        } else {
            chain.doFilter(request, response);
        }
    }
    
    @Override
    public void destroy() {
    }
}


Автор: 4epT 28.12.2011, 02:33
Немного подредактировал фильтр ... получилось вот такое:

Код

public class HtmlToJspFilter implements Filter {
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        
        if (!(request instanceof HttpServletRequest)) {
            chain.doFilter(request, response);
            return;
        }
        
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String uri = httpRequest.getRequestURI();
        boolean htmlRequest = uri.endsWith("html");
        
        if (htmlRequest) {
            String jsp = uri.substring(0, uri.length() - 4) + "jsp";
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.sendRedirect(jsp);
            return;
        } else {
            chain.doFilter(request, response);
        }
    }
    
    @Override
    public void destroy() {
    }
}


Но это ведь не решает проблемы .. пользователь все равно видит в url расширение jsp =(
Неужели нету каких то настроек, где будек сказано что *.jsp тоже самое что *.html ?  smile 

Автор: Stolzen 28.12.2011, 02:35
Цитата(4epT @  28.12.2011,  03:33 Найти цитируемый пост)
httpResponse.sendRedirect(jsp);

Поэтому и jsp видит. Нужно forward делать, тогда адрес старый останется 

Автор: dobrolub 28.12.2011, 03:20
Код

   <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
    <load-on-startup>3</load-on-startup>
    </servlet>


    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>


Автор: COVD 28.12.2011, 05:24
Просветите (кто спрашивал или кто отвечал) - зачем? Интересно же. 

Автор: 4epT 28.12.2011, 11:11
Цитата(Stolzen @ 28.12.2011,  02:35)
Нужно forward делать, тогда адрес старый останется

Если делаю forward, то постоянно кидает на страницу с ошибкой ..

Автор: Stolzen 28.12.2011, 11:14
Цитата(4epT @  28.12.2011,  12:11 Найти цитируемый пост)
Если делаю forward, то постоянно кидает на страницу с ошибкой .. 

http://www.coderanch.com/t/537040/JSP/java/forward-filter

Добавлено через 3 минуты и 49 секунд
И вот - http://docs.oracle.com/cd/B31017_01/web.1013/b28959/filters.htm
Тут тоже описывается, как нужно делать

Автор: Samotnik 28.12.2011, 11:20
Цитата(COVD @  28.12.2011,  05:24 Найти цитируемый пост)
Просветите (кто спрашивал или кто отвечал) - зачем? Интересно же.  

++1 тоже интересно

Автор: 4epT 28.12.2011, 11:28
Ну мне это нужно для того что бы пользователя не пугали эти - jsp =)

А по делу ....

что дает данный сервлет ?

Цитата

   <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
    <load-on-startup>3</load-on-startup>
    </servlet>
    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>


Добавил его и ничго не поменялось

Автор: COVD 28.12.2011, 18:18
Я создал простой веб проект с index.jsp и newjsp.jsp. Для newjsp.jsp в web.xml прописал маппинг и эта страница теперь доступна как newjsp.html. Вы этого хотели?

Код

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <servlet>
        <servlet-name>newjsp</servlet-name>
        <jsp-file>/newjsp.jsp</jsp-file>
    </servlet>
    <servlet-mapping>
        <servlet-name>newjsp</servlet-name>
        <url-pattern>/newjsp.html</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>


Автор: 4epT 28.12.2011, 18:32
Да, именно так и хотел) Попробую сделать так как Вы написали.

Но вообще думал что можно сделать это одной строкой, а так прийдется каждую jsp мапить отдельно  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)