问题描述
|
当前我有一个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>
我会重复我的问题,
我应该在struts.xml中添加什么以向CsmServlet类发出请求
我是否需要对web.inf进行任何更改?
我的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;
}
解决方法
当Struts实现MVC体系结构时,理想情况下,您不希望让servlet来控制部分。您可能希望将逻辑从servlet复制到Struts操作。
通常,您将有两个选择:
您的代码中没有servlet(如
控制器),让支柱
处理控制。复制
servlet的业务逻辑(如果
任何)插入支柱的动作。
如果您不希望进行较大的更改,可以将来自Strut的操作的请求转发到已经创建的servlet。
希望这可以帮助。
, Struts有一个前端控制器servlet,它接受所有请求并将它们传递给执行工作的Action类。
我认为您的servlet已经失业。
听起来它应该是一个Action类,当客户要求时,它由前端控制器调用。