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

Откуда:
Сообщений: 94
Я хочу сделать ошибку 404 чтобы если неправильный адрес напишу выдал ошибку что это страница не найдена

StudentController

package adil.java.schoolmaven.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import adil.java.schoolmaven.entity.Student;
import  adil.java.schoolmaven.service.StudentService;

@Controller
public class StudentController {
	// Constructor based Dependency Injection
	private StudentService studentService;

	public StudentController() {

	}

	@Autowired
	public StudentController(StudentService studentService) {
		this.studentService = studentService;
	}


	@RequestMapping(value = { "/", "/index" }, method = RequestMethod.GET)
	public ModelAndView hello(HttpServletResponse response) throws IOException {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("index");
		return mv;
	}

	// Get All Users
	@RequestMapping(value = "/allStudents", method = RequestMethod.POST)
	public ModelAndView displayAllUser() {
		System.out.println("User Page Requested : All Students");
		ModelAndView mv = new ModelAndView();
		List<Student> studentList = studentService.getAllStudents();
		mv.addObject("studentList", studentList);
		mv.setViewName("allStudents");
		return mv;
	}

	@RequestMapping(value = "/addStudent", method = RequestMethod.GET)
	public ModelAndView displayNewUserForm() {
		ModelAndView mv = new ModelAndView("addStudent");
		mv.addObject("headerMessage", "Add Student Details");
		mv.addObject("student", new Student());
		return mv;
	}

	@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
	public ModelAndView saveNewStudent(@ModelAttribute Student student, BindingResult result) {
		ModelAndView mv = new ModelAndView("redirect:/index");

		if (result.hasErrors()) {
			return new ModelAndView("error");
		}
		boolean isAdded = studentService.saveStudent(student);
		if (isAdded) {
			mv.addObject("message", "New student successfully added");
		} else {
			return new ModelAndView("error");
		}

		return mv;
	}

	@RequestMapping(value = "/editStudent/{id}", method = RequestMethod.GET)
	public ModelAndView displayEditUserForm(@PathVariable Long id) {
		ModelAndView mv = new ModelAndView("/editStudent");
		Student student = studentService.getStudentById(id);
		mv.addObject("headerMessage", "Редактирование студента");
		mv.addObject("student", student);
		return mv;
	}

	@RequestMapping(value = "/editStudent/{id}", method = RequestMethod.POST)
	public ModelAndView saveEditedUser(@ModelAttribute Student student, BindingResult result) {
		ModelAndView mv = new ModelAndView("redirect:/index");

		if (result.hasErrors()) {
			System.out.println(result.toString());
			return new ModelAndView("error");
		}
		boolean isSaved = studentService.saveStudent(student);
		if (!isSaved) {

			return new ModelAndView("error");
		}

		return mv;
	}

	@RequestMapping(value = "/deleteStudent/{id}", method = RequestMethod.GET)
	public ModelAndView deleteUserById(@PathVariable Long id) {
		boolean isDeleted = studentService.deleteStudentById(id);
		System.out.println("Удаление студента: " + isDeleted);
		ModelAndView mv = new ModelAndView("redirect:/index");
		return mv;

	}

}
22 апр 19, 08:59    [21868509]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019,

2.1+ https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-error-handling
до 2 https://docs.spring.io/spring-boot/docs/1.4.3.RELEASE/reference/html/boot-features-developing-web-applications.html#boot-features-error-handling
22 апр 19, 09:04    [21868511]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Спасибо) для spring mvc подойдет?
22 апр 19, 09:09    [21868516]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, конечно. У спринга очень вменяемая документация, советую искать и читать. Главное, чтобы версия документации совпадала с версией, которую испоьзуете вы ;)
22 апр 19, 09:12    [21868517]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

У меня там классы куда можно этот код вставить? Чтобы ошибку выдал
@ControllerAdvice(basePackageClasses = AcmeController.class)
public class AcmeControllerAdvice extends ResponseEntityExceptionHandler {

	@ExceptionHandler(YourException.class)
	@ResponseBody
	ResponseEntity<?> handleControllerException(HttpServletRequest request, Throwable ex) {
		HttpStatus status = getStatus(request);
		return new ResponseEntity<>(new CustomErrorType(status.value(), ex.getMessage()), status);
	}

	private HttpStatus getStatus(HttpServletRequest request) {
		Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
		if (statusCode == null) {
			return HttpStatus.INTERNAL_SERVER_ERROR;
		}
		return HttpStatus.valueOf(statusCode);
	}

}


К сообщению приложен файл. Размер - 26Kb
22 апр 19, 09:12    [21868518]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, а какое отношение это к 404 имеет? Этот advice будет работать везде
22 апр 19, 09:22    [21868526]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

с помощью Advice оно будет выводить ошибку 404 страница не найдена?
22 апр 19, 09:24    [21868528]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, я дал вам читать с общей главы, чтобы вы ознакомились с принципами, а не начали делать сразу. Если у вас так горит, то

Custom error pages найдите по ссылке на странице.
22 апр 19, 09:30    [21868532]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Я добавил Custum error pages но почему то не работает
package adil.java.schoolmaven.controller;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 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");
}
}



Error JSP
<%-- 
    Document   : errorPage
    Created on : 22.04.2019, 12:40:40
    Author     : Adil
--%>

<%@ 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>


К сообщению приложен файл. Размер - 25Kb
22 апр 19, 09:43    [21868540]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019,
в документации сказано:

Creating a custom error.jsp page does not override the default view for error handling. Custom error pages should be used instead.

То есть либо html , либо надо добавить маппинг на jsp.Проще сделать статическую страницу и не париться.
22 апр 19, 10:07    [21868557]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Можете помочь это реализовать пожалуйста
22 апр 19, 11:17    [21868644]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38540
fallen2019,
Делайте по шагам и без спринга, если не можете экстерном.
22 апр 19, 11:55    [21868697]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, добавьте в папк web-inf подпапку - public
в эту папку добавьте подпапку - error
в папку error добавьте 404.html
перезапустите проект, если ничего лишнего не было настроено, должно из коробки отработать
22 апр 19, 11:56    [21868702]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,
Добавил по новому ErrorController и я добавил картинку у меня ошибка
/*
 
package adil.java.schoolmaven.controller;

import java.io.IOException;
import java.io.PrintWriter;
import javassist.NotFoundException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
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 extends AbstractErrorController {

    private static final String ERROR_PATH = "/error";

    @Autowired
    public ErrorController(ErrorAttributes errorAttributes) {
        super(errorAttributes);
    }

    @RequestMapping(value = ERROR_PATH, method = RequestMethod.GET)
    public ResponseEntity<?> handleErrors(HttpServletRequest request) {
        HttpStatus status = getStatus(request);

        if (status.equals(HttpStatus.NOT_FOUND))
            throw new NotFoundException();

        return ResponseEntity.status(status).body(getErrorAttributes(request, false));
    }

    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }

}


Добавил ConrollerAdvice

package adil.java.schoolmaven.controller;


import javassist.NotFoundException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalControllerAdvice {

    @ExceptionHandler(NotFoundException.class)
    public String notFound() {
        return "error/404";
    }

}


К сообщению приложен файл. Размер - 91Kb
22 апр 19, 12:57    [21868783]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, удалите контроллер ;)
22 апр 19, 12:59    [21868787]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Какой?)
22 апр 19, 13:02    [21868792]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Там не закомментровано на самом деле, случайно поставил символ коммента на код
22 апр 19, 13:03    [21868794]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019
Озверин,

Какой?)


GlobalControllerAdvice
ErrorController
22 апр 19, 13:03    [21868795]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Я их специально добавил чтобы ошибка 404 вышла, больше нигде нету кода чтобы он выводил я по новому сделал
22 апр 19, 13:07    [21868800]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, нужен всего один файл. Удалите или закоменнтите.
22 апр 19, 13:09    [21868804]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

Откуда:
Сообщений: 94
Озверин,

Получается ErrorController и GlobalControllerAdvice удалить? или одну из них?
ПРосто у меня кроме них больше нигде не написан код чтобы выдавал ошибку 404
22 апр 19, 13:12    [21868809]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019, этот код не нужен. Спринг утверждает, что чтобы переопределить страницу, хватит просто разместить файл по пути, которому я сказал. Если вам надо добавить какие-то кастомные поля, то стоит переопределить резолвер.
22 апр 19, 13:19    [21868818]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38540
fallen2019
Я хочу сделать ошибку 404 чтобы если неправильный адрес напишу выдал ошибку что это страница не найдена
что сейчас выдается?
И без вашей странички должна выходить 404 ошибка.
22 апр 19, 13:20    [21868820]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
fallen2019
Member

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

Я все правильно же сделал?


У меня так же выдает томкат ошибку
HTTP Status 404 – Не найдено
Type Status Report

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.


К сообщению приложен файл. Размер - 56Kb
22 апр 19, 13:24    [21868826]     Ответить | Цитировать Сообщить модератору
 Re: Как можно сделать ошибку 404 страницу не найдена  [new]
Озверин
Member

Откуда: Ростов-на-Дону
Сообщений: 5081
fallen2019,

еще раз говорю, надо поместить файл 404.html
22 апр 19, 13:27    [21868835]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Java Ответить