是否可以使用JSP作为servlet的模板?

Sea*_*nch 11 java jsp servlets web-applications

我一直在我正在构建的Web应用程序中混合使用JSP和Servlet,我开始发现我的更复杂的JSP最终包含了很多代码,这些代码面对所有被攻击的MVC课程.进入我 我知道我可以通过转发到JSP来做到这一点,但这看起来像是一个愚蠢的黑客.

我想做的是使用servlet进行处理,然后将一组值发送到JSP以呈现HTML并返回响应.有点像:

public class MyServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws IOException {

         // ... Do some processing

         resp.getWriter.print(renderJSP("mypage.jsp", values));

    }

}
Run Code Online (Sandbox Code Playgroud)

我一直在寻找Sun的文档并发现:http://java.sun.com/developer/technicalArticles/javaserverpages/servlets_jsp/ 看起来JSP Model 2架构正是我想要实现的,但我找不到一个如何设置它的例子.由于技术原因,我不能使用像Struts这样的更高级的模板框架.

这是可能的还是失败的原因?

Ell*_*gas 10

将对象放入请求中,将请求转发到jsp页面,然后使用jsp中的对象呈现响应.

在你的servlet中,

MyObject obj = ... //build somehow
request.setAttribute("myObject", obj);
RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/jsp/my.jsp");
rd.forward(request, response);
Run Code Online (Sandbox Code Playgroud)

如果不应直接从URL访问结果JSP,则应将其隐藏在WEB-INF目录中,只能通过forward指令访问它.

然后在你的jsp你可以,

<% MyObject obj = (MyObject) request.getAttribute("myObject"); %> 
Run Code Online (Sandbox Code Playgroud)

检索对象并根据需要使用它.

正如其他人所建议的那样,最终学习使用JSTL以及像Spring MVC这样的MVC框架是一个好主意.可以在这里找到该教程.


Pas*_*ent 5

将Java对象放在Request/ Response/中Session并在servlet中使用javax.servlet.RequestDispatcher,类似于:

RequestDispatcher dispatcher = request.getRequestDispatcher("/test.jsp");
dispatcher.forward(request,response);
Run Code Online (Sandbox Code Playgroud)

forward是服务器端,目标servlet/JSP接收与原始servlet/JSP相同的请求/响应对象.因此,您可以使用它们在它们之间传递数据request.setAttribute().

另一种选择是使用response.sendRedirect是(字符串位置),其是客户端(此方法发送一个临时重定向响应于客户端),以使位置URL接收来自客户端的新请求,并传递数据是唯一的方法通过会话或使用web参数(url?name = value).

这基本上就是MVC框架所做的事情(不,它不是黑客).