蜗牛最近在学javaweb,据说这是一个很难的技术,蜗牛在门外饶了大半年的圈子,终于稍微进来一点点了。
首先,蜗牛也很奇怪,为啥连接数据库这个看起来应该很难的东西,几行代码就搞清楚了。
另外,真的,学好sql语句才是王道啊。
我是看韩顺平老师的教程学会的,下面的代码也是韩顺平老师的。不过韩老师用的是sqlserver,我用的是mysql,换了一下里面的内容。
ps:韩顺平老师的servlet和jsp真的是很好的教程。
这里只是写上代码,防止自己忘记了。
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
public class Login extends HttpServlet {
//处理get请求
//req: 用于获得客户端(浏览器)的信息
//res: 用于向客户端(浏览器)返回信息
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
try {
//中文乱码,虽然我加了,中文还是会乱码
res.setContentType("text/html;charset=gbk");
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("");
pw.println("");
//这里面action是提交到哪个页面,其实是吧信息封装到request之中了。
pw.println("登录界面
");
pw.println(");
pw.println("用户名:
");
pw.println("密码:
");
pw.println("
");
pw.println("");
pw.println("");
pw.println("");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//处理post请求
//req: 用于获得客户端(浏览器)的信息
//res: 用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
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加载驱动,这个是连接mysql的驱动。
Class.forName("com.mysql.jdbc.Driver");
//得到连接,这三个参数是url,用户,密码,安装mysql的时候奥配置用户名和密码
ct=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/spdb1"
, "root" , "1123");
}
catch (Exception ex) {
ex.printStackTrace();
}
System.out.println ("连接完成");
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;*/
}
}
验证用户的下面这个代码其实没什么可讲的,就是新建了一个bean类,去调用其中的方法。
ps:里面有很多没用的代码,为了以后要用先不删除
//用户验证servlet
//登录界面
package com.tsinghua;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;
public class LoginCl extends HttpServlet {
//重写init函数
public void init(){
try {
System.out.println ("inti 被调用");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//重写destroy函数
public void destroy(){
try {
System.out.println ("destroy 被调用");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//处理get请求
//req: 用于获得客户端(浏览器)的信息
//res: 用于向客户端(浏览器)返回信息
public void doGet(HttpServletRequest req,HttpServletResponse res){
//业务逻辑
Connection ct=null;
Statement sm=null;
ResultSet rs=null;
try {
//接受用户名和密码
String u=req.getParameter("usrename");
String p=req.getParameter("passwd");
//调用UserBeanCl,1.创建一个对象
UserBeanCl ubc=new UserBeanCl();
//2.使用UserBeanCl的方法
if(ubc.checkUser(u,p)){
try {
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("admin");
}
catch (Exception ex) {
ex.printStackTrace();
}
}else{
try {
PrintWriter pw=res.getWriter();
//返回登录界面
pw.println("BUPIPEI");
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(sm!=null){
sm.close();
}
if(ct!=null){
ct.close();
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}
//处理post请求
//req: 用于获得客户端(浏览器)的信息
//res: 用于向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req,res);
}
}
一个Bean代码。因为是按着mvc的形式写的于是将功能抽象成了Bean。
//这是一个处理类(处理users表)<--->操作UserBean
//业务逻辑在这里
package com.tsinghua;
import java.sql.*;
import java.util.*;
public class UserBeanCl {
//业务逻辑
private Connection ct=null;
private Statement ps=null;
private ResultSet rs=null;
//验证用户
public boolean checkUser(String u,String p){
boolean b=false;
try {
//得到连接,下面的控制台输出都是调试的时候用的
ConnDB cd=new ConnDB();
System.out.println ("连接完成userBeancl");
ct=cd.getConn();
System.out.println ("又回来了");
ps=ct.createStatement();
System.out.println ("查询有问题");
//注意sql语句一定要写对。
rs=ps.executeQuery("select passwd from users where username = 'admin'");
System.out.println (rs);
if(rs.next()){
String dbPasswd=rs.getString(1);
System.out.println (dbPasswd);
if(dbPasswd.equals(p)){
b=true;
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}finally{
this.close();
}
return b;
}
//关闭资源
public void close(){
try {
if(rs!=null){
rs.close();
rs=null;
}
if(ps!=null){
ps.close();
ps=null;
}
if(ct!=null){
ct.close();
ct=null;
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}