Существует программа (используемая любым используемым сервером приложений), которая компилирует файл .jsp в файл .java. Например, версия Sun / Oracle JSPC .
Если у вас есть файл .java, который будет создан преобразованием .jsp (вы можете даже захотеть использовать его как часть процесса сборки - предварительной компиляции jsp для повышения производительности при первом попадании), вы можете запустить тесты для него высмеивая запрос и проверяя ответ - это то, что вы ожидаете.
(редактировать с примером :)
Ключевым методом для этого является _jspService(HttpServletRequest, HttpServletResponse)
метод.
Тривиальный привет мир JSP:
<html>
<head>
<title>Hello world</title>
</head>
<body>
<h1>Hello world</h1>
Today is: <%= new java.util.Date().toString() %>
</body>
</html>
(test.jsp находится в каталоге с именем «webapp», а также в каталоге «out»). При компиляции с командой jspc -v -d out -compile -uriroot webapp/ test.jsp
помещает в каталог «out» файл с именем test_jsp.java
. Этот файл имеет внутри него (наряду с некоторыми другими настройками конфигурации):
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
try {
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("<html>\n\t<head>\n\t\t<title>Hello world</title>\n\t</head>\n\t<body>\n\t
\t<h1>Hello world</h1>\n\t\tToday is: ");
out.print( new java.util.Date().toString() );
out.write("\n\t</body>\n</html>\n\n");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try { out.clearBuffer(); } catch (java.io.IOException e) {}
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
На данный момент, это проверка, чтобы убедиться, что JspWriter вызывается с записью или печатью, и содержимое вызова соответствует ожидаемому.
Все это говорит о том, что в идеальном мире в jsp не должно быть никакой логики - такая логика была бы либо в контроллере, либо в taglibs, которые тестируются другими методами.