MVC全名是Model View Controller是模型视图控制器的缩写,是一种软件设计典范,是一种架构型的模式,本身不引入新功能,只是帮助将开发的结构组织的更加合理。
它使用一种业务逻辑、数据、界面显示分离的方法,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
最典型的MVC就是 JSP + servlet + javabean 的模式,经常用于请求-响应模型开发中,适用于交互频繁的大中型应用中。
优点:
缺点:
Servlet是一个实现了Servlet接口的类,具备Java类的所有特性,能够很好地组织业务逻辑代码访问,但是在Java源文件中,因为是通过字符串拼接的方式生成动态HTML内容,这样就容易导致代码维护困难、可读性差,不能支持所见即所得的开发。
JSP将网页逻辑与网页设计的显示分离,可以规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑编码非常繁琐,同时基本不具备代码的可重用性。
JSP究其本质就是Servlet,JSP是包含java代码的HTML网页,Servlet是包含html标签的java类。在具体应用开发中可以考虑协同使用,以达到扬长避短的目的。一般使用Servlet作流程控制,jsp作页面显示和收集客户动作,最终实现显示逻辑和流程控制的分离。
纯JSP开发:非常简单高效,特别适合微型应用开发,但是代码基本上不具备重用性,开发效率低,难于维护
JSP Model1:简单高效,适合小型项目的开发。但是JSP的职责过于繁重,职责分工不明确。在后期的维护工作非常的苦难

JSP Model2:职责清晰,适合大型项目,但是分层过多,不适合小型项目的开发

MVC的适用性
登录流程:url–>打开输入数据的页面【jspmodel2要求以servlet为核心】
@WebServlet(name = "LoginServlet", value = "/login.do")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("login.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
输入页面【不是直接访问页面,而是通过Servlet跳转页面】
由Servlet接收提交的数据
@WebServlet(name = "LoginServlet", value = "/login.do")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
request.getRequestDispatcher("login.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
String username=request.getParameter("username");
String password=request.getParameter("password");
Map<String,String> errs=new HashMap<>();
if(username==null || username.trim().length()<1){
errs.put("username","用户名称不能为空!");
}
if(password==null || password.trim().length()<1){
errs.put("password","用户口令不能为空!");
}
if(errs.size()>0){
request.setAttribute("errors",errs);
request.getRequestDispatcher("login.jsp").forward(request,response);
return;
}
IUserDao userDao=new UserDaoImpl();
User user=new User();
user.setUsername(username);
user.setPassword(password);
boolean bb= userDao.login(user);
if(bb){
HttpSession session=request.getSession();
session.setAttribute(Constants.LOGIN_INFO,user);
response.sendRedirect("show.do");
}else{
request.setAttribute("msg","登录失败!请重试");
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
private DateFormat df=new SimpleDateFormat("yyyy-MM-dd");//错误的,线程不安全
}