登录界面的制作_chenlinlin001的博客-程序员秘密

技术标签: 简单的应用  界面  数据库  

登陆界面的简单制作:

首先说一下制作的大概流程

1.在SQLyog(图形化操作数据库的软件)中建立一个连接,然后建立表,并设立主键和其他属性。

2.将表建立好之后,进行数据库的链接。

3.写出基本的增删改查方法。

4.建立所需要的登录,注册界面。

下面是详细过程和代码:

1>

1.建立一个了名称为“student”,用户名为“root”,密码为“linlin”的链接。

2.创建一个名为“user”的数据库,并建立一个名称为“user”的表。

2>

1.创建一个名称为“Success”的“Web Servic Project”类型的工程。

2.建立一个名称为“model”的包,并在其中建立名称为“User”的类,声明属性及其get,set方法。代码如下:

package model;

public class User {
 private int tel;
 private String password;
 private int ide;
 
 
 
 public int getTel() {
  return tel;
 }
 public void setTel(int tel) {
  this.tel = tel;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public int getIde() {
  return ide;
 }
 public void setIde(int ide) {
  this.ide = ide;
 }

}

3.进行对数据库进行连接的方法的构建:建立一个名称为“db”的包,并在其中建立一个名称为“DBO”的类,在其中写入建立连接的方法。代码如下:

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBO {
 private final static  String driver = "com.mysql.jdbc.Driver";
 private final static String url =  "jdbc:mysql://localhost:3306/user";
//first
 static{
 try {
  Class.forName(driver);
 } catch (ClassNotFoundException e) {
 // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
//second
 public static Connection getConnection(){
  Connection conn = null;
 try {
  
   conn =  DriverManager.getConnection(url,"root","linlin");
 } catch (SQLException e) {
 // TODO Auto-generated catch block
  e.printStackTrace();
 }
 return conn;
 }
//third
 public static void close(ResultSet rs, Statement st, Connection conn)
 {
  try
  {
   if(rs != null)
   {
    rs.close();
   }
   if(st != null)
   {
    st.close();
   }
   if(conn != null)
   {
    conn.close();
   }
   
  }catch(Exception ex)
  {
   ex.printStackTrace();
  }
  
 }
 
 public static void close(Statement st, Connection conn)
 {
  close(null,st,conn);
 }
 

}

4.进行所需方法的接口的创建:建立一个名称为“jiekou”的包,并在其中建立一个名称为“UserManager”的接口,注意不是类,而是接口,所以不能选“class”,而应该选用“interface”,然后在创建一个实现“UserManager”接口的名称为“UserManagerImplement”的类,并在其中写入“UserManager”中方法的实现。代码如下:

“UserManager”:

package jiekou;

import java.util.List;

import model.User;

 

public interface UserManager {
 
     //添加注册
  public boolean add(User u);
  //检验用户名及密码是否正确
  public boolean checkout(int tel, String password);
  //删除用户
  public boolean del(int tel);
     //更新用户数据
  public boolean update(User u);
  //查找用户
  public User getUserByTel(int tel);
  //获得用户表
  public List<User> getUsers();


}

“UserManagerImplement”:

package jiekou;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import db.DBO;

import model.User;

public class UserManagerImplement implements UserManager {


 //添加注册
  public boolean add(User u) {
  // TODO Auto-generated method stub
  boolean flag = false;
  Connection conn = null;
  PreparedStatement pst = null;
  
  
  conn = DBO.getConnection();
  String sql = "insert into user(tel,password,ide) value(?,?,?)";
  
   try {
    pst = conn.prepareStatement(sql);
    pst.setInt(1,u.getTel());
    pst.setString(2,u.getPassword());
    pst.setInt(3, u.getIde());
    int rows = pst.executeUpdate();
    if(rows > 0){
     flag = true;
        }
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  
  
 
  return flag;
 }

  //检验用户名及密码是否正确
 public boolean checkout(int tel, String password){
  boolean flag = false;
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  conn =  DBO.getConnection();
  
   try {
    st =  (Statement) conn.createStatement();
    String sql = "select * from user where tel = " + tel;
    rs = (ResultSet) st.executeQuery(sql);
    while(rs.next()){
     if(rs.getString("password").equals(password)){
     
      flag = true;
     }
    }
   }
   catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
 
     finally{
             DBO.close(rs, st, conn);
     }
  
      return flag;
 }

 //删除用户
 public boolean del(int tel) {
  // TODO Auto-generated method stub
  boolean flag = false;
  Connection conn = null;
  PreparedStatement pst = null;
  conn = DBO.getConnection();
  String sql = "delete from user where tel =  ?";
  try {
   pst = conn.prepareStatement(sql);
   pst.setInt(1, tel);
   int rows = pst.executeUpdate();
   if(rows > 0){
    flag = true;
   }
  }
  catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally {
   DBO.close(pst, conn);
  }
  
  return flag;
 }
  //更新用户数据
 public boolean update(User u) {
  // TODO Auto-generated method stub
  boolean flag = false;
  Connection conn = null;
  PreparedStatement pst = null;
  conn = DBO.getConnection();
  String sql = "update user set  password = ?, ide = ? where tel = ?";
  try {
   pst = conn.prepareStatement(sql);
   pst.setString(1, u.getPassword());
   pst.setInt(2, u.getIde());
   pst.setInt(3, u.getTel());
   int rows = pst.executeUpdate();
   if (rows > 0){
    flag = true;
   }
  }
  catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally{
   
   DBO.close(pst, conn);
  }
  return flag;
 }
 //查找用户
 public User getUserByTel(int tel) {
  // TODO Auto-generated method stub
  User u = new User();
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  conn = DBO.getConnection();
  String sql = "select * from user where tel = " + tel;
  try {
   st = conn.createStatement();
   rs = st.executeQuery(sql);
   if(rs.next()){
    u.setTel(rs.getInt("tel"));
    u.setPassword(rs.getString("password"));
    u.setIde(rs.getInt("ide"));
      }
  }
   catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally {
   DBO.close(rs, st, conn);
  }
  return u;
 }
 //获得用户表
 public List<User> getUsers() {
  // TODO Auto-generated method stub
  List<User> list = new ArrayList<User>();//建好对象
  Connection conn = null;
  Statement st = null;
  ResultSet rs = null;
  conn = DBO.getConnection();
  String sql = "select * from user";
  try {
   st = conn.createStatement();
   rs = st.executeQuery(sql);
   while(rs.next()){
       User u = new User();
       u.setTel(rs.getInt("tel"));
       u.setPassword(rs.getString("password"));
       u.setIde(rs.getInt("ide"));
       list.add(u);
   }
  }
  catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  finally {
   DBO.close(rs, st, conn);
  }
  return list;
 }
 }

5.编写测试程序,对所写方法进行测试。分别对上述所写的

 //添加注册
  public boolean add(User u);
  //检验用户名及密码是否正确
  public boolean checkout(int tel, String password);
  //删除用户
  public boolean del(int tel);
     //更新用户数据
  public boolean update(User u);
  //查找用户
  public User getUserByTel(int tel);
  //获得用户表
  public List<User> getUsers();

这些方法进行测试。因为共有五个方法,为了看起来更加明了,让初学者更明白,所以创建了五个不同的类,分别对它们进行测试程序的编写。

       1>创建一个名称为“ceshi”的包,并在其中创建一个名称为“TestAdd”的类对 add(User u)方法进行测试代码如下:

package ceshi;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import model.User;

import jiekou.UserManager;
import jiekou.UserManagerImplement;

import db.DBO;

public class TestAdd {

 public static void main(String[] args) {
  
  Connection conn = DBO.getConnection();
  if(conn != null){
   System.out.println("数据库连接成功");

   String sql = "insert into user(tel,password,ide) values(?,?,?)";
   PreparedStatement pst;
   try {
    pst = conn.prepareStatement(sql);
    pst.setInt(1, 666);
    pst.setString(2, "abd");
          pst.setInt(3,666);
    int rows = pst.executeUpdate();
    if(rows > 0){
     System.out.println("添加数据完成");
       }
    else{
     System.out.println("添加数据失败");
    }  
   }
      catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  
  }
  else{
   System.out.println("数据库连接失败");
  }
  
  UserManager um = new UserManagerImplement();
  for(int i = 40;i < 50;i++){
   User u = new User();
  
      u.setTel(i);
   u.setPassword("pwd" + i);
   u.setIde(i);
   
   boolean flag = um.add(u);
   System.out.println("添加数据完成");
   
  }
     }
 }

       2>创建一个名称为“TestDelete”的类对del(int tel)方法进行测试。代码如下:

package ceshi;

import jiekou.UserManager;
import jiekou.UserManagerImplement;

public class TestDelete {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  UserManager u = new UserManagerImplement();
  boolean flag = u.del(40);
  if(flag == true){
   System.out.println("删除成功");
  }
  else{
   System.out.println("删除失败");
  }
  

 }

 

         3>创建一个名称为“TestUpdate”的类对update(User u)方法进行测试。代码如下:

package ceshi;

import jiekou.UserManager;
import jiekou.UserManagerImplement;
import model.User;

public class TestUpdate {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  UserManager suc = new UserManagerImplement();
  User u = suc.getUserByTel(6);
  u.setPassword("23456");
  u.setIde(436);
  boolean flag = suc.update(u);
  if(flag){
   System.out.println("数据更新成功");
  }else{
   System.out.println("数据更新失败");
  }
  

 }


}

        4.>创建一个名称为“TestGetUser”的类对getUserByTel()方法进行测试。代码如下:

package ceshi;

import jiekou.UserManager;
import jiekou.UserManagerImplement;
import model.User;

public class TestGetUser {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  UserManager suc = new UserManagerImplement();
  User u = suc.getUserByTel(6);
  if(u.getTel() == 6){
   System.out.println("成功找到用户");
   System.out.println("TEL:" + u.getTel());
   System.out.println("密码:" + u.getPassword());
   System.out.println("验证码:" + u.getIde());
  }
  else{
   System.out.println("寻找用户失败");
  }

 }


}

        5.>创建一个名称为“TestGetList”的类对 getUsers()方法进行测试。代码如下:

package ceshi;

import java.util.List;

import jiekou.UserManager;
import jiekou.UserManagerImplement;
import model.User;

public class TestGetList {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  UserManager suc = new UserManagerImplement();
  List<User> list = suc.getUsers();
  for(User u : list){
  
   System.out.println("TEL:   " + u.getTel() + "   密码:" + u.getPassword() + "    验证码:" + u.getIde());
   
  }
  

 }

}

6.下面进行前台页面与后台数据库交流的程序编写。

所需要的共分为三种页面:1.登录页面;2.注册页面;3.所查看内容页面。

后台需要将前台注册页面的内容写入到数据库,所以需要建立Servlet。

编写一个名称为“kongzhi”的类,并在其中建立名为“add”的Servlet,将前台数据写入到后台数据库。代码如下:

package kongzhi;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.User;

import jiekou.UserManager;
import jiekou.UserManagerImplement;

public class add extends HttpServlet {

 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost( request, response);

  
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("UTF-8");
  response.setCharacterEncoding("UTF-8");
  

  int tel = Integer.parseInt(request.getParameter("tel"));
  String password = request.getParameter("password");
  //int ide = Integer.parseInt(request.getParameter("ide"));
  
  //chuang jian dui xiang
  UserManager um = new UserManagerImplement();
  User u = new User();
  
  //jin ru shu ju kong zhi liu
  u.setTel(tel);
  u.setPassword(password);
//  u.setIde(ide);
  boolean flag;
  flag=um.add(u);
  if(flag==true){
   response.sendRedirect("denglu.jsp");
  }
  }
 }

“add”的功能就是就是将数据写到后台,并且从这个页面跳转到"denglu.jsp"登录页面。

而在登录页面还需要有这样的一个方法,它能够判断输入的用户名,密码以及验证码是否正确,如果正确,则页面跳转到所需要查看页面,否则给出提示信息。所以同样在“kongzhi”包下,建立一个名为“thesec”的Servlet。代码如下:

package kongzhi;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jiekou.UserManager;
import jiekou.UserManagerImplement;

public class thesec extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doPost(request,response);
 }

 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  //jie jue zhong wen lun ma
     request.setCharacterEncoding("utf-8");
     response.setCharacterEncoding("utf-8");
     //liang ge lie ming can shu de ding yi
     int tel = Integer.parseInt(request.getParameter("tel"));//yong hu ming
   
     String password = request.getParameter("password"); //mi ma
     String diannao = (String) request.getSession().getAttribute("diannao");//dian nao yan zheng ma
     String ren = request.getParameter("ren");//ren de yan zheng ma
     //can shu ding yi
     UserManager um=new UserManagerImplement();
      boolean flag;
      //jian ce shi fou zheng que ,bing taio zhuan dao xiang ying ye mian
      flag=um.checkout(tel,password);
   if(flag == true && diannao.equalsIgnoreCase(ren)){
    response.sendRedirect("index.jsp");
   }
   else{
     response.setContentType("text/html");
     PrintWriter out = response.getWriter();
     out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
     out.println("<HTML>");
     out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
     out.println("  <BODY>");
     out.println("<h1>");
     out.println("用户名或密码错误登录失败!!");
     out.println("<h1>");
     out.println("  </BODY>");
     out.println("</HTML>");
     out.flush();
     out.close();
    } 

 }

}

然后,登录界面还需要动态随机生成验证码,所以就建立一个名为“ImageServlet”的“Servlet”来生成验证码图片。代码如下:

package kongzhi;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;

import javax.imageio.ImageIO;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import java.awt.Font;

public class ImageServlet extends HttpServlet {

 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost(request, response);

 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  /**
   * BufferedImage(int width, int height, int imageType)
           构造一个类型为预定义图像类型之一的 BufferedImage。
           1、定义BufferedImage图片缓冲区对象
   */
  BufferedImage bi = new BufferedImage(70,40,BufferedImage.TYPE_INT_RGB);
  /**
   * getGraphics()
           此方法返回 Graphics2D,但此处是出于向后兼容性的考虑。
           2、得到画笔工具
   */
  Graphics g = bi.getGraphics();
  /**Color(int r, int g, int b)
     创建具有指定红色、绿色和蓝色值的不透明的 sRGB 颜色,这些值都在 (0 - 255) 的范围内。
          3、得到画笔工具,并设置画板的背景颜色及大小
         */
  Color c = new Color(1,1,1);
  g.setColor(c);
  /**fillRect(int x, int y, int width, int height)
     填充指定的矩形。*/
  g.fillRect(0, 0, 73, 20);
  /**
   * 设置验证码
   */
  char ch[] = "abcdefghigklmnopqrstuvwxyz0123456789".toCharArray();
  Random r = new Random();
  StringBuffer sb = new StringBuffer();
  for(int i = 0; i < 4;i++){
   int in = r.nextInt(ch.length);
   //设置字体大小
   Font f = new Font("宋体",Font.BOLD ,20); //把字体对象放到这new
   g.setFont(f);
   //为四个随机数设置随机的颜色
   g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255)));
   /**
    * drawString(String str, int x, int y)
           使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。
    */
   g.drawString(ch[in]+"",i*15+3,18);
   sb.append(ch[in]);
  }
  request.getSession().setAttribute("diannao", sb.toString());  //将生成的字符串保存到session中
  /**
   * write(RenderedImage im, String formatName, OutputStream output)
            使用支持给定格式的任意 ImageWriter 将一个图像写入 OutputStream。
   */
   ImageIO.write(bi, "JPG", response.getOutputStream());
 

 }

}
有了验证码图片,还需要有一个能够判断所输入验证码与给出验证码是否相同的方法。所以就建立一个名为“YanZhengMa”的Servlet。代码如下:

package kongzhi;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class YanZhengMa extends HttpServlet {

 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doPost( request,response);

 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
         //luan ma
   request.setCharacterEncoding("utf-8");
   response.setCharacterEncoding("utf-8");
  
      //1、获取页面验证码
   String ren = request.getParameter("ren");
   //2、获取session保存的验证码
   String diannao = (String) request.getSession().getAttribute("diannao");
   PrintWriter out = response.getWriter();
   //3、比较验证码
   if(ren.equalsIgnoreCase(diannao)){
    out.print("正确");
   }else{
    out.print("错误");
   }
 }

};

7.后台做完了,下面就开始前台jsp页面的设计了。前台页面共分为三种:1.登录页面;2.注册页面;3.所要访问的页面。在工程“Sueecss”中,“WebRoot”下的“WEB-INF”下分别建立“denglu.jsp”,“zhuce.jsp”,“index.jsp”分别为登录界面,注册界面以及所需访问的界面。

登录界面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'denglu.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
 <script type="text/javascript">
 function reLoadCode(){
  var t = new Date().getTime();
  //设置唯一的时间,防止IE缓存。
  document.getElementById("imageCode").src="ImageServlet?t="+t;
 }
 </script>
 <style type="text/css">
    <!--
 .body{padding-left:630px;padding-top: 100px;}
     -->
    </style> 

  </head>
  <body>
  
    <form action="thesec" method="post" >
     <center><h1>登录界面</h1></center>
     <div class="body">
        <table>
     <tr><td>用户名:</td> <td><input type="text"     name="tel">     </td><td>&nbsp;</td></tr>
     
     <tr><td>好密码:</td> <td><input type="password" name="password"></td><td>&nbsp;</td></tr>
     
     <tr><td>验证码:</td> <td><input type="text"     name="ren"/></td>
     <td> <img src="ImageServlet" id="imageCode" alt="验证码" title="验证码">&nbsp;</td>
     <td>  <a href="javaScript:reLoadCode()">看不清</a></td>
     <td> </td></tr>
     
   
     
        <tr>
        <td></td>
        <td><input name="submit"  type="submit" class="button"  style="width:150px; height:30px " value="登录" /></td>
        </tr>
       
        <tr>
        <td></td>
        <td><font  size="+1"  color="#000099">
        <a href="zhuce.jsp">注册新用户</a>
        </td></font>
        </tr>
       
     
     
         
          </table>
          </div>
     </form>
   </body>
</html>

登陆界面效果图:

 

注册界面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'zhuce.jsp' starting page</title>
   
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
<style type="text/css">
<!--
 .body{padding-left: 630px;padding-top: 100px;}
-->
</style> 


  </head>
 
  <body>
  <form action = "add" method = "post">
  
   <center><h1>新用户注册</h1></center>
    <div class="body">
   <table>
   <tr><td>用户名:</td><td><input name="tel" type="text" value=""/></td></tr>
    <tr><td>密码:</td><td><input name="password" type="password" value=""/></td></tr>
   
    <tr><td></td><td><input type="submit" style="width:160px; height:30px "value="注册" /></td></tr>
   
    
    </table>
  
     
    </div> <br>
    </form>
  </body>
</html>

注册界面效果图如下:

 

所需访问的界面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->
  </head>
 
  <body>
<h1>恭喜成功</h1>
  </body>
</html>

这就是制作登录界面的所有过程了,虽然制作有点粗糙,但是过程很详细,希望对有些朋友有用,也是记录自我成长的一步。

 


 

 



 

 

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/chenlinlin001/article/details/47045057

智能推荐

cuda 并行计算_cuda并行计算_步基的博客-程序员秘密

1 简介2006年,NVIDIA公司发布了CUDA,CUDA是建立在NVIDIA的GPU上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPU的并行计算引擎来更加高效地解决比较复杂的计算难题。CUDA是NVIDIA公司所开发的GPU编程模型,它提供了GPU编程的简易接口,基于CUDA编程可以构建基于GPU计算的应用程序。CUDA提供了对其它编程语言的支持,如C/C++,Python,Fortran等语言。 GPU并不是一个独立运行的计算平台,而需要与CPU协同工作,可以...

用WM_CONCAT查询数据的时候超过10条报不存在的lob值, 弄了一上午终于搞定了!_wm_concat 确实lob_Chet_Li的博客-程序员秘密

我原先的sql:        SELECT ut.userid       AS USERID,               ut.operatorname AS USERNAME,               ut.operatorid   AS OPERATORID,               upt1.posicode   AS POSICODES,

oracle并行查询结果不唯一,Oracle并行查询出错_Bonsen 本森的博客-程序员秘密

Oracle并行查询出错1、错误描述ORA-12801: 并行查询服务器P007中发出错误信号ORA-01722:无效数字12801.00000 -"error signaled in parallel query server %s"*Cause: A parallel query server reached an exception condition.*Action: Check the ...

【数据仓库】数据仓库工具箱(第三版)学习笔记(一)——OLAP与OLTP、数据仓库与商业智能_数据仓库工具箱学习笔记_blmaple831的博客-程序员秘密

数据获取与数据分析的区别信息的目的:操作型记录的保存和分析决策的制定。操作型系统保存数据,而DW/BI系统使用数据。操作型系统的用户确保组织能正常运转,如用户注册、下单、退款以及用户的抱怨。优化的目的是使其能够更快地处理事务。一般一次性处理一个事务记录。操作型系统通常不必维护历史数据,只需要修改数据以反映最新的状态。DW/BI系统的使用户研究分析企业的运转,并对其效能进行评估。DW/BI系统一般不会一次只处理一个事务。对DW/BI系统进行优化的目的是高性能地完成用户的查询,回答用户的查询通常搜索成千

gc0328双摄像头的驱动_飞思卡尔 imx6 GC0308 摄像头驱动配置调试过程_weixin_39595430的博客-程序员秘密

GC0308摄像头驱动程序使用的是linux v4l2协议,通过i2c信号进行控制。GC0308摄像头。对上电时序要求非常严格,一定要依据datasheet初始化摄像头。本驱动使用的3.10内核,所以首先要配置dts,在内核启动阶段支持摄像头,结合硬件原理图。首先配置硬件接口属性:pinctrl_ipu1_4: ipu1grp-4 { /*++++ GC0308 camera */fsl,pi...

随便推点

知识点050-Gitlab的在线安装和离线安装_chenwu0317的博客-程序员秘密

在线部署gitlab gitlab官网 https://about.gitlab.com/gitlab-com/ 官方安装文档 https://about.gitlab.com/installation/?version=ce#centos-7 (ce/ee) 要求服务器内存不少于2g...

Eclipse中字符编码的修改_eclipse修改字符编码_destiny- freedom的博客-程序员秘密

点击window点击Preferences在【Preferences】页面,依次点击打开【General】–【Workspace 】。默认是GBK,一般修改为UTF-8.

luaoc.callStaticMethod实现OC和lua的相互调用_Ethan. L的博客-程序员秘密

首先,看看callStaticMethod方法,它的原型是:-- 调用Objective-C类的接口。-- @function [parent=#luaoc] callStaticMethod-- @param string className Objective-C类名-- @param string methodName Objective-C类方法名-- @param t

IOS面试题归总_Mr___郑的博客-程序员秘密

1.Difference between shallowcopy and deep copy?
浅复制和深复制的区别?
答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。
深层复制:复制引用对象本身。
意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
还是只有一份,那如

看Google三篇重要论文有感_google论文_Hong_Youth的博客-程序员秘密

本次仔细阅读了Google公司的三篇重要的论文分别为《Google File System》、《Google Bigtable》和《Google MapReduce》,让我对分布式系统和大体量数据的存储有了新的认识和理解,下面我主要以三篇论文的主要内容做一个总结以及自己的一些理解和体会。1 《Google File System》这篇文章主要讲的是Google的GFS文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。它与传统的分布式系统有着很多相同的设计目标,比如,性能、可伸缩性以及可用

ORACLE中使用动态游标的例子_oracle 动态游标_waitinglines的博客-程序员秘密

create or replace function get_ope_popedom(sta_id varchar2) return varchar2 /*  * NAME:  *  get_ope_popedom  *  * PARAMETER:  *  sta_id - 车站编号,多个站时以逗号分隔  *  * RETURN:  *  --对应车站编号的车站名称,多个站时以逗号分隔  *  *

推荐文章

热门文章

相关标签