【发布时间】:2014-03-03 08:58:36
【问题描述】:
我试图不在我的 Servlet 中注入 EJB,目前我将它直接注入到我的 Servlet 中并且它工作正常,但我想将控制权传递给将注入 EJB 的控制器类,并且没有控制器方法或构造函数,它接受 Bean 的引用变量并使用它。我所做的一切都在 JSP 中,我尝试在我的控制器上使用 @ManagedBean 注释,但没有任何效果。我只使用 JSP 而不是 JSF,因为我不熟悉它们。我正在尝试做的事情是可以实现的吗?除了传递 bean 的引用之外,还有其他选择吗?任何光线都受到高度赞赏。谢谢你。目前我的 Servlet 中有以下内容。
package com.ejb.web;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
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 com.ejb.customer.domain.Customer;
import com.ejb.customer.service.CustomerLocal;
import com.ejb.customer.util.DateUtil;
/**
* Servlet implementation class Servlet
*/
@WebServlet("/customer")
public class Dispatcher extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
CustomerLocal customerLocal;
/**
* @see HttpServlet#HttpServlet()
*/
public Dispatcher() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String surname = request.getParameter("surname");
String dateOfBirth = request.getParameter("dateOfBirth");
Customer customer = new Customer();
customer.setName(name);
customer.setSurname(surname);
customer.setDateOfBirth(DateUtil.convertToDate(dateOfBirth));
System.out.println("Starting .....Adding");
System.out.println(customerLocal);
customerLocal.addCustomer(customer);
System.out.println("Done .....Adding");
request.setAttribute("customers",customerLocal.getCustomers());
RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}
}
而我想要达到的目标就是这些。
package com.ejb.web;
import java.io.IOException;
import javax.ejb.EJB;
import javax.servlet.RequestDispatcher;
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 com.ejb.customer.domain.Customer;
import com.ejb.customer.service.CustomerLocal;
import com.ejb.customer.util.DateUtil;
/**
* Servlet implementation class Servlet
*/
@WebServlet("/customer")
public class Dispatcher extends HttpServlet {
private static final long serialVersionUID = 1L;
@Inject
Controller controller;
/**
* @see HttpServlet#HttpServlet()
*/
public Dispatcher() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String surname = request.getParameter("surname");
String dateOfBirth = request.getParameter("dateOfBirth");
Customer customer = new Customer();
customer.setName(name);
customer.setSurname(surname);
customer.setDateOfBirth(DateUtil.convertToDate(dateOfBirth));
System.out.println("Starting .....Adding");
System.out.println(customerLocal);
ccontroller.addCustomer(customer);
System.out.println("Done .....Adding");
request.setAttribute("customers",controller.getCustomers());
RequestDispatcher rd = request.getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}
}
控制器类执行以下操作。
package com.ejb.customer.util;
import java.util.List;
import javax.annotation.ManagedBean;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import com.ejb.customer.domain.Customer;
import com.ejb.customer.service.CustomerLocal;
@ManagedBean
@SessionScoped
public class Controller {
@EJB
CustomerLocal customerLocal;
public void addCustomer(Customer customer) {
customerLocal.addCustomer(customer);
}
public List getCustomers() {
return customerLocal.getCustomers();
}
}
抱歉缩进不好
【问题讨论】:
-
你有什么例外吗?您是否尝试过使用 CDI bean 而不是 ManagedBean?
-
嗨 Jakub Hr,谢谢你的回复,是的,我收到一个 NPE 错误,表明控制器和 bean 没有被实例化,我没有尝试使用 CDI,我会给出一个试试
-
这可能会更好,因为如果您不使用支持它的框架(最值得注意的是:JSF),@ManagedBean 不会做太多事情。
-
感谢 Gimby,我不知道我必须使用框架来支持 @ManagedBean,一旦我开始做 JSF,我就会这样做,目前我想用 JSF 做所有事情,只是 JSP仅限。
标签: java jakarta-ee servlets ejb ejb-3.0