第五讲

(一)cookie的讲解和使用
(二)cookie和session的比较
(三)网站架构的改进
(四)用户登录系统的改进

什么是cookie

服务器在客户端保存的用户信息,就是cookie

cookie的作用
保存用户名、密码,在一定时间内不重新登录
记录用户访问网站的喜好
网站的个性化

cookie的使用

1.创建cookie

package com.tingwei;
import javax.servlet.http.*;
import java.io.*;public class CookieTest1 extends HttpServlet {//处理get请求public void doGet(HttpServletRequest req,HttpServletResponse res){try {res.setContentType("text/html;charset=gbk");PrintWriter pw=res.getWriter();//当用户访问该Servlet时,就将信息创建到该用户的cookie天中//1.先在服务器端创建一个cookieCookie mycookie=new Cookie("color1","red");//2.设置cookie存在的时间mycookie.setMaxAge(30);//单位秒,从创建开始计时//如果不设置存在时间,那么该cookie将不会被保存//3.将该cookie写回客户端res.addCookie(mycookie);pw.println("已经创建了cookie");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}
}

2.读取cookie

//如何读取Cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;public class CookieTest2 extends HttpServlet {//处理get请求public void doGet(HttpServletRequest req,HttpServletResponse res){try {res.setContentType("text/html;charset=gbk");PrintWriter pw=res.getWriter();//从客户端得到所有cookie信息Cookie [] allCookies=req.getCookies();int i=0;//如果allCookies不为空if(allCookies!=null){//从中取出cookiefor(i=0;i<allCookies.length;i++){//依次取出Cookie tmp=allCookies[i];if(tmp.getName().equals("color1")){//得到cookie信息String val=tmp.getValue();pw.println("color1="+val);break;}//if}//forif(allCookies.length==i){pw.println("cookie 过期");}}else{pw.println("不存在color1这个cookie/cookie 过期");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}
}

3.删除cookie

//如何读取Cookie
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;public class CookieTest3 extends HttpServlet {//处理get请求public void doGet(HttpServletRequest req,HttpServletResponse res){try {res.setContentType("text/html;charset=gbk");PrintWriter pw=res.getWriter();//从客户端得到所有cookie信息Cookie [] allCookies=req.getCookies();int i=0;//如果allCookies不为空if(allCookies!=null){//从中取出cookiefor(i=0;i<allCookies.length;i++){//依次取出Cookie tmp=allCookies[i];if(tmp.getName().equals("color1")){//将该cookie删除tmp.setMaxAge(0);pw.println("删除了color1这个cookie");break;}}if(allCookies.length==i){pw.println("不存在color1这个cookie/cookie 过期");}}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}
}

使用cookie完成保存用户名密码,在一段时间内不用重新登录

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--  --><web-app><display-name>Welcome to Tomcat</display-name><description>Welcome to Tomcat</description><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>login</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.Login</servlet-class></servlet><servlet-mapping><servlet-name>login</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/login</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>wel</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.Wel</servlet-class></servlet><servlet-mapping><servlet-name>wel</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/wel</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>logincl</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.LoginCl</servlet-class></servlet><servlet-mapping><servlet-name>logincl</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/logincl</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>cookietest1</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.CookieTest1</servlet-class></servlet><servlet-mapping><servlet-name>cookietest1</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/cookietest1</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>cookietest2</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.CookieTest2</servlet-class></servlet><servlet-mapping><servlet-name>cookietest2</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/cookietest2</url-pattern></servlet-mapping></web-app>
//登录界面
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){try {//中文乱码处理res.setContentType("text/html;charset=gbk");PrintWriter pw=res.getWriter();//返回登录界面pw.println("<html>");pw.println("<body>");pw.println("<img src=imgs/image2.jpg width=200><br>");pw.println("<h>登录界面</h>");pw.println("<form action=logincl method=post>");pw.println("用户名:<input type=text name=username><br>");pw.println("密码:<input type=password name=passwd><br>");pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");pw.println("<input type=submit value=login><br>");pw.println("</form>");pw.println("</body>");pw.println("</html>");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req, res);}
}
//用户验证Servlet
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){Connection ct=null;Statement sm=null;ResultSet rs=null;String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";String user="sa";String passwd="tingwei";String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//业务逻辑try {//接收用户名和密码String u=req.getParameter("username");String p=req.getParameter("passwd");//连接接数据库,三部曲Class.forName(driver);//得到连接ct=DriverManager.getConnection(url,user,passwd);//创建一个Statementsm=ct.createStatement();String query="select top 1 *from users where usernaem='"+u+"' and passwd='"+p+"'";rs=sm.executeQuery(query);//验证if(rs.next()){//合法用户String keep=req.getParameter("keep");//将用户名和密码保存在客户端cookieif(keep!=null){Cookie name=new Cookie("myname",u);Cookie pass=new Cookie("mypasswd",p);//设置时间name.setMaxAge(14*24*3600);pass.setMaxAge(14*24*3600);//回写到客户端res.addCookie(name);res.addCookie(pass);}//将验证成功的信息写入sessionHttpSession hs=req.getSession(true);//修改session的存在时间 单位shs.setMaxInactiveInterval(30);hs.setAttribute("uname", u);res.sendRedirect("wel");}else{//不合法,跳转到Loginres.sendRedirect("login");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try {if(rs!=null) rs.close();if(sm!=null) sm.close();if(ct!=null) ct.close();} catch (Exception e2) {// TODO: handle exceptione2.printStackTrace();}}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req, res);}
}
//欢迎界面
package com.tingwei;
import javax.servlet.http.*;import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
public class Wel extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){//得到sessionHttpSession hs=req.getSession();String myName=(String)hs.getAttribute("uname");String name="";String password="";PrintWriter pw=null;Connection ct=null;PreparedStatement ps=null;ResultSet rs=null;String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";String user="sa";String passwd="tingwei";String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";try {//判断if(myName==null){//如果session中没有用户信息,再看看cookie中有没有Cookie [] allCookies=req.getCookies();int i=0;//如果allCookies不为空if(allCookies!=null){//从中取出cookiefor(i=0;i<allCookies.length;i++){//依次取出Cookie tmp=allCookies[i];if(tmp.getName().equals("myname")){//得到cookie信息name=tmp.getValue();}else if(tmp.getName().equals("pass")){password=tmp.getValue();}}//forif(!name.equals("")&&!password.equals("")){res.sendRedirect("logincl?username="+name+"&passwd="+password);}}//if cookie//返回登录界面res.sendRedirect("login?info=error1");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}//===分页的功能===int pageSize=3;int pageNow=1;//希望显示第几条记录int rowCount=0;//共有几条记录(查表)int pageCount=0;//共有几页(计算出来)//动态的接收pageNowString sPageNow=req.getParameter("pageNowOk");if(sPageNow!=null){//用户首次进入wel页面pageNow=Integer.parseInt(sPageNow);}//得到从logincl传递的用户名String u=req.getParameter("uname");//得到从logincl传递的密码String p=req.getParameter("upass");try {//中文乱码处理res.setContentType("text/html;charset=gbk");pw=res.getWriter();   pw.println("<body><center>");pw.println("<img src=imgs/image2.jpg width=200><br>");pw.println("welcome,hello "+u+" pass="+p);pw.println("<br><a href=login>返回重新登录</a>");//得到rowCount//连接接数据库,三部曲Class.forName(driver);//得到连接ct=DriverManager.getConnection(url,user,passwd);//创建一个prepareStatementps=ct.prepareStatement("select count(*) from users");rs=ps.executeQuery(); //执行得到结果if(rs.next()){rowCount=rs.getInt(1);}//计算pageCountif(rowCount%pageSize==0){pageCount=rowCount/pageSize;}else{pageCount=rowCount/pageSize+1;}ps=ct.prepareStatement("select top "+pageSize+" * from users where userId not in(select top "+pageSize*(pageNow-1)+" userId from users)");//给?赋值rs=ps.executeQuery();pw.println("<table border=1");pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");while(rs.next()){pw.println("<tr>");pw.println("<td>"+rs.getInt(1)+"</td>");pw.println("<td>"+rs.getString(2)+"</td>");pw.println("<td>"+rs.getString(3)+"</td>");pw.println("<td>"+rs.getString(4)+"</td>");pw.println("<td>"+rs.getString(5)+"</td>");pw.println("</tr>");}pw.println("</table>");if(pageNow!=1)//上一页pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");//显示超链接for(int i=pageNow;i<=pageNow+4;i++){pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");}//下一页if(pageNow!=pageCount)pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");pw.println("</center></body>");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req, res);}
}

cookie和session的比较

1.cookie存在客户端,session存在服务器端
2.cookie安全性低,seesion服务器端内存很难查到
3.cookie通过网络在客户端与服务器端传输,而session保存在服务器端不需要传输
4.cookie的生命周期从创建开始,session的生命周期是无操作开始计时,关机session生命周期结束,cookie没有影响。

网站框架的改进

留心的同学会发现,我们将界面和业务逻辑放在一起了,这是编程的忌讳,因为两者的改动相互影响。
1.LoginCl.java和Wel.java都去操作了数据库,出现重复代码
2.整个框架没有清晰的层次结构
3.代码看起来很乱,可读性差,维护难。

改进办法是,将view和logical分层;将重复代码封装到类中

为什么在UserBeanCl中,对于分页显示方法返回的是ArrayList集合,而不是直接返回ResultSet?
1.如果返回ResultSet,那么我们在使用ResultSet时,是不能关闭该ResultSet相互关联的数据库连接等资源,从而造成资源浪费。
2.如果返回ResultSet,我们只能使用rs.getInt(?)这样的方法来得到结果,代码可读性不好,维护不方便

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--  --><web-app><display-name>Welcome to Tomcat</display-name><description>Welcome to Tomcat</description><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>login</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.Login</servlet-class></servlet><servlet-mapping><servlet-name>login</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/login</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>wel</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.Wel</servlet-class></servlet><servlet-mapping><servlet-name>wel</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/wel</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>logincl</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.LoginCl</servlet-class></servlet><servlet-mapping><servlet-name>logincl</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/logincl</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>cookietest1</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.CookieTest1</servlet-class></servlet><servlet-mapping><servlet-name>cookietest1</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/cookietest1</url-pattern></servlet-mapping><!--每写一个servlet都要部署--><servlet><!--给你的servlet取名--><servlet-name>cookietest2</servlet-name><!--指明servlet的路径,包名+类名--><servlet-class>com.tingwei.CookieTest2</servlet-class></servlet><servlet-mapping><servlet-name>cookietest2</servlet-name><!--在浏览器中输入的访问该servlet的url,任意的--><url-pattern>/cookietest2</url-pattern></servlet-mapping></web-app>
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){try {//中文乱码处理res.setContentType("text/html;charset=gbk");PrintWriter pw=res.getWriter();//返回登录界面pw.println("<html>");pw.println("<body>");pw.println("<img src=imgs/image2.jpg width=200><br>");pw.println("<h>登录界面</h>");pw.println("<form action=logincl method=post>");pw.println("用户名:<input type=text name=username><br>");pw.println("密码:<input type=password name=passwd><br>");pw.println("<input type=checkbox name=keep value=2>两周内不在重新登录<br>");pw.println("<input type=submit value=login><br>");pw.println("</form>");pw.println("</body>");pw.println("</html>");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req, res);}
}
//用户验证Servlet
package com.tingwei;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){ //业务逻辑try {//接收用户名和密码String u=req.getParameter("username");String p=req.getParameter("passwd");//调用UserBeanCl,1.创建对象,2.使用方法UserBeanCl ubc=new UserBeanCl();//验证if(ubc.checkUser(u, p)){//合法用户String keep=req.getParameter("keep");//将用户名和密码保存在客户端cookieif(keep!=null){Cookie name=new Cookie("myname",u);Cookie pass=new Cookie("mypasswd",p);//设置时间name.setMaxAge(14*24*3600);pass.setMaxAge(14*24*3600);//回写到客户端res.addCookie(name);res.addCookie(pass);}//将验证成功的信息写入sessionHttpSession hs=req.getSession(true);//修改session的存在时间 单位shs.setMaxInactiveInterval(30);hs.setAttribute("uname", u);res.sendRedirect("wel");}else{//不合法,跳转到Loginres.sendRedirect("login");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req, res);}
}
package com.tingwei;
import javax.servlet.http.*;import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class Wel extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){//得到sessionHttpSession hs=req.getSession();String myName=(String)hs.getAttribute("uname");String name="";String password="";PrintWriter pw=null;Connection ct=null;PreparedStatement ps=null;ResultSet rs=null;String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";String user="sa";String passwd="tingwei";String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";try {//判断if(myName==null){//如果session中没有用户信息,再看看cookie中有没有Cookie [] allCookies=req.getCookies();int i=0;//如果allCookies不为空if(allCookies!=null){//从中取出cookiefor(i=0;i<allCookies.length;i++){//依次取出Cookie tmp=allCookies[i];if(tmp.getName().equals("myname")){//得到cookie信息name=tmp.getValue();}else if(tmp.getName().equals("pass")){password=tmp.getValue();}}//forif(!name.equals("")&&!password.equals("")){res.sendRedirect("logincl?username="+name+"&passwd="+password);}}//if cookie//返回登录界面res.sendRedirect("login?info=error1");}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}//===分页的功能===int pageSize=3;int pageNow=1;//希望显示第几条记录//动态的接收pageNowString sPageNow=req.getParameter("pageNowOk");if(sPageNow!=null){//用户首次进入wel页面pageNow=Integer.parseInt(sPageNow);}//调用UserBeanClUserBeanCl ubc=new UserBeanCl();ArrayList al=ubc.getResultByPage(pageNow, pageSize);//得到从logincl传递的用户名String u=req.getParameter("uname");//得到从logincl传递的密码String p=req.getParameter("upass");try {//中文乱码处理res.setContentType("text/html;charset=gbk");pw=res.getWriter();    pw.println("<body><center>");pw.println("<img src=imgs/image2.jpg width=200><br>");pw.println("welcome,hello "+u+" pass="+p);pw.println("<br><a href=login>返回重新登录</a>");pw.println("<table border=1");pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>email</th><th>grade</th></tr>");for(int i=0;i<al.size();i++){UserBean ub=(UserBean)al.get(i);pw.println("<tr>");pw.println("<td>"+ub.getUserId()+"</td>");pw.println("<td>"+ub.getUserName()+"</td>");pw.println("<td>"+ub.getPasswd()+"</td>");pw.println("<td>"+ub.getMial()+"</td>");pw.println("<td>"+ub.getGrade()+"</td>");pw.println("</tr>");}pw.println("</table>");if(pageNow!=1)//上一页pw.println("<a href=wel?pageNowOk="+(pageNow-1)+">上一页</a>");//显示超链接for(int i=pageNow;i<=pageNow+4;i++){pw.println("<a href=wel?pageNowOk="+i+">"+i+"</a>");}int pageCount=ubc.getPageCount();//下一页if(pageNow!=pageCount)pw.println("<a href=wel?pageNowOk="+(pageNow+1)+">下一页</a>");pw.println("</center></body>");} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}public void doPost(HttpServletRequest req,HttpServletResponse res){this.doGet(req, res);}
}
//这是一个UserBean,和User表映射
//它的一个对象映射user表的一条记录
//数据
package com.tingwei;public class UserBean {private int userId;private String userName;private String passwd;private String mial;private int grade;public int getUserId() {return userId;}public void setUserId(int userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}public String getMial() {return mial;}public void setMial(String mial) {this.mial = mial;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}}
//从数据库得到连接
package com.tingwei;
import java.sql.*;
public class ConnDB {private Connection  ct=null;public Connection getConn(){try {String url="jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb";String user="sa";String passwd="tingwei";String driver="com.microsoft.jdbc.sqlserver.SQLServerDriver";//得到rowCount//连接接数据库,三部曲Class.forName(driver);//得到连接ct=DriverManager.getConnection(url,user,passwd);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}return ct;}
}
//这是一个处理类(处理Users表)<--->操作userBean
//业务逻辑在这
package com.tingwei;
import java.sql.*;
import java.util.ArrayList;
public class UserBeanCl {//业务逻辑private Connection ct=null;private PreparedStatement ps=null;private ResultSet rs=null;private int pageCount=0;//共有几页(计算得到)//验证用户public boolean checkUser(String u,String p){boolean b=false;try {//得到连接ConnDB cd=new ConnDB();ct=cd.getConn();ps=ct.prepareStatement("select top 1 passwd from users where username=?");ps.setString(1, u);rs=ps.executeQuery();if(rs.next()){String dbPasswd=rs.getString(1);if(dbPasswd.equals(p)){b=true;}}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{//用完数据库后记得关闭,可以写一个函数来关this.close();}return b;}//关闭数据库public void close(){try {if(rs!=null)rs.close();if(ps!=null)ps.close();if(ct!=null)ct.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}//分页显示public ArrayList getResultByPage(int pageNow,int pageSize){ArrayList al=new ArrayList();try {int rowCount=0;//共有几条记录(查表)int pageCount=0;//共有几页(计算出来)//得到rowCountConnDB cd=new ConnDB();ct=cd.getConn();//创建一个prepareStatementps=ct.prepareStatement("select count(*) from users");rs=ps.executeQuery(); //执行得到结果if(rs.next()){rowCount=rs.getInt(1);}//计算pageCountif(rowCount%pageSize==0){pageCount=rowCount/pageSize;}else{pageCount=rowCount/pageSize+1;}ps=ct.prepareStatement("select top "+pageSize+" * from users where userId not in(select top "+pageSize*(pageNow-1)+" userId from users)");//给?赋值rs=ps.executeQuery();while(rs.next()){//将rs中的每一条记录分装到UserBean ub中UserBean ub=new UserBean();ub.setUserId(rs.getInt(1));ub.setUserName(rs.getString(2));ub.setPasswd(rs.getString(3));ub.setMial(rs.getString(4));ub.setGrade(rs.getInt(5));//将ub放入到ArrayList中al.add(ub);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{this.close();}return al;}public int getPageCount(){return this.pageCount;}
}

需要用到的sql语句

alter table users add NewColumn nchar(5) null --新增列alter table users drop column NewColumn  --删除列alter table users alter column NewColumn nvarchar(10)--修改字段属性exec sp_rename 'users.usernaem','username'--修改字段名exec sp_help users--查看指定的表结构drop table users--删除数据表exec sp_rename 'users','users2'--修改表名select top 1 passwd from users where username='admin'--查找符合用户名的一个密码

事实上可以单独写一个类来处理分页,在wel页面中调用DividePage类的方法,就更进一步讲界面与逻辑处理相分离了。

Servlet教程第5讲笔记相关推荐

  1. CG基础教程-陈惟老师十二讲笔记

    转自 麽洋TinyOcean:http://www.douban.com/people/Tinyocean/notes?start=50&type=note 因为看了陈惟十二讲视频没有课件,边 ...

  2. react render没更新_web前端教程分享React学习笔记(一)

    web前端教程分享React学习笔记(一),React的起源和发展:React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写 ...

  3. 信息系统项目管理师教程考点精讲之项目成本管理

    希赛小编为大家整理了几篇信息系统项目管理师教程考点精讲,以下是有关第八章项目成本管理的内容. 可控和不可控的成本应该分别估算和预算. 在某些项目上,特别是小型项目,成本估算和预算可被视为一个过程.项目 ...

  4. Python编程系列教程第12讲——属性和方法

    视频地址:http://v.youku.com/v_show/id_XNTgyOTg4NjQ4.html 普及网络安全知识,推动信息技术发展. 为祖国的网络安全撑起一片蓝天,为网络安全爱好者构建一方家 ...

  5. Python编程系列教程第16讲——拷贝自身到系统目录

    分享知识,分享快乐,收获友谊,收获财富! 大家好,我是数字雨,QQ:798033502 http://itbook.taobao.com/ 今天给大家带来的教程是<Python编程系列教程第16 ...

  6. 《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立

    原文:<ArcGIS Engine+C#实例开发教程>第一讲桌面GIS应用程序框架的建立 摘要:本讲主要是使用MapControl.PageLayoutControl.ToolbarCon ...

  7. 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening

     深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening 主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通 ...

  8. 深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器

     深度学习入门教程UFLDL学习实验笔记一:稀疏自编码器 UFLDL即(unsupervised feature learning & deep learning).这是斯坦福网站上的一篇 ...

  9. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

  10. python3入门与进阶笔记_16_变量进阶 — 黑马程序员《Python入门教程完整版》笔记...

    变量进阶(理解) - 黑马程序员<Python入门教程完整版>笔记 目标变量的引用 可变和不可变类型 局部变量和全局变量 01. 变量的引用变量 和 数据 都是保存在 内存 中的 在 Py ...

最新文章

  1. Docker安全性支持(使用Cgroups机制实现容器资源控制)
  2. WPF MeshGeometry3D中的Normals和TextureCoordinates属性
  3. SugarCRM 主表-自定义字段
  4. Docker Review - Docker 部署 Spring Boot 项目
  5. 【NLP】发现一篇专门吐槽 NLP 内卷现状的 ACL 论文 ...
  6. Go语言讲解深拷贝与浅拷贝
  7. servlet-新建maven报错:web.xml is missing and <failOnMissingWebXml> is set to true
  8. LeetCode 734. 句子相似性(哈希)
  9. mysql 内连接条件_Mysql内连接有OR条件?
  10. Python定时任务框架APScheduler
  11. POJ 1755 Triathlon(半平面交)
  12. 方舟生存进化秘籍大全
  13. 生成pdf设置中文字体出错 \simsun.ttc' with 'Identity-H' is not recognized或者type of font{0} is not recognized
  14. WPS桌面右键新建菜单缺少新建文档入口
  15. php 管理员界面源码,ThinkPHP通用后台管理系统TP-Admin
  16. 【日语】五十音图-一个好用的日语五十音图记忆方法
  17. Java集合的subList方法分析
  18. 【2072】歌手大奖赛
  19. 病毒木马查杀实战第014篇:U盘病毒之手动查杀
  20. 稻城亚丁6日游之第五天(新都桥-丹巴)

热门文章

  1. 【Webcam设计】MJPG编码和AVI封装
  2. Symbols andSymbol Tables
  3. linux程序执行时内存情况
  4. leetcode string 类
  5. android反调试之父子调试
  6. Asp.net core WebApi 使用Swagger生成帮助页实例
  7. oracle_dblink配置
  8. Linux系统常用命令(一)
  9. Archlinux GRUB2 配置
  10. 学习FFmpeg API – 解码视频