Как я могу поместить объект (определенный в сервлет) в сеанс, чтобы использовать его на странице JSP?

1

это мой первый раз, когда я работаю над проектом J2EE, и у меня есть следующая проблема:

У меня есть следующий сервлет, который реализует интерфейс HttpServlet.

public class Salwf extends HttpServlet {

    private String msg = StringUtils.EMPTY;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);

        StandardConfigurationFactory standardConfigurationFactory = new StandardConfigurationFactory();

        try {
            standardConfigurationFactory.init();
        } catch (ConfigurationException e) {
            throw new ServletException(e);
        }

        ConfigurationFactory.setInstance(standardConfigurationFactory);
    }

    public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        LoggerMDC.setup(req, res);
        Logger logger = (Logger) Logger.getStdLogger(Monitoraggio.class); // do not declare 'logger' as static field in order to work with MDC

        String service = req.getParameter("serv");

        char serviceId = Utility.getServizio(req.getParameter("serv"));

        // The collection that have to be shown in a table inside the JSP view:
        SalDettaglio[] salDettaglio = this.getSalDettaglioList();

        gotoPage(ConfigurationFactory.getPropertiesPages().getProperty("pagina_salwf"), req, res);

        //String paginaDaLanciare = lanciaServizio(serviceId, req, res);
    }

    /*
    private String lanciaServizio(char num_servizio, HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        Logger logger = (Logger) Logger.getStdLogger(Monitoraggio.class); // do not declare 'logger' as static field in order to work with MDC

        HttpSession session;

    }
    */

    private void gotoPage(String address, HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        Logger logger = (Logger) Logger.getStdLogger(Monitoraggio.class); // do not declare 'logger' as static field in order to work with MDC
        logger.debug("gotoPage() | address: " + address);

        ServletContext ctx = getServletConfig().getServletContext();
        RequestDispatcher dispatcher = ctx.getRequestDispatcher(address);
        dispatcher.forward(req, res);
    }

    private SalDettaglio[] getSalDettaglioList(){

        SalDettaglio[] salDettaglioArrayResult;

        List<SalDettaglio> salDettaglioList = new ArrayList<SalDettaglio>();

        List<RM> rmList = new ArrayList<RM>();

        RM rm1 = new RM("codiceRM1", "Andrea", "01/01/1014", "acqRiserva1", "consegnaFinale1", "descrizioneRM1", BigDecimal.valueOf(1000));
        RM rm2 = new RM("codiceRM2", "Andrea", "01/01/1014", "acqRiserva2", "consegnaFinale2", "descrizioneRM2", BigDecimal.valueOf(1000));

        rmList.add(rm1);
        rmList.add(rm2);

        RM[] rmArray =  (RM[]) rmList.toArray();

        SalDettaglio salDettaglio1 = new SalDettaglio("codice1", "stato1", "01/01/2014", "01/06/2014", "Andrea",
                "Andrea", "Andrea", BigDecimal.valueOf(1000), "fornitore1",
                "rmConRiserva1", "errore1", null, rmArray);

        SalDettaglio salDettaglio2 = new SalDettaglio("codice2", "stato2", "01/01/2014", "01/06/2014", "Andrea",
                "Andrea", "Andrea", BigDecimal.valueOf(1000), "fornitore2",
                "rmConRiserva2", "errore2", null, rmArray);

        salDettaglioList.add(salDettaglio1);
        salDettaglioList.add(salDettaglio2);

        salDettaglioArrayResult = (SalDettaglio[]) salDettaglioList.toArray();

        return salDettaglioArrayResult;

    }

}

Как вы можете видеть в методе service(), у меня есть это определение массива:

SalDettaglio[] salDettaglio

Теперь мне нужно включить его в сессию, чтобы я мог использовать его в представлении JSP.

Как мне это сделать?

  • 0
    Вы уверены, что хотите поместить это в сессию, а не только в запрос?
Теги:
jsp
servlets
session
java-ee

3 ответа

2
Лучший ответ
HttpSession session = req.getSession();
session.setAttribute("salDettaglio", salDettaglio);

Это ставит salDettaglio в сеанс, и вы можете получить его с идентификатором атрибута salDettaglio помните, что он хранит его как простой Object поэтому вам нужно будет включить в JSP, если вы используете sciplets.

Также см. Этот вопрос

2

Помните, что сеанс getAttribute/setAttribute-методы синхронизированы, но то, что вы храните с ними, является вашей ответственностью. Это означает, что если вы измените изменяемое поле в сохраненном объекте, который не гарантированно будет замечен другим потоком. Поскольку сервлеты вызываются разными потоками из пула потоков, это может быть проблемой. Чтобы избежать этого, используйте либо неизменяемые объекты, либо сделайте ваши объекты потокобезопасными.

1

создайте один объект сеанса и поместите свой массив в этот объект сеанса и используя sendRedirect(), вы можете выполнить свой сеанс через него. !!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню