从普通的java迁移到struts2

时间:2011-06-13 09:49:02

标签: java servlets struts2

目前我有一个servlet CsmServlet.java,它被客户端调用,这里是web.xml部分

<servlet>
    <display-name>upload</display-name>
    <servlet-name>upload</servlet-name>
    <servlet-class>com.abc.csm.web.CsmServlet</servlet-class>
</servlet>

这是完美的。现在我必须使用struts 2并重新考虑我的所有代码,以便我在struts.xml中使用什么来调用CsmServlet类。

这是我的struts.xml,现在我正在重定向到另一个页面

<struts>
<package name="default" extends="struts-default" namespace="/">
    <action name="showResult">
        <result>/csminfo.jsp</result>
    </action>

</package>
</struts>

我会重复我的问题,

  1. 我应该向struts.xml添加什么来向CsmServlet类发送请求
  2. 我的web.inf需要更改吗?
  3. 我的 Servlet 内容

     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
     throws ServletException, IOException {
    
    PrintWriter out = resp.getWriter();
    Map<String, String> requestParamter=getParamMap(req.getParameterMap());
    RequestTransformer transformer = new RequestTransformer(req);
    
    //(map and operation type) goes to CSMData
    CSMData data = transformer.transform(requestParamter);
    
    RequestHandler handler = new RequestHandler(req);
    String result = handler.handle(data);
    
    log.info(result);
    out.println(result);
    
    }
    private Map<String,String> getParamMap(Map<String,String[]> params)
    {
    Map<String,String> paramsMap = new HashMap<String, String>();
    for(Map.Entry<String,String[]> entry : params.entrySet())
    {
    paramsMap.put(entry.getKey(),entry.getValue()[0]);
    }
    return paramsMap;
    
    }
    

2 个答案:

答案 0 :(得分:2)

由于Struts实现了MVC架构,理想情况下,您不希望让servlet执行控制部分。您可能希望将servlet中的逻辑复制到Struts操作。 通常,您有两种选择:

  1. 代码中没有servlet(如 控制器)并让struts 处理控制。复制 来自servlet的业务逻辑(如果 任何)进入struts的行动。
  2. 如果您不想进行更大的更改,可以将Strut的操作请求转发给已创建的servlet。
  3. 希望这有帮助。

答案 1 :(得分:1)

Struts有一个前端控制器servlet,它接受所有请求并将它们传递给完成工作的Action类。

我认为你的servlet失业了。

听起来它应该是前端控制器在客户要求时调用的Action类。