一,模型层:
实体类,接口(实体类接口,Action接口),接口实现类(实体类接口实现类,Action接口实现类)
代码:
package entity; /** * 用户类 * @author Administrator */ public class User { private String username;//用户名 private String password;//密码 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } package dao; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Action接口 * @author Administrator * */ public interface Action { public String execute(HttpServletRequest request,HttpServletResponse response); } package dao; import entity.User; /** * 用户类接口 * @author Administrator */ public interface UserDao { //登录方法 public User login(String username,String password); } package dao.impl; import dao.UserDao; import entity.User; /** * 用户接口的实现类 * @author Administrator */ public class UserDaoImpl implements UserDao { /** * 登录 */ public User login(String username, String password) { User user=null; if(username.equals("admin")&&password.equals("admin")){ user=new User(); user.setPassword(password); user.setUsername(username); } return user; } } package dao.impl; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.Action; import entity.User; /** * 登录Action类实现Action接口 * @author Administrator */ public class LoginAction implements Action { public String execute(HttpServletRequest request, HttpServletResponse response) { //接收参数 String username=request.getParameter("username"); String password=request.getParameter("password"); //创建UserDaoImpl对象 UserDaoImpl udi=new UserDaoImpl(); //调用登录方法 User user=udi.login(username, password); //判断 User对象是否为空 if(user!=null){ return "success.jsp"; }else{ return "error.jsp"; } } }
二、控制器层,ActionServlet类(添加一个获得Action的方法)
web.xml:配置如下
<servlet-name>ActionServlet</servlet-name> <servlet-class>servlet.ActionServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.action</url-pattern><!-- 过滤所有以.action结尾 --> </servlet-mapping>
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.Action; import dao.impl.LoginAction; public class ActionServlet extends HttpServlet { /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //得到Action对象 Action action=getAction(request); //调用Action实现类方法 try { String result=action.execute(request, response); if(result!=null){ response.sendRedirect(result); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建一个获得Action的方法 * @param request */ public static Action getAction(HttpServletRequest request){ Action action=null; //截取action请求名(例如页面的登录:<form action="login.action" method="post">) String uri=request.getRequestURI(); System.out.println("request.getRequestURI()---"+uri); //结果:request.getRequestURI()---/qifei_mvc_kuangjia_zuoye/login.action StringBuffer url=request.getRequestURL(); System.out.println("request.getRequestURL()--"+url); //结果:request.getRequestURL()--http://localhost:8080/qifei_mvc_kuangjia_zuoye/login.action String contextPath=request.getContextPath(); //结果:request.getContextPath()--/qifei_mvc_kuangjia_zuoye System.out.println("request.getContextPath()--"+contextPath); String actionUrl=uri.substring(contextPath.length()); System.out.println("actionUrl--"+actionUrl); String actionName=actionUrl.substring(1,actionUrl.lastIndexOf(".")).trim(); //判断请求名 if(actionName.equals("login")){ action=new LoginAction(); } return action; } }
三、页面
<body> <form action="login.action" method="post"> 用户名:<input type="text" name="username"/><br/> 密码:<input type="password" name="password"/><br/> <input type="submit" value="提交"> </form> </body>