Java 从servlet代码中分离视图部分

Java 从servlet代码中分离视图部分,java,jsp,servlets,Java,Jsp,Servlets,我是JSP的初学者。我正在做一个项目,因为我必须将视图部分(即,out.println语句)与Servletcode分离。如何执行此操作?请建议 这是控制器servlet,请求将通过index.jsp页面发出 My ControllerServlet.java: 公共类ControllerServlet扩展了HttpServlet{ 私有字符串temp=null; 私人INTK; 公共字符串gettemp(){ 返回温度; } public void processRequest(HttpSe

我是JSP的初学者。我正在做一个项目,因为我必须将视图部分(即,
out.println
语句)与
Servlet
code分离。如何执行此操作?请建议

这是控制器servlet,请求将通过index.jsp页面发出


My ControllerServlet.java:

公共类ControllerServlet扩展了HttpServlet{
私有字符串temp=null;
私人INTK;
公共字符串gettemp(){
返回温度;
}
public void processRequest(HttpServletRequest请求、HttpServletResponse响应)
抛出ServletException、IOException{
setContentType(“text/html;charset=UTF-8”);
PrintWriter out=response.getWriter();
k=(整数)request.getAttribute(“ival”);//值来自index.jsp页面
试一试{
out.println(“”);
out.println(“”);
out.println(“”);
println(“Servlet控制器Servlet”);
out.println(“”);
out.println(“”);
开关(k){
案例1:
temp=“星期一”;
打破
案例2:
temp=“星期二”;
打破
案例3:
temp=“星期三”;
打破
案例4:
temp=“thrusday”;
打破
案例5:
temp=“星期五”;
打破
案例6:
temp=“星期六”;
打破
案例7:
temp=“星期日”;
打破
}                
/*
out.println(温度);
out.println(“n的值为=”+k);
out.println(“”);
*/
setAttribute(“temp”,temp);
RequestDispatcher rd=request.getRequestDispatcher(“SucessView.jsp”);
转发(请求、响应);
out.println(“”);
out.println(“”);
}最后{
out.close();
}
}
在上面的代码中,我希望通过单独的JSP页面“SuccessView.JSP”执行此操作:

out.println(温度);
out.println(“n的值为=”+k);
out.println(“”);
请建议如何执行此操作

为此,我已经这样做了,但这不起作用


请建议另一种获取临时值的方法。

您的servlet不应包含HTML代码

该视图是在JSP中完成的

提交表单时,将其发送到servlet。表单数据处理完成后,它将再次返回到JSP页面以显示结果

<html>
<head>
</head>
<body>
<form action="/MyServlet" method="post">
<input type="text" name="myName">
<input type="submit">
</form>
</body>
</html>

然后在servlet“MySerlet”中,您可以从表单中删除名称或任何其他字段,并根据需要执行业务逻辑(以及数据库插入/更新/删除)


在servlet的末尾使用
response.sendRedirect(“/myThanksPage.jsp”);
重定向到您的感谢页面。

为此,我已经这样做了,但这不起作用。请重新措辞。作为旁注:在调用后,不要尝试向输出写入内容,因为它已经提交到输出。它可以使用PrintWriter向输出写入内容,也可以使用
转发
(或
包含
)在dispatcher对象上。另请阅读:。您试图实现的目标与(MVC)相关。本教程可能对您很有用:。它来自流行的。+1作为通用解决方案。但有一点很重要:在这种情况下,转发到JSP比重定向更常见/更好。重定向时,它将是一个全新的请求,因此,如果您在初始请求中添加/设置了一些,您将在y中使用它“谢谢”JSP页面,它们将丢失!转发的问题(对我来说)是,对于维护(调试)来说,不清楚您实际使用的代码是什么…这就是为什么我更喜欢重定向,即使它会生成额外的网络往返。但这是个人偏好。
public class ControllerServlet extends HttpServlet {

    private String temp = null;
    private int k;
    public String gettemp() {
        return temp;
    }

    public void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        k=(Integer)request.getAttribute("ival"); // value is coming from index.jsp page

        try {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet ControllerServlet</title>");
            out.println("</head>");
            out.println("<body>");           

            switch (k) {
                case 1:
                    temp = "Monday";
                    break;
                case 2:
                    temp = "tuesday";
                    break;
                case 3:
                    temp = "Wednesday";
                    break;
                case 4:
                    temp = "thrusday";
                    break;
                case 5:
                    temp = "friday";
                    break;
                case 6:
                    temp = "saturday";
                    break;
                case 7:
                    temp = "sunday";
                    break;
            }                

           /*
            out.println(temp);
            out.println("value of n is ="+ k);
            out.println("<a href =\"index.jsp\">next </a>");    
            */
            request.setAttribute("temp", temp);
            RequestDispatcher rd = request.getRequestDispatcher("SucessView.jsp");
            rd.forward(request, response);
            out.println("</body>");
            out.println("</html>");   
        } finally {
            out.close();
        }
    }
out.println(temp);
out.println("value of n is ="+ k);
out.println("<a href =\"index.jsp\">next </a>");    
<html>
<head>
</head>
<body>
<form action="/MyServlet" method="post">
<input type="text" name="myName">
<input type="submit">
</form>
</body>
</html>