Вопрос по java – Использование Spring MVC 3.1+ WebApplicationInitializer для программной настройки конфигурации сеанса и страницы ошибок

18

WebApplicationInitializer предоставляет возможность программно представлять хорошую часть стандартного файла web.xml - сервлеты, фильтры, слушатели.

Однако я не смог найти хороший способ представления этих элементов (тайм-аут сеанса, страница ошибки) с помощью WebApplicationInitializer, нужно ли по-прежнему поддерживать файл web.xml для этих элементов?

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/uncaughtException</location>
</error-page>

<error-page>
    <error-code>404</error-code>
    <location>/resourceNotFound</location>
</error-page>

Ваш Ответ

5   ответов
5

Я уверен, что это может быть сделано без пружинной загрузки, а также путем расширенияSpringServletContainerInitializer, Кажется, именно для этого он и предназначен.

Servlet 3.0 ServletContainerInitializer designed to support code-based configuration of the servlet container using Spring's WebApplicationInitializer SPI as opposed to (or possibly in combination with) the traditional web.xml-based approach.

Пример кода (с использованием SpringBootServletInitializer)

public class MyServletInitializer extends SpringBootServletInitializer {

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory containerFactory = new TomcatEmbeddedServletContainerFactory(8080);

        // configure error pages
        containerFactory.getErrorPages().add(new ErrorPage(HttpStatus.UNAUTHORIZED, "/errors/401"));

        // configure session timeout
        containerFactory.setSessionTimeout(20);

        return containerFactory;
    }
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededserver.session-timeout=20Error: User Rate Limit Exceededapplication.properties
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededsupportError: User Rate Limit Exceeded
3

WebApplicationInitializer не предоставляет его напрямую. Но есть способ установить sessointimeout с настройкой Java.

Вы должны создатьHttpSessionListner первый :

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        //here session will be invalidated by container within 30 mins 
        //if there isn't any activity by user
        se.getSession().setMaxInactiveInterval(1800);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session destroyed");
    }
}

После этого просто зарегистрируйте этот слушатель в своем контексте сервлета, который будет доступен вWebApplicationInitializer по методуonStartup

servletContext.addListener(SessionListener.class);
1

<session-config>
    <session-timeout>3</session-timeout>
</session-config>-->
<listener>
    <listenerclass>

  </listener-class>
</listener>

Класс слушателя

public class ProductBidRollBackListener implements HttpSessionListener {

 @Override
 public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    //To change body of implemented methods use File | Settings | File Templates.

 }

 @Override
 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    HttpSession session=httpSessionEvent.getSession();
    WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
    ProductService productService=(ProductService) context.getBean("productServiceImpl");
    Cart cart=(Cart)session.getAttribute("cart");
    if (cart!=null && cart.getCartItems()!=null && cart.getCartItems().size()>0){
        for (int i=0; i<cart.getCartItems().size();i++){
            CartItem cartItem=cart.getCartItems().get(i);
            if (cartItem.getProduct()!=null){
                Product product = productService.getProductById(cartItem.getProduct().getId(),"");
                int stock=product.getStock();
                product.setStock(stock+cartItem.getQuantity());
                product = productService.updateProduct(product);
            }
        }
    }
 }
}
1

вы можете определить страницу ошибки 404, используя исключение и метод контроллера, который является @ExceptionHandler:

Enable throwing NoHandlerFoundException in DispatcherServlet. Use @ControllerAdvice and @ExceptionHandler in controller.

Класс WebAppInitializer:

public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
    DispatcherServlet dispatcherServlet = new DispatcherServlet(getContext());
    dispatcherServlet.setThrowExceptionIfNoHandlerFound(true);
    ServletRegistration.Dynamic registration = container.addServlet("dispatcher", dispatcherServlet);
    registration.setLoadOnStartup(1);
    registration.addMapping("/");
}

private AnnotationConfigWebApplicationContext getContext() {
    AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
    context.setConfigLocation("com.my.config");
    context.scan("com.my.controllers");
    return context;
}
}

Класс контроллера:

@Controller
@ControllerAdvice
public class MainController {

    @RequestMapping(value = "/")
    public String whenStart() {
        return "index";
    }


    @ExceptionHandler(NoHandlerFoundException.class)
    @ResponseStatus(value = HttpStatus.NOT_FOUND)
    public String requestHandlingNoHandlerFound(HttpServletRequest req, NoHandlerFoundException ex) {
        return "error404";
    }
}

& Quot; error404, & Quot; это файл JSP

13

что для некоторых конфигураций, таких как sessionTimeOut и страницы ошибок, вам все еще нужен web.xml.

Посмотри на этоСсылка на сайт

Надеюсь, это поможет вам. Приветствия.

Error: User Rate Limit Exceeded Biju Kunjummen
Error: User Rate Limit Exceeded@ExceptionHandlerError: User Rate Limit Exceeded@ControllerAdviceError: User Rate Limit Exceedederror-pageError: User Rate Limit Exceededsession-configError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededweb.xml?
Error: User Rate Limit Exceeded@ExceptionHandlerError: User Rate Limit Exceeded

Похожие вопросы