Преобразование сервлета в класс действий Struts2 - PullRequest
2 голосов
/ 23 сентября 2010

Я портирую динамический веб-проект на Struts2, и мне нужно преобразовать множество сервлетов в действия Struts2.Я хочу использовать интерфейсы ServletRequestAware, ServletResponseAware и SessionAware и сохранить большую часть кода без изменений.Пожалуйста, взгляните на класс BaseAction.java, который я нашел в GOOGLin '.Я хочу использовать это, чтобы я мог выполнять другие действия, просто расширяя BaseAction.

BaseAction.java

public abstract class BaseAction extends ActionSupport implements SessionAware, ServletRequestAware,ServletResponseAware, ServletContextAware{

 private static final long serialVersionUID = 1L;
  protected Map session;
     protected HttpServletRequest request;
     protected HttpServletResponse response;

     public String execute() throws Exception {
         return doExecute();
     }

     protected abstract String doExecute() throws Exception;

  public Map getSession() {
         return session;
     }

     public void setSession(Map sess) {
         this.session = sess;
     }

     public HttpServletRequest getServletRequest() {
         return request;
     }

     public void setServletRequest(HttpServletRequest req){
         this.request = req;
     }

     public HttpServletResponse getServletResponse() {
         return response;
     }

     public void setServletResponse(HttpServletResponse resp) {
         this.response = resp;
     }

}

Теперь предположим, что у меня естьсервлет, подобный следующему: Servlet.java

public class Servlet extends HttpServlet
{
 private static Logger log = Logger.getLogger(Servlet.class);

 public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException
 {
  HttpSession session=request.getSession();
 Bean bean= new Bean();
 bean.setName(request.getParameter("xxx"));
        session.setAttribute("bean");
        response.sendRedirect("login.jsp");
       }
}

Может ли кто-нибудь написать класс действия, расширяющий BaseAction, эквивалентный сервлету?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 сентября 2010

Поскольку вы используете Struts2, я рекомендую использовать все, что предлагает инфраструктура, вместо того, чтобы пытаться взломать существующий код сервлета.Функция http получения и установки параметров запроса и сеансов легко обрабатывается структурой struts2:

public class NewAction implements SessionAware {

  private Map theSession;
  private XXX xxx;

  public String execute() {
    Bean b = new Bean();
    b.setXXX(xxx);
    theSession.put(b);

    return "success";
  }

  public XXX getXXX() {
    return xxx;
  }

  public void setXXX(XXX xxx) {
    this.xxx = xxx;
  }

  public Map getSession() {
    return theSession;
  }

  public void setSession(Map session) {
    theSession = session;
  }
}

Ваш файл struts.xml должен содержать запись для действия:

<action name="NewAction" class="yourapp.NewAction">
  <result type="redirect">login.jsp</result>
</action>
0 голосов
/ 23 сентября 2010

Я надеюсь, что ниже образец поможет вам ..

public class YourAction extends BaseAction {

    private static final long serialVersionUID = -6113083300296539328L;

    private static final Logger logger = Logger.getLogger(YourAction .class);

    private Bean bean;

    public String get() throws ApplicationException {
    try {
        this.setBean(getService().fetchBeanById(
                getHttpRequest().getParameter(
                "xxxx")));
    } catch (Exception e) {
        logger.error(new String[] { " Exception listing Comment ",
                e.toString() });
        throw new ApplicationException(e);
    }
        return SUCCESS;
    }

    public Bean getBean() {
        return bean;
    }

    public void setBean(Bean bean) {
        this.bean= bean;
    }
}
...