上一篇的小系统是用MV模式实现的,这种模式基于model1结合java class,实现了界面和模型的分离。但是有一些不足之处:
1 JSP技术上主要是作界面显示的,但是login.jsp调用了java class模型,完成对用户的验证。
2.welcome.jsp是用于显示用户信息(数据)的,但是它除了显示数据,还调用了java class模型,代码的优雅性荡然无存,也不利于将来的分工开发。
因此,有必要对其进行一些改善,学习JSP之前应该对servlet有一些了解,我们知道,servlet技术处理页面之间的跳转是最快捷和方便的,因此MVC模式产生了,引入了控制器controller(C),这里的控制器就是servlet。控制器本身不会去完成业务逻辑,它主要是去调用模型,完成对数据的处理。
MVC模式强制性的使应用程序的输入、处理和输出分开。从而应用程序被分为三个核心部件:模型、试图、控制器。她们各自处理自己的任务。
MVC模式的处理过程:首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后调用模型来处理用户的请求并返回数据,最后控制器用相应的视图显示模型返回数据,并通过浏览器呈现给用户。JSP页面应该是调用Servlet而不是java class。
M:模型,主要由java class来做,也可以是javabean、ejb等。
V:视图,由JSP来做。
C:控制器,由Servlet来做。
利用MVC模式可以对MV模式进行改进,将LoginCl.jsp页面和welcome.jsp中数据处理部分由servlet来完成。Welcome.jsp页面只显示数据结果。
先理一下思路:
首先用户登录系统,提交数据后交给控制器LoginClServlet,控制器调用模型UserbeanCl对数据进行处理:(1)对用户信息进行验证。(2)由request对象将参数和要让welcome.jsp显示的数据传出去。验证成功后方传递数据结果和参数,否则跳转回登陆页面。
然后用户登录进来进入welcome.jsp页面,显示信息分页的第一页,用户可以点击下面的首页、上一页、页码、下一页、尾页。用户点击后,welcome.jsp页面调用控制器UserClServlet,控制器调用模型UserbeanCl对业务进行处理,通过request对象接受和重新设置参数,再转发到welcome.jsp页面。
其实比较麻烦的主要是几个参数和数据的传递,也就是pageNow、pageCount和result。下面给出LoginClServlet.java和UserClServlet.java的代码。
LoginClServlet.java:
package com.ly.controller;
import com.ly.model.*;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginClServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Shit!***************");
String u=request.getParameter("user");
String p=request.getParameter("password");
UserbeanCl ubc=new UserbeanCl();
if(ubc.checkUser(u, p)){
//给welcome.jsp页面准备数据
ArrayList al=(ArrayList)ubc.getUsersByPage(1);
int pageCount=ubc.pageCount();
//将al和pageCount放到request中以便传递
request.setAttribute("result", al);
request.setAttribute("pageCount", pageCount+"");
request.setAttribute("pageNow", 1+"");
request.setAttribute("user", u);
//转发
request.getRequestDispatcher("welcome.jsp").forward(request,response);
}else{
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
UserClServlet.java:
package com.ly.controller;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ly.model.UserbeanCl;
public class UserClServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("FUXCK!*********FUXCK*****FUXCK********");
String s_pageNow=request.getParameter("pageNow");
String s_name=request.getParameter("user");
UserbeanCl ubc=new UserbeanCl();
int pageCount=ubc.pageCount();
try{
int pageNow=Integer.parseInt(s_pageNow);
ArrayList al=(ArrayList)ubc.getUsersByPage(pageNow);
request.setAttribute("result", al);
request.setAttribute("pageCount",pageCount+"");
request.setAttribute("user", s_name);
request.setAttribute("pageNow", pageNow+"");
// 重新跳转回welcome.jsp
request.getRequestDispatcher("welcome.jsp").forward(request, response);
}catch(Exception e){
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
好了,这样,只需要把前面MV模式做的LoginCl.java页面去除,然后将表单提交action改为”LoginClServlet”,前提是你要讲web.xml文件中映射位置设置好,welcome.jsp页面中跳转页面将”welcome.jsp”改为”UserClServlet.jsp”。
这样,将welcome.jsp中的参数接收改好就可以运行了,祝你成功!