Java 我如何将一个对象(定义到servlet中)放入会话以将其用于JSP页面?
这是我第一次从事J2EE项目,我遇到以下问题: 我有以下servlet实现了HttpServlet接口Java 我如何将一个对象(定义到servlet中)放入会话以将其用于JSP页面?,java,jsp,session,jakarta-ee,servlets,Java,Jsp,Session,Jakarta Ee,Servlets,这是我第一次从事J2EE项目,我遇到以下问题: 我有以下servlet实现了HttpServlet接口 public class Salwf extends HttpServlet { private String msg = StringUtils.EMPTY; public void init(ServletConfig config) throws ServletException { super.init(config); Stand
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;
}
}
现在我必须把它放到会话中,这样我就可以在JSP视图中使用它
我怎么做
HttpSession session = req.getSession();
session.setAttribute("salDettaglio", salDettaglio);
这将saldetaglio
放在会话中,您可以使用属性标识符saldetaglio
访问它。请记住,它将它存储为一个普通的对象
,因此如果您使用的是sciplets,您必须在JSP中强制转换
也看到
这将saldetaglio
放在会话中,您可以使用属性标识符saldetaglio
访问它。请记住,它将它存储为一个普通的对象
,因此如果您使用的是sciplets,您必须在JSP中强制转换
另请参见创建一个会话对象并将数组放入该会话对象中,然后使用sendRedirect()您可以通过它发送会话 创建一个会话对象并将数组放入该会话对象中,然后使用sendRedirect()可以通过它转发会话 请注意会话的getAttribute/setAttribute方法是同步的,但存储它们是您的责任。这意味着如果您更改存储对象中的可变字段,而该字段不能保证被其他线程看到。由于servlet由线程池中的不同线程调用,因此这可能是一个问题。要避免这种情况,请使用不可变对象或使对象线程安全。请注意,会话的getAttribute/setAttribute方法是同步的,但与它们一起存储的内容是您的责任。这意味着如果您更改存储对象中的可变字段,而该字段不能保证被其他线程看到。由于servlet由线程池中的不同线程调用,因此这可能是一个问题。要避免这种情况,请使用不可变对象或使对象线程安全。是否确实要将其放入会话而不仅仅是请求?是否确实要将其放入会话而不仅仅是请求?
HttpSession session = req.getSession();
session.setAttribute("salDettaglio", salDettaglio);