Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
Я хочу в своем проекте реализовать то, если допустим будет неправильно введен URl то должна выскочить JSP страница со словами- "ошибка 404 страница не найдена"

Я написал код но он неправильный. Надо чтобы просто выскакивала страница со словами об ошибке, как можно исправить код.
Web XML
<error-page>
    <location>/errors</location>
</error-page>


ErrorController
@Controller
public class ErrorController {
 
    @RequestMapping(value = "errors", method = RequestMethod.GET)
    public ModelAndView renderErrorPage(HttpServletRequest httpRequest) {
         
        ModelAndView errorPage = new ModelAndView("errorPage");
        String errorMsg = "";
        int httpErrorCode = getErrorCode(httpRequest);
 
        switch (httpErrorCode) {
            case 400: {
                errorMsg = "Http Error Code: 400. Bad Request";
                break;
            }
            case 401: {
                errorMsg = "Http Error Code: 401. Unauthorized";
                break;
            }
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                break;
            }
            case 500: {
                errorMsg = "Http Error Code: 500. Internal Server Error";
                break;
            }
        }
        errorPage.addObject("errorMsg", errorMsg);
        return errorPage;
    }
     
    private int getErrorCode(HttpServletRequest httpRequest) {
        return (Integer) httpRequest
          .getAttribute("javax.servlet.error.status_code");

    }
@RequestMapping(value = "500Error", method = RequestMethod.GET)
public void throwRuntimeException() {
    throw new NullPointerException("Throwing a null pointer exception");
}
}


JSP

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <h1>${errorMsg}</h1>
</body>
</html>



Как можно исправить код чтобы просто выскакивала вот такая страница

<%@ page contentType='text/html; charset=UTF-8' %>
<html>
    <head>
        <title>Страница не найдена</title>
    </head>
    <body>        
        
                    <p>
                        Запрашиваемая страница не найдена
                    </p>                
                   
        </table>           
    </body>
</html>
30 апр 19, 09:05    [21875195]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                return new ModelAndView("Имя_Вот_Такой_Страницы");
                break;
            }
30 апр 19, 09:10    [21875200]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
Можете посмотреть почему не работает, я написал так как вы написали

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package adil.java.schoolmaven.controller;

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ErrorController {
 
    @RequestMapping(value = "errors", method = RequestMethod.GET)
    public ModelAndView renderErrorPage(HttpServletRequest httpRequest) {
         
        ModelAndView errorPage = new ModelAndView("errorPage");
        String errorMsg = "";
        int httpErrorCode = getErrorCode(httpRequest);
 
        switch (httpErrorCode) {
            
               case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                return new ModelAndView("errorPage");
                break;
            }
           
        errorPage.addObject("errorMsg", errorMsg);
        return errorPage;
    }
     
    private int getErrorCode(HttpServletRequest httpRequest) {
        return (Integer) httpRequest
          .getAttribute("javax.servlet.error.status_code");
    }
    @RequestMapping(value = "500Error", method = RequestMethod.GET)
    public void throwRuntimeException() {
    throw new NullPointerException("Throwing a null pointer exception");
}
}


Web XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <error-page>
    <location>/errors</location>
</error-page>

</web-app>


JSP
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
    <title>Home</title>
</head>
<body>
    <p1>${errorMsg}</1>
</body>
</html>


К сообщению приложен файл. Размер - 23Kb
30 апр 19, 09:23    [21875211]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fallen2019
Web XML
<error-page>
    <location>/errors</location>
</error-page>
дай ссыоку, с какого учебника это писал.
30 апр 19, 09:52    [21875233]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
Petro123,

https://www.baeldung.com/custom-error-page-spring-mvc
30 апр 19, 11:28    [21875356]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
Petro123,
Я же все правильно написал?
package adil.java.schoolmaven.controller;

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ErrorController {
 
    @RequestMapping(value = "errors", method = RequestMethod.GET)
    public ModelAndView renderErrorPage(HttpServletRequest httpRequest) {
         
        ModelAndView errorPage = new ModelAndView("errorPage");
        String errorMsg = "";
        int httpErrorCode = getErrorCode(httpRequest);
 
        switch (httpErrorCode) {
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                return new ModelAndView("errorPage");
                
            }
        }
        errorPage.addObject("errorMsg", errorMsg);
        return errorPage;
    }
     
    private int getErrorCode(HttpServletRequest httpRequest) {
        return (Integer) httpRequest
          .getAttribute("javax.servlet.error.status_code");
    }
    @RequestMapping(value = "500Error", method = RequestMethod.GET)
    public void throwRuntimeException() {
    throw new NullPointerException("Throwing a null pointer exception");
}
}


Вот так надо чтобы отдельная JSP cтраница была с ошибкой

К сообщению приложен файл. Размер - 32Kb
30 апр 19, 11:31    [21875358]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fallen2019
Petro123,

https://www.baeldung.com/custom-error-page-spring-mvc
хмм. У спринга формат другой. Без спринга там в web.xml пишется test.jsp.
Я без спринга делал. Там пол часа работы. Можешь проверить.
30 апр 19, 11:58    [21875384]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
Ну если вы пишете так
        
ModelAndView errorPage = new ModelAndView("errorPage");
 ... 
        switch (httpErrorCode) {
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                return new ModelAndView("errorPage");
                
            }
        }


То можно сделать проще

...
return errorPage;
...

И потом - errorPage.jsp нужно положить в папку /views как и остальные страницы.
30 апр 19, 12:55    [21875460]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,
Я же все правильно запихал?
package adil.java.schoolmaven.controller;

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ErrorController {
 
    @RequestMapping(value = "errors", method = RequestMethod.GET)
    public ModelAndView renderErrorPage(HttpServletRequest httpRequest) {
         
        ModelAndView errorPage = new ModelAndView("errorPage");
        String errorMsg = "";
        int httpErrorCode = getErrorCode(httpRequest);
 
        switch (httpErrorCode) {
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                return new ModelAndView("errorPage");
                
            }
        }
        errorPage.addObject("errorMsg", errorMsg);
        return errorPage;
    }
     
    private int getErrorCode(HttpServletRequest httpRequest) {
        return (Integer) httpRequest
          .getAttribute("javax.servlet.error.status_code");
    }
    @RequestMapping(value = "500Error", method = RequestMethod.GET)
    public void throwRuntimeException() {
    throw new NullPointerException("Throwing a null pointer exception");
}
}


К сообщению приложен файл. Размер - 18Kb
30 апр 19, 13:15    [21875474]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fallen2019
Я же все правильно запихал?
ты не сиди на печи, а делай разными способами. Включай бряки, отладку, логи. Ломай программу пока ошибки не будет. Делай без спринга версию.
Работа у нас такая.
30 апр 19, 13:21    [21875485]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
fallen2019, да!
Похоже на правду.
Работает?

(там есть лишнее, но это потом можно вычистить)
30 апр 19, 13:22    [21875486]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,

выходит вот так(
надо чтобы просто JSP страница с надписью - 404 странице не сущесвует (или другая надпись которую сам захочешь написать)

К сообщению приложен файл. Размер - 15Kb
30 апр 19, 13:25    [21875491]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,

Можете посмотреть
30 апр 19, 13:57    [21875528]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
fallen2019,

если найду свой проект, где есть такая обработка, то пришлю код
30 апр 19, 14:15    [21875545]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,

Спасибо))
30 апр 19, 14:17    [21875549]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
Контроллер (Внимание! У меня error, а не errors)
@Controller
public class ErrorController {
    @RequestMapping(value="/error", produces="application/json")
    @ResponseBody
    public ModelAndView handle(HttpServletRequest request) {
        ModelAndView model = new ModelAndView();
        String code = request.getAttribute("javax.servlet.error.status_code").toString();
        model.addObject("code", code);
        switch(code){
            case "400":
                model.addObject("title", "Bad Request");
                model.addObject("mesage", "The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).");
               break;
            case "401":
                model.addObject("title", "Unauthorized");
                model.addObject("mesage", "Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource.");
                model.addObject("link", "https://tools.ietf.org/html/rfc7235");
               break;          
            case "403":
                model.addObject("title", "Forbidden");
                model.addObject("mesage", "The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource.");
                model.addObject("link", "https://en.wikipedia.org/wiki/HTTP_403");
               break;
            case "404":
                model.addObject("title", "Not Found");
                model.addObject("mesage", "The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.");
                model.addObject("link", "https://en.wikipedia.org/wiki/HTTP_404");
               break;
            case "500":
                model.addObject("title", "Internal Server Error");
                model.addObject("mesage", "A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.");
                break;
            default:
                model.addObject("title", "Error");
                model.addObject("mesage", request.getAttribute("javax.servlet.error.message").toString());
                break;
        }

        return model;
    }
}
30 апр 19, 14:27    [21875559]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
     <error-page>
            <location>/error</location>
     </error-page>
30 апр 19, 14:28    [21875561]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
error.jsp
<html>
    <head>
         <title>${code}:${title}</title>
    </head>
    <body>

    <div class="container">

         <div class="row">

            <div class="col-lg-12">
                <div class="jumbotron">
                    <h3><span class="">${code}:${title}</span></h3>
                    <p>${message}</p>
                    <c:if test="${link != null}">
                        <p><a href="${link}"> More details...</a></p>
                    </c:if>
                </div>
            </div>

        </div>

        <hr>

    </body>
</html>
30 апр 19, 14:31    [21875564]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,

Можете еще раз посмотреть правильно ли я все написал

JSP
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
    <head>
         <title>${code}:${title}</title>
    </head>
    <body>

    <div class="container">

         <div class="row">

            <div class="col-lg-12">
                <div class="jumbotron">
                    <h3><span class="">${code}:${title}</span></h3>
                    <p>${message}</p>
                    <c:if test="${link != null}">
                        <p><a href="${link}"> More details...</a></p>
                    </c:if>
                </div>
            </div>

        </div>

        <hr>

    </body>
</html>


ErrorController
package adil.java.schoolmaven.controller;

import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

public class ErrorController {
    @RequestMapping(value="/errors", produces="application/json")
    @ResponseBody
    public ModelAndView handle(HttpServletRequest request) {
        ModelAndView model = new ModelAndView();
        String code = request.getAttribute("javax.servlet.error.status_code").toString();
        model.addObject("code", code);
        switch(code){
            case "400":
                model.addObject("title", "Bad Request");
                model.addObject("mesage", "The server cannot or will not process the request due to an apparent client error (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing).");
               break;
            case "401":
                model.addObject("title", "Unauthorized");
                model.addObject("mesage", "Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the requested resource.");
                model.addObject("link", "https://tools.ietf.org/html/rfc7235");
               break;          
            case "403":
                model.addObject("title", "Forbidden");
                model.addObject("mesage", "The request was valid, but the server is refusing action. The user might not have the necessary permissions for a resource.");
                model.addObject("link", "https://en.wikipedia.org/wiki/HTTP_403");
               break;
            case "404":
                model.addObject("title", "Not Found");
                model.addObject("mesage", "The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.");
                model.addObject("link", "https://en.wikipedia.org/wiki/HTTP_404");
               break;
            case "500":
                model.addObject("title", "Internal Server Error");
                model.addObject("mesage", "A generic error message, given when an unexpected condition was encountered and no more specific message is suitable.");
                break;
            default:
                model.addObject("title", "Error");
                model.addObject("mesage", request.getAttribute("javax.servlet.error.message").toString());
                break;
        }

        return model;
    }
}


А вот картинка где мои файлы

К сообщению приложен файл. Размер - 14Kb
30 апр 19, 14:36    [21875568]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
fallen2019,

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  
  <error-page>
    <location>/views</location>
</error-page>

</web-app>
30 апр 19, 14:37    [21875570]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
Должно быть так

SQL2008
     <error-page>
            <location>/errors</location>
     </error-page>
30 апр 19, 14:43    [21875579]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,

Просто в папке Errors пусто, у меня в папке views есть errorPage.jsp
30 апр 19, 14:45    [21875583]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
fallen2019
SQL2008,

Просто в папке Errors пусто, у меня в папке views есть errorPage.jsp

errors это не папка!
Это маршрут обработчика контроллера.

@RequestMapping(value="/errors", produces="application/json")
30 апр 19, 14:47    [21875586]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 3945
fallen2019
SQL2008,

Просто в папке Errors пусто, у меня в папке views есть errorPage.jsp


Страница должна называться error.jsp


И еще у меня там ошибочка

Замените
ModelAndView model = new ModelAndView();

на
ModelAndView model = new ModelAndView("error");
30 апр 19, 14:49    [21875589]     Ответить | Цитировать Сообщить модератору
 Re: Почему не работает код (Spring MVC)  [new]
fallen2019
Member

Откуда:
Сообщений: 203
SQL2008,

у меня вот так выходит так же

К сообщению приложен файл. Размер - 15Kb
30 апр 19, 14:56    [21875601]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить