jsp MVC设计模式



jsp MVC设计模式。

1 JSP+DAO设计模式
使用JSP+JAVABEAN开发速度快,有一个问题:JSP与JAVABEAN之间紧密偶合在一起,
会对开发及维护造成麻烦。
美工人员说,你先做好JAVA程序我再做美工
开发人员说,你先做好美工我在开发好程序

维护的时候,JAVABEAN与JSP紧密偶合,修改麻烦
使用JSP+JAVABEAN(模式1)开发适合于一次开发完成,而且团队成员教少时使用。

2 JSP+SERVLET+JAVABEAN
分析:
JSP优点:开发前台界面方便,做UI开发容易。

SERVLET优点:是JAVA程序,安全性高,性能好。
SERVLET缺点:显示不方便。
SERVLET也可以像JSP一样接收用户的请求参数

JAVABEAN优点:可重复调用,需要接收用户的请求参数,进行相应的处理。

JSP–> Servlet–> JavaBean

问题?
JSP跳转到Servlet可以么? 可以,通过表单提交或超链接
由Servlet跳转到JSP可以么?可以,可以通过response对象

JSP中两种跳转语句的区别:
response.sendRedirect():客户端跳转,请求不保存
<jso:forward page=”">:服务器端跳转,请求可以继续保存

JSP中有四种属性范围:page request session application

3 例子:
package cn.mldn.lxh.form;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MVCServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//   request.setAttribute(“name”, “kangyue”);
//   RequestDispatcher rd = null;
//   rd = request.getRequestDispatcher(“Mdemo.jsp”);
//   rd.forward(request, response);
//   request.getRequestDispatcher(“Mdemo.jsp”).forward(request, response);

request.getSession().setAttribute(“name”, “kangyue”);
response.sendRedirect(“Mdemo.jsp”);
}

}

页面中用 <h1><%= session.getAttribute(“name”) %></h1>接收,可以显示出接收的参数。
注意:上边的request.setAttribute(),然后在页面中用request.getAttribute()接收参数的话,接收不到。
正如以上,考虑问题:
现在从Servlet中要传递的值只有使用一次,如果把此值放在session范围之中,则此内容只要用户一直
与服务器保持连接,则此块内存空间要一直被占用,那么性能会很低。

解决办法:RequestDispatcher接口,是用于进行服务器端跳转的接口。
代码如下:
package cn.mldn.lxh.form;
import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MVCServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute(“name”, “kangyue1″);
//   RequestDispatcher rd = null;
//   rd = request.getRequestDispatcher(“Mdemo.jsp”);
//   rd.forward(request, response);
request.getRequestDispatcher(“Mdemo.jsp”).forward(request, response);

//  request.getSession().setAttribute(“name”, “kangyue”);
//  response.sendRedirect(“Mdemo.jsp”);
}
}
页面中用 <h1><%= request.getAttribute(“name”) %></h1>接收,可以显示出接收的参数。

Servlet跳转到JSP的服务器端跳转指令是:req.getRequestDispatcher(“mdemo.jsp”).forward(req, resp);

4 Servlet中最好只有以下几种代码:
a 接收参数
b 调用javabean
c 进行跳转
d 有一些简单的逻辑判断

http://blog.163.com/ky_199/blog/static/1431760200942584727582/