Servlet程序开发--实例操作:MVC设计模式应用
以前做过一个登录程序,是用JSP+JavaBean完成的,最大的问题,JSP文件内容太多了。
1. VO
2. DBC
3. DAO
3.1 impl
3.2 proxy
4. Factory
5. Servlet
MVC模式开发中,注意客户端验证和服务器端都要验证,以防直接访问servlet页面。
客户端验证:
<%@ page contentType="text/html" pageEncoding="GBK"%> <%@ page import="java.util.*"%> <html> <head><title>www.mldnjava.cn,MLDN高端Java培训</title></head> <body> <script language="javascript"> function validate(f){ if(!(/^\w{5,15}$/.test(f.userid.value))){ alert("用户ID必须是5~15位!") ; f.userid.focus() ; return false ; } if(!(/^\w{5,15}$/.test(f.userpass.value))){ alert("密码必须是5~15位!") ; f.userpass.focus() ; return false ; } } </script> <% request.setCharacterEncoding("GBK") ; %> <% List<String> info = (List<String>) request.getAttribute("info") ; if(info != null){ // 有信息返回 Iterator<String> iter = info.iterator() ; while(iter.hasNext()){ %> <h4><%=iter.next()%></h4> <% } } %> <form action="LoginServlet" method="post" onSubmit="return validate(this)"> 用户ID:<input type="text" name="userid"><br> 密 码:<input type="password" name="userpass"><br> <input type="submit" value="登陆"> <input type="reset" value="重置"> </form> </body> </html>
服务器端验证:
package org.lxh.mvcdemo.servlet; import org.lxh.mvcdemo.vo.*; import org.lxh.mvcdemo.factory.*; import java.sql.*; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet{ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ String path="login.jsp"; String userid=req.getParameter("userid"); String userpass=req.getParameter("userpass"); List<String> info=new ArrayList<String>(); if(userid==null||"".equals(userid)){ info.add("用户id不能为空!"); } if(userpass==null||"".equals(userpass)){ info.add("密码不能为空!"); } if(info.size()==0){ User user=new User(); user.setUserid(userid); user.setPassword(userpass); try{ if(DAOFactory.getIUserDAOInstance().findLogin(user)){ info.add("用户登录成功,欢迎"+user.getName()+"光临!"); }else{ info.add("用户登录失败,错误的用户名和密码!"); } }catch(Exception e){ e.printStackTrace(); } } req.setAttribute("info",info); req.getRequestDispatcher(path).forward(req,resp); } public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{ this.doGet(req,resp); } }
JSP页面应该只包含如下代码:
1. 接收属性,接收从servlet过来的属性
2. 判断语句,判断传到jsp中的属性是否存在
3. 输出内容,使用迭代或者VO
4. jsp页面唯一允许导入的包只能是java.util包,即 集合的包
一个好的jsp页面最好不导入任何一个开发包
总结:
1. 明白MVC实际的开发作用,以及JSP,Servlet,DAO各个部分的作用,JSP只是负责显示,Servlet只是负责接收参数,调用JavaBean,并进行跳转的操作。