zoukankan      html  css  js  c++  java
  • 20160402javaweb 开发模式

    开发案例:

     首先,我们确定用xml文件代替数据库,便于测试

    建立web工程,基本架构见下图

    代码如下:

    首先是javabean:User.java

    package com.dzq.domian;
    
    import java.io.Serializable;
    
    import com.dzq.exception.MsgException;
    
    public class User implements Serializable{
    private String username;
    private String password;
    private String password2;
    private String nickname;
    private String email;
    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;
    }
    public String getPassword2() {
        return password2;
    }
    public void setPassword2(String password2) {
        this.password2 = password2;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public User(){
        
    }
    public User(String username, String password, String password2,
            String nickname, String email) {
        
        this.username = username;
        this.password = password;
        this.password2 = password2;
        this.nickname = nickname;
        this.email = email;
    }
    @Override
    public String toString() {
        return username+":"+password;
    }
    public void checkValue() throws MsgException{
        if(username==null||"".equals(username)){
            throw new MsgException("用户名不能为空");
        }
        if(password==null||"".equals(password)){
            throw new MsgException("密码不能为空");
        }
        if(password2==null||"".equals(password2)){
            throw new MsgException("密码不能为空");
        }
        if(!password.equals(password2)){
            throw new MsgException("两次密码输入不一致");
        }
        if(nickname==null||"".equals(nickname)){
            throw new MsgException("昵称不能为空");
        }
        if(email==null||"".equals(email)){
            throw new MsgException("邮箱不能为空");
        }
    }
    
    }

    数据类XmlUserDao.java

    package com.dzq.dao;
    
    
    import java.util.*;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    import com.dzq.domian.User;
    import com.dzq.util.XmlDaoUtils;
    
    public class XmlUserDao {
        /**
         * 根据用户名查找用户
         * @param username 用户名
         * @return 根据用户名找到的用户信息,如果没找到,返回null
         */
    public User findUserByUserName(String username){
        Document dom=XmlDaoUtils.getDom();
        Element root=dom.getRootElement();
        List<Element> list=root.selectNodes("//user[@username='"+username+"']");
        if(list.size()>0){
            Element userEle=list.get(0);
            User user=new User();
            user.setUsername(userEle.attributeValue("username"));
            user.setPassword(userEle.attributeValue("password"));
            user.setNickname(userEle.attributeValue("nickname"));
            user.setEmail(userEle.attributeValue("email"));
            return user;
        }else{
            return null;
        }
    }
    /**
     * 添加用户
     * @param user 要添加用户信息的bean
     */
    public void addUser(User user){
        Document dom=XmlDaoUtils.getDom();
        Element root=dom.getRootElement();
        
        Element userEle=DocumentHelper.createElement("user");
        userEle.setAttributeValue("username", user.getUsername());
        userEle.setAttributeValue("password", user.getPassword());
        userEle.setAttributeValue("nickname", user.getNickname());
        userEle.setAttributeValue("email", user.getEmail());
        root.add(userEle);
        XmlDaoUtils.refXml();
    }
    
    /**
     * 根据用户名密码查找用户信息
     * @param username 用户名
     * @param password 密码
     * @return 找到的用户,找不到返回null 
     */
    public User findUserByUNAndPWD(String username,String password){
        
        Document dom=XmlDaoUtils.getDom();
        Element root=dom.getRootElement();
        List<Element> list=root.selectNodes("//user[@username='"+username+"'and @password='"+password+"']");
        if(list.size()>0){
            Element userEle=list.get(0);
            User user=new User();
            user.setUsername(userEle.attributeValue("username"));
            user.setPassword(userEle.attributeValue("password"));
            user.setNickname(userEle.attributeValue("nickname"));
            user.setEmail(userEle.attributeValue("email"));
            return user;
        }else{
            return null;
        }
        
    }
    }

    业务类:UserService.java

    package com.dzq.service;
    
    import com.dzq.dao.XmlUserDao;
    import com.dzq.domian.User;
    import com.dzq.exception.MsgException;
    
    public class UserService {
        private  XmlUserDao dao=new XmlUserDao();
        /**
         * 添加用户
         * @param user
         * @throws MsgException 
         */
        public void registUser(User user) throws MsgException{
            if(dao.findUserByUserName(user.getUsername())!=null){
                throw new MsgException("用户名已经存在");
            }
            dao.addUser(user);
        }
        /**
         * 检查用户名是否正确
         * @param username
         * @param password
         */
        public User isUser(String username,String password){
            return dao.findUserByUNAndPWD(username, password);
            
        }
    }

    处理异常的类MsgException

    package com.dzq.exception;
    
    public class MsgException extends Exception {
    public MsgException(){
    
    }
    
    public MsgException(String msg){
        super(msg);
    }
    }

    测试类:XmlUserDaoTest.java

    package com.dzq.test;
    
    import org.junit.Test;
    
    import com.dzq.dao.XmlUserDao;
    import com.dzq.domian.User;
    
    public class XmlUserDaoTest {
        @Test
    public void testfindUserByUserName(){
        
        XmlUserDao dao=new XmlUserDao();
        User user=dao.findUserByUserName("admin");
        System.out.println(user.toString());
    }
        @Test
        public void testfinduserByUNAndPWD(){
            XmlUserDao dao=new XmlUserDao();
            User user=dao.findUserByUNAndPWD("admin", "admin");
            System.out.println(user);
        }
        @Test
        public void testAddUser(){
            XmlUserDao dao=new XmlUserDao();
            User user=new User();
            user.setUsername("xiaoduc");
            user.setPassword("1234");
            user.setNickname("xiaoduc");
            user.setEmail("duxiao@qq.com");
            dao.addUser(user);
        }
    }

    工具类:XmlDaoUtils.java

    package com.dzq.util;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.UnsupportedEncodingException;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;
    
    public class XmlDaoUtils {
        private static Document dom=null;
        private static String path=XmlDaoUtils.class.getClassLoader().getResource("users.xml").getPath();
       private XmlDaoUtils(){
       }
       static{
           try {
                SAXReader reader=new SAXReader();
                 dom= reader.read(path);
                
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException();
            }
           
       }
       public  static Document getDom(){
           return dom;
       } 
       
       public static void refXml(){
           try {
            XMLWriter writer=new XMLWriter(new FileOutputStream(path),OutputFormat.createPrettyPrint());
            writer.write(dom);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
        } 
           
       }
    }

    下面是几个servlet

    package com.dzq.web;
    
    import java.io.IOException;
    import java.net.URLEncoder;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dzq.domian.User;
    import com.dzq.service.UserService;
    
    
    @WebServlet("/LoginServlet")
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            String username=request.getParameter("username");
            String password=request.getParameter("password");
            UserService service=new UserService();
            User user=service.isUser(username, password);
            if(user==null){
                request.setAttribute("msg", "用户名或者密码错误");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
            }else{
                request.getSession().setAttribute("user", user);
                if("ok".equals(request.getParameter("remname"))){
                    Cookie remNameC=new Cookie("remname",URLEncoder.encode(user.getUsername(),"utf-8"));
                    remNameC.setPath(request.getContextPath());
                    remNameC.setMaxAge(3600*24*30);
                    response.addCookie(remNameC);
                }else{
                    Cookie remNameC=new Cookie("remname","");
                    remNameC.setPath(request.getContextPath());
                    remNameC.setMaxAge(0);
                    response.addCookie(remNameC);
                }
                response.sendRedirect(request.getContextPath()+"/index.jsp");
            }
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package com.dzq.web;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    @WebServlet("/LogOutServlet")
    public class LogOutServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            if(request.getSession(false)!=null&&request.getSession().getAttribute("user")!=null){
                request.getSession().invalidate();
                response.sendRedirect(request.getContextPath()+"/index.jsp");
            }
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package com.dzq.web;
    
    import java.io.IOException;
    
    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 org.apache.commons.beanutils.BeanUtils;
    
    import com.dzq.domian.User;
    import com.dzq.exception.MsgException;
    import com.dzq.service.UserService;
    
    
    @WebServlet("/RegistServlet")
    public class RegistServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            try {
                UserService service=new UserService();
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            //1。检验验证码
            String valistr=request.getParameter("valistr");
            String valistr2=(String) request.getSession().getAttribute("valistr");
            if(valistr==null||valistr2==null||!valistr.equals(valistr2)){
                request.setAttribute("msg", "验证码不正确");
                request.getRequestDispatcher("/regist.jsp").forward(request, response);
                return;
            }
            //2.封装数据,校验数据
            User user=new User();
            BeanUtils.populate(user, request.getParameterMap());
            user.checkValue();
            service.registUser(user);
            request.getSession().setAttribute("user", user);
            response.getWriter().write("恭喜您注册成功,3秒回到主页");
            response.setHeader("refresh", "3;url="+request.getContextPath()+"/index.jsp");
            }catch(MsgException e){
                request.setAttribute("msg",e.getMessage());
                request.getRequestDispatcher("/regist.jsp").forward(request, response);
                return;
            }catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            } 
            //3.调用service方法添加用户
            
            //4.提示注册成功,3秒跳转主页
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package com.dzq.web;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    @WebServlet("/ValiImg")
    public class ValiImg extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            response.setDateHeader("Expires", -1);
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Pragma","no-cache");
            //1.在内存中构建一张图片
            int height=30;
            int width=120;
            int xpyl=5;
            int ypyl=22;
            int bang=20;
            BufferedImage img=new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
            //2.获取图像上的画布
            Graphics2D g=(Graphics2D) img.getGraphics();
            //3.设置背景色
            g.setColor(Color.LIGHT_GRAY);
            g.fillRect(0, 0, width, height);
            //4.设置边框
            g.setColor(Color.BLUE);
            g.drawRect(0, 0, width-2, height-2);
            //5.画干扰线
            for(int i=0;i<5;i++){
            g.setColor(Color.RED);
            g.drawLine(randNum(0, width), randNum(0, height), randNum(0, width), randNum(0, height));
            }
            //6.写字
            String base = "u7684u4e00u4e86u662fu6211u4e0du5728u4ebau4eecu6709u6765u4ed6u8fd9u4e0au7740u4e2au5730u5230u5927u91ccu8bf4u5c31u53bbu5b50u5f97u4e5fu548cu90a3u8981u4e0bu770bu5929u65f6u8fc7u51fau5c0fu4e48u8d77u4f60u90fdu628au597du8fd8u591au6ca1u4e3au53c8u53efu5bb6u5b66u53eau4ee5u4e3bu4f1au6837u5e74u60f3u751fu540cu8001u4e2du5341u4eceu81eau9762u524du5934u9053u5b83u540eu7136u8d70u5f88u50cfu89c1u4e24u7528u5979u56fdu52a8u8fdbu6210u56deu4ec0u8fb9u4f5cu5bf9u5f00u800cu5df1u4e9bu73b0u5c71u6c11u5019u7ecfu53d1u5de5u5411u4e8bu547du7ed9u957fu6c34u51e0u4e49u4e09u58f0u4e8eu9ad8u624bu77e5u7406u773cu5fd7u70b9u5fc3u6218u4e8cu95eeu4f46u8eabu65b9u5b9eu5403u505au53ebu5f53u4f4fu542cu9769u6253u5462u771fu5168u624du56dbu5df2u6240u654cu4e4bu6700u5149u4ea7u60c5u8defu5206u603bu6761u767du8bddu4e1cu5e2du6b21u4eb2u5982u88abu82b1u53e3u653eu513fu5e38u6c14u4e94u7b2cu4f7fu5199u519bu5427u6587u8fd0u518du679cu600eu5b9au8bb8u5febu660eu884cu56e0u522bu98deu5916u6811u7269u6d3bu90e8u95e8u65e0u5f80u8239u671bu65b0u5e26u961fu5148u529bu5b8cu5374u7ad9u4ee3u5458u673au66f4u4e5du60a8u6bcfu98ceu7ea7u8ddfu7b11u554au5b69u4e07u5c11u76f4u610fu591cu6bd4u9636u8fdeu8f66u91cdu4fbfu6597u9a6cu54eau5316u592au6307u53d8u793eu4f3cu58ebu8005u5e72u77f3u6ee1u65e5u51b3u767eu539fu62ffu7fa4u7a76u5404u516du672cu601du89e3u7acbu6cb3u6751u516bu96beu65e9u8bbau5417u6839u5171u8ba9u76f8u7814u4ecau5176u4e66u5750u63a5u5e94u5173u4fe1u89c9u6b65u53cdu5904u8bb0u5c06u5343u627eu4e89u9886u6216u5e08u7ed3u5757u8dd1u8c01u8349u8d8au5b57u52a0u811au7d27u7231u7b49u4e60u9635u6015u6708u9752u534au706bu6cd5u9898u5efau8d76u4f4du5531u6d77u4e03u5973u4efbu4ef6u611fu51c6u5f20u56e2u5c4bu79bbu8272u8138u7247u79d1u5012u775bu5229u4e16u521au4e14u7531u9001u5207u661fu5bfcu665au8868u591fu6574u8ba4u54cdu96eau6d41u672au573au8be5u5e76u5e95u6df1u523bu5e73u4f1fu5fd9u63d0u786eu8fd1u4eaeu8f7bu8bb2u519cu53e4u9ed1u544au754cu62c9u540du5440u571fu6e05u9633u7167u529eu53f2u6539u5386u8f6cu753bu9020u5634u6b64u6cbbu5317u5fc5u670du96e8u7a7fu5185u8bc6u9a8cu4f20u4e1au83dcu722cu7761u5174u5f62u91cfu54b1u89c2u82e6u4f53u4f17u901au51b2u5408u7834u53cbu5ea6u672fu996du516cu65c1u623fu6781u5357u67aau8bfbu6c99u5c81u7ebfu91ceu575au7a7au6536u7b97u81f3u653fu57ceu52b3u843du94b1u7279u56f4u5f1fu80dcu6559u70edu5c55u5305u6b4cu7c7bu6e10u5f3au6570u4e61u547cu6027u97f3u7b54u54e5u9645u65e7u795eu5ea7u7ae0u5e2eu5566u53d7u7cfbu4ee4u8df3u975eu4f55u725bu53d6u5165u5cb8u6562u6389u5ffdu79cdu88c5u9876u6025u6797u505cu606fu53e5u533au8863u822cu62a5u53f6u538bu6162u53d4u80ccu7ec6";
            StringBuffer buffer=new StringBuffer();
            
            for(int i=0;i<4;i++){
                g.setColor(new Color(randNum(0, 255),randNum(0, 255),randNum(0, 255)));
                g.setFont(new Font("黑体",Font.BOLD,bang));
                int r=randNum(-45, 45);
                g.rotate(1.0*r/180*Math.PI,xpyl+i*30, ypyl);
                String s=base.charAt(randNum(0, base.length()-1))+"";
                buffer.append(s);
                g.drawString(s, xpyl+i*30, ypyl);
                g.rotate(1.0*-r/180*Math.PI,xpyl+i*30, ypyl);
            }
            request.getSession().setAttribute("valistr", buffer.toString());
            System.out.println(buffer.toString());
            //将图片输出到浏览器
            ImageIO.write(img, "jpg", response.getOutputStream());
            
        }
        private Random rand=new Random();
        private int randNum(int begin,int end){
            
         return rand.nextInt((end-begin)+begin);        
            
        }
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
        }
    }

    自定义标签类:

    package com.dzq.tag;
    
    import java.io.IOException;
    import java.net.URLDecoder;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.SimpleTagSupport;
    
    public class URLDEcoderTag extends SimpleTagSupport {
        private String content;
        private String encode;
    
    public void setContent(String content) {
        this.content = content;
    }
    
    public void setEncode(String encode) {
        this.encode = encode;
    }
    
    @Override
    public void doTag() throws JspException, IOException {
        String str=URLDecoder.decode(content, encode==null?"utf-8":encode);
        getJspContext().getOut().write(str);
        
        
    }
    
    }

    自定义标签的tld文件UserTag.tld

    <?xml version="1.0" encoding="UTF-8"?>
    <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
     <tlib-version>1.0</tlib-version>
     <short-name>UserTag</short-name>
     <uri>http://www.dzq.com/UserTag</uri>
     <tag>
      <name>URLDecoder</name>
      <tag-class>com.dzq.tag.URLDEcoderTag</tag-class>
      <body-content>empty</body-content>
      <attribute>
       <name>content</name>
       <required>true</required>
       <rtexprvalue>true</rtexprvalue>
       <type>java.lang.String</type>
      </attribute>
      <attribute>
       <name>encode</name>
       <required>false</required>
       <rtexprvalue>true</rtexprvalue>
       <type>java.lang.String</type>
      </attribute>
     </tag>
    </taglib>

    下面是存储信息的xml文件users.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <users>
        <user username="admin" password="admin" nickname="admin" email="admin@qq.com" />
    </users>

    以下是jsp页面:

    index.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
    </head>
    <body>
    <h1>我的网站</h1><hr>
    <c:if test="${sessionScope.user!=null}">
    欢迎回来!${sessionScope.user.username }<a href="${pageContext.request.contextPath }/LogOutServlet">注销</a>
    </c:if>
    
    <c:if test="${sessionScope.user==null}">
    游客,欢迎你!<a href="${pageContext.request.contextPath }/regist.jsp">注册</a>|<a href="${pageContext.request.contextPath }/login.jsp">登录</a>
    </c:if>
    </body>
    </html>

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
        <%@taglib uri="http://www.dzq.com/UserTag" prefix="UserTag" %>
    <html>
    <head>
    
    </head>
    <body>
    <div align="center">
    <h1>我的网站_登录</h1><hr>
    <font color="red">${msg }</font>
    <form action="${pageContext.request.contextPath }/LoginServlet" method="post">
    <table border="1">
           <tr>
              <td>用户名:</td>
              
              <td><input type="text" name="username" value="<UserTag:URLDecoder content="${cookie.remname.value }" encode="utf-8"/>"/></td>
           </tr>
           <tr>
              <td>密码:</td>
              <td><input type="password" name="password"/></td>
           </tr>
           <tr>
              <td><input type="submit" value="登录"/></td>
              <td><input type="checkbox" value="ok" name="remname" 
              <c:if test="${cookie.remname!=null }">
              checked="checked"
              </c:if>
              />记住用户名</td>
           </tr>
    </table>
    </form>
    </div>
    </body>
    </html>

    regist.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <html>
    <head>
    <script type="text/javascript">
    function changeImg(img){
        img.src=img.src+"?time="+new Date().getTime();
    }
    </script>
    </head>
     <font color="red" >${msg }</font>
    <body>
    <div align="center">
    <h1>我的网站_注册</h1>
    <form action="${pageContext.request.contextPath }/RegistServlet" method="post">
    <table border="1">
        <tr>
            <td>用户名:</td>
            <td><input type="text" name="username" value="${param.username }"/></td>
        <tr/>
         <tr>
            <td>密码:</td>
            <td><input type="password" name="password" /></td>
        <tr/>
         <tr>
            <td>确认密码:</td>
            <td><input type="password" name="password2" /></td>
        <tr/>
         <tr>
            <td>昵称:</td>
            <td><input type="text" name="nickname" value="${param.nickname }"/></td>
        <tr/>
         <tr>
            <td>邮箱</td>
            <td><input type="email" name="email" value="${param.email }"/></td>
        <tr/>
         <tr>
            <td>验证码:</td>
            <td><input type="text" name="valistr" /></td>
        <tr/>
         <tr>
            <td><input type="submit" value="注册"/></td>
            <td><img src="${pageContext.request.contextPath }/ValiImg" style="cursor: pointer;" onclick="changeImg(this)"></td>
        <tr/>
    
    </table>
    </form>
    </div>
    </body>
    </html

    运行截图:

    采用了cookie 记住用户名

     源码下载地址 

  • 相关阅读:
    java中Date的getTime() 方法奇葩问题
    ant的那些闹挺事
    webDriver中的alert
    WebDriver 随笔
    java.lang.UnsupportedClassVersionError
    android 测试(转)
    python 与linux交互
    python与mysql交互
    JMeter 响应数据为空
    python 异常
  • 原文地址:https://www.cnblogs.com/xiaoduc-org/p/5348047.html
Copyright © 2011-2022 走看看