假期就要过去了,蜗牛也得滚回学校了。
这几天蜗牛沉迷于游戏了,没怎么好好看这个课件,不过刷了两遍之后,大体的代码也能看懂了,贴出来,顺便做做注释。
ps:这个课件是韩顺平老师的servlet。
首先是数据库:
drop database if exists spdb1;
create database spdb1;
use spdb1;
项目用的是sqlserver,因为太大了蜗牛没有装,就用mysql吧,指令略有不同。
上面:
如果有这个数据库就删除,再新建数据库,打开数据库。
另外可以用show databases查看数据库,show tables 查看数据库中的表。
一定要注意:mysql的操作是要加末尾的分号的。
create table users
(
userId int auto_increment primary key,
username varchar(20),
passwd varchar(20),
email varchar(30),
grade varchar(20)
);
建表,userId是自增长的主键。
下面插入数据:
下面是插入条目的语言,我测试的mysql的语句是:
insert into users (属性,属性,属性)values
(值,值,值);
这样的格式
insert into users (username,passwd,email,grade)values
('admin','admin','admin@sohu.com',1);
insert into users(username,passwd,email,grade) values
('shunping','shunping','shunping@sohu.com', 1);
insert into users(username,passwd,email,grade) values
('tester1','tester1','tester1@sohu.com',5);
insert into users(username,passwd,email,grade) values
('tester2','tester2','tester2@sohu.com',5);
insert into users (username,passwd,email,grade)values
('tester3','tester3','tester3@sohu.com',5);
insert into users(username,passwd,email,grade) values
('tester4','tester4','tester4@sohu.com',5);
insert into users(username,passwd,email,grade) values
('tester5','tester5','tester5@sohu.com',5);
insert into users(username,passwd,email,grade) values
('tester6','tester6','tester6@sohu.com',5);
insert into users (username,passwd,email,grade)values
('tester7','tester7','tester7@sohu.com',5);
insert into users(username,passwd,email,grade) values
('tester8','tester8','tester8@sohu.com',5);
insert into users(username,passwd,email,grade) values
('tester9','tester9','tester9@sohu.com',5);
insert into users (username,passwd,email,grade)values('tester10','tester10','tester10@sohu.com',5);
insert into users (username,passwd,email,grade)values('tester11','tester11','tester11@sohu.com',5);
insert into users(username,passwd,email,grade) values('tester12','tester12','tester12@sohu.com',5);
insert into users(username,passwd,email,grade) values('tester13','tester13','tester13@sohu.com',5);
insert into users (username,passwd,email,grade)values('tester14','tester14','tester14@sohu.com',5);
最后显示出所有的数据:
select * from users;
可以将上面的代码合成在一个sql脚本中(当然记得去掉注释),之后利用
source 文件路径
的方法引入这这个脚本。
这样的话数据库就算是建好了。
下面是具体的代码和注释:
注意这个项目是按着mvc修改过的:
//从数据库中得到连接
package com.tsinghua;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class ConnDB {
private Connection ct=null;
public Connection getConn(){
//这是使用jdbc的方式来连接数据库
try {
//1加载驱动0.02s*10000*30
//下面这个是用sqlserver的驱动连接,可以自己换成mysql
//Class.forName("com.mysql.jdbc.Driver");
//ct=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/select_test"
// , "root" , "这里是密码");
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
//得到连接
ct=DriverManager.getConnection("jdbc:microsoft:sqlserver:
//127.0.0.1:1433;databaseName=spdb1","root","这里是密码");
}
catch (Exception ex) {
ex.printStackTrace();
}
//这里,如果有调用这个函数的,就返回一个和数据库连接好的连接。这应该就是传说中的业务bean。
//其实就是返回了一个连接而已,之后JDBC操作数据库的是在使用的时候。
return ct;
/*使用数据源连接池的方式连接数据库
try {
//创建一个上下文环境
Context con=new javax.naming.InitialContext();
//通过con得到数据源
DataSource ds=(DataSource) con.lookup("java:comp/env/shunping");
ct=ds.getConnection();
System.out.println ("使用连接池的方式");
}
catch (Exception ex) {
ex.printStackTrace();
}
return ct;*/
}
}
测试Cookie。
Cookie是保存在客户的电脑上面的。服务器有需求的时候可以去访问。
package com.tsinghua;
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. 现在服务器端创建一个cookie
//其实cookie的结构就是一张表。color1相当于是key,后边的red相当是value
Cookie myCookie=new Cookie("color1","red");
//2. 该cookie存在的时间
myCookie.setMaxAge(30);
//如果你不设置存在时间,那么该cookie将不会保存
//3. 将该cookie写回到客户端
res.addCookie(myCookie);
pw.println("已经创建了cookie");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
使用cookie:
//如何读取cookie案例
package com.tsinghua;
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是每次用的时候读到服务器,用完了回写到客户端这样的。(蜗牛的理解)
//多条cookie保存在一个cookie文件中
Cookie [] allCookies=req.getCookies();
int i=0;
//如果allCookies不为空...
if(allCookies!=null){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
Cookie temp=allCookies[i];
//cookie使用getName()函数取出那个“key”。
//cookie就是一张“key-value”的表。
if(temp.getName().equals("color1")){
//得到cookie的值
String val=temp.getValue();
pw.println ("color1="+val);
break;
}
}
if(allCookies.length==i){
pw.println("cookie 过期");
}
}else{
pw.println ("不存在color1这个cookie/或是过期了!");
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
删除一条cookie:
//如何删除cookie案例
package com.tsinghua;
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){
//从中取出cookie
for(i=0;i<allCookies.length;i++){
//依次取出
//你可以想想一下这个操作,这个操作过后,allcookie就是一个N行两列的表格。
Cookie temp=allCookies[i];
if(temp.getName().equals("color")){
//将该cookie删除
//设置“年龄”为0的效果就是删除。见文档。(设置为0好像是不保存的意思)
temp.setMaxAge(0);
pw.println("删除了color这个cookie");
break;
}
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}