目前,我的应用程序使用SpringMVC进行所有控制器映射。我正在尝试实现一个tinyMCE拼写检查,它包括一个Servlet,我不确定如何在不修改该文件本身的情况下正确集成该Servlet。我想避免修改,这样如果我们以后有新版本,我们就可以了。
Servlet看起来像...
public abstract class TinyMCESpellCheckerServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(TinyMCESpellCheckerServlet.class.getName());
private static final String MAX_SUGGESTIONS_COUNT_PARAM = "maxSuggestionsCount";
private static final String PRELOADED_LANGUAGES_PARAM = "preloadedLanguages";
private static final String DEFAULT_LANGUAGE = "en";
private static final String GET_METHOD_RESPONSE_ERROR = "This servlet expects a JSON encoded body, POSTed to this URL";
private static String DEFAULT_PRELOADED_LANGUAGES = "en-us";
private enum methods {
checkWords, getSuggestions
}
private int maxSuggestionsCount = 25;
@Override
public void init() throws ServletException {
super.init();
preloadSpellcheckers();
readMaxSuggestionsCount();
}
private void preloadSpellcheckers() throws ServletException {
String preloaded = getServletConfig().getInitParameter(PRELOADED_LANGUAGES_PARAM);
if (preloaded == null || preloaded.trim().length() == 0) {
preloaded = DEFAULT_PRELOADED_LANGUAGES;
}
String[] preloadedLanguages = preloaded.split(";");
for (String preloadedLanguage : preloadedLanguages) {
try {
preloadLanguageChecker(preloadedLanguage);
} catch (SpellCheckException e) {
//wrong servlet configuration
throw new ServletException(e);
}
}
}
protected abstract void preloadLanguageChecker(String preloadedLanguage) throws SpellCheckException;
/**
* This method look for the already created SpellChecker object in the cache, if it is not present in the cache then
* it try to load it and put newly created object in the cache. SpellChecker loading is quite expensive operation
* to do it for every spell-checking request, so in-memory-caching here is almost a "MUST to have"
*
* @param lang the language code like "en" or "en-us"
* @return instance of SpellChecker for particular implementation
* @throws SpellCheckException if method failed to load the SpellChecker for lang (it happens if there is no
* dictionaries for that language was found in the classpath
*/
protected abstract Object getChecker(String lang) throws SpellCheckException;
private void readMaxSuggestionsCount() throws ServletException {
String suggestionsCountParam = getServletConfig().getInitParameter(MAX_SUGGESTIONS_COUNT_PARAM);
if (suggestionsCountParam != null && suggestionsCountParam.trim().length() > 0) {
try {
maxSuggestionsCount = Integer.parseInt(suggestionsCountParam.trim());
} catch (NumberFormatException ex) {
//wrong servlet configuration, possibly a typo
throw new ServletException(ex);
}
}
}
/**
* @see javax.servlet.Servlet#destroy()
*/
public void destroy() {
super.destroy();
//remove unused objects from memory
clearSpellcheckerCache();
}
protected abstract void clearSpellcheckerCache();
/**
* GET method is not supported
* @see HttpServlet#doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setResponeHeaders(response);
PrintWriter pw = response.getWriter();
pw.println(GET_METHOD_RESPONSE_ERROR);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
setResponeHeaders(response);
try {
JSONObject jsonInput = readRequest(request);
String methodName = jsonInput.optString("method");
if (methodName == null || methodName.trim().equals("")) {
throw new SpellCheckException("Wrong spellchecker-method-name:" + methodName);
}
JSONObject jsonOutput = new JSONObject("{'id':null,'result':[],'error':null}");
switch (methods.valueOf(methodName.trim())) {
case checkWords:
jsonOutput.put("result", checkWords(jsonInput.optJSONArray("params")));
break;
case getSuggestions:
jsonOutput.put("result", getSuggestions(jsonInput.optJSONArray("params")));
break;
default:
throw new SpellCheckException("Unimplemented spellchecker method {" + methodName + "}");
}
PrintWriter pw = response.getWriter();
pw.println(jsonOutput.toString());
} catch (SpellCheckException se) {
logger.log(Level.WARNING, se.getMessage(), se);
returnError(response, se.getMessage());
} catch (Exception e) {
logger.log(Level.WARNING, e.getMessage(), e);
returnError(response, e.getMessage());
}
response.getWriter().flush();
}
.....
看看ServletWrappingController
(javadoc)
Spring控制器实现,它封装了它内部管理的servlet实例。这种封装的servlet在该控制器之外是未知的;这里介绍了其整个生命周期(与ServletForwardingController不同)。
通过Spring的调度基础设施调用现有servlet非常有用,例如将Spring HandlerInterceptors应用于其请求。
在Spring上下文中配置其中一个,使用TinyMCE servlet类名进行配置,并使用SimpleRhlHandlerMapping进行映射。
ServletForwardingController
也很有用,但略有不同。
我正在通过在线示例学习使用FreeMarker的SpringMVC。我遇到了这个错误,但是我不知道我的getFreemarkerConfig()方法有什么问题,一整天我都在试图修复它,但是没有成功。
我的样本代码在这里 尝试运行junit测试时,收到以下错误消息。 JAVAlang.IllegalStateException:未能加载ApplicationContext 原因:org。springframework。豆。工厂BeanCreationException:创建名为“nameDao”的bean时出错:调用init方法失败;嵌套的异常是java。lang.IllegalArgument
问题内容: 有人知道将soapUI测试添加到我的CI版本的好方法吗? 问题答案: soapUI通过Maven或Ant提供测试自动化。在这里描述了Maven集成。 我在一个月前尝试过,但是在eviware存储库中遇到了一些奇怪的问题…因此,我现在通过Ant运行测试。您要做的是在soapUI bin目录中调用(或)脚本。您可以在此处找到可用的参数。 您必须在Hudson构建服务器上安装soapUI。然
问题内容: 我正在寻找有关symfony2中有关ajax的简单教程/示例,供初学者使用? 我有这些例子: city.php:http://pastebin.com/Qm8LS5kh ajax_req.js:http://pastebin.com/UqJMad24 index.html:http://pastebin.com/H1err4Yh 如何将它们放入Symfony2应用程序中? 问题答案:
当我在插件和“测试连接”中配置SonarQube服务器时,我正在尝试使用Intellij运行Solar Lint 我一直收到以下错误消息: 以下插件不符合要求的最低版本,请升级:java(安装:3.7,最低:3.8) 我不完全明白这意味着什么,我真的很感激在这方面的任何帮助。 P、 我无法升级sonar服务器上的Java插件,如果这是这个问题的唯一解决方案,因为我无法访问服务器管理功能。
问题内容: 我是Angular和Flot的新手,但对Jquery和Javascript经验丰富。我对如何将Flot图表绑定到Angular数据模型感到有些困惑,因为Flot是一个JQuery插件。我到处搜寻,但找不到范例。 我也很乐意使用highcharts,google-charts或任何其他图表解决方案。 问题答案: 由于制图涉及大量的DOM操作,因此使用指令是可行的。 数据可以保存在控制器中