实战演练,数据库原理案例,讲解绝对路径,看了都会,一懂百懂(资源,代码全部提供),看了不懂,留言必回

首先,说声抱歉,之前忙着另外的事情,没时间更新

本次学习目标:学会数据库连接的基本操作

 

1、重点:分两个案例讲解知识点:在eclipse上进行演示两个案例,分别为直接再WebContent目录下进行登录和在WebContent目录下新建子文件jsp的登录,通过两个案例的区别讲解pathPath的作用。

2、简单讲解数据库的操作,在mysql和Navicat下简单的操作。

3、讲解上次(6)遗漏的中文乱码怎么处理

4.实现逻辑:

前提:先连接数据库

1. 通过login.jsp从浏览器中获得登录界面

2. 在登录界面中输入账号和密码, login.jsp的action通过映射地址(login)传给     login.Servlet.java,让request获取用户名和密码。

3.在UserDao.java中执行sql语句,并把用户名和密码,放到结果集中。

4.结果集中有数据就通过getRequestDispatcher转发,跳转到Success.jsp,没有数据就跳转到Failed.jsp

正文:

安装数据库:

mysql数据库和navicat,端口号一般是3306,只是我安装mysql数据库的是3307,只有你的端口号,密码,Usernam,Host与你安装的数据库mysql的一样,点击测试连接才会显示Connection successful,这样子才可以使navicat与mysql数据库联系起来。就完成第一步了。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

将数据库的数据建立起来:navicat为例子讲解,复制连接打开网址,按步骤进行操作,前提你已经安装了navicat和mysql,说明只需要username和password这两个字段,userid不需要。按照下面的博主进行操作就行。

数据库的博主博客:

https://blog.csdn.net/weixin_39731623/article/details/113901278?spm=1001.2014.3001.5506

 

第二步:分析代码部分(案例一)

先看一下我解释的案例1创建项目的基本目录,圈住的是数据库驱动jar包,很重要,没他运行不了。

特别注意的是,这个驱动包一定要放在lib目录下,不然没用,一定要放在lib目录下,不然没用,一定要放在lib目录下,不然没用,重要的事情说三遍。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_10,color_FFFFFF,t_70,g_se,x_16

 

 

DBDao.java代码

你需要修改的:(标注红色的)

 private static String USER = "root";
    private static String PASSWORD = "123456";
    private static String DB_URL = "jdbc:mysql://localhost:3307/my12306";

端口号一般是3306,只是我起的是3307,只有你的端口号,密码,Usernam,Host与你安装的数据库mysql的一样点击测试连接,才会显示Connection successful,这样子才可以使navicat与mysql数据库联系起来。

 

 

package com.mc.dao;



import java.sql.*;
/**
 * url:
 * 	 jdbc:协议名
 * 	 mysql:数据库
 * 	 localhost:ip地址
 * 	 3306:端口号
 * 	 my12306:数据库名称
 * user:用户名
 * password:密码
 */
public class DBDao {
	
    private static String USER = "root";
    private static String PASSWORD = "123456";
    private static String DB_URL = "jdbc:mysql://localhost:3307/my12306";
    private static String DB_DRIVER = "com.mysql.jdbc.Driver";
//  private static String SQL = "";
    private static Connection connection = null;

    //连接数据库
    public static Connection getConnection(){

        try {
        	
        	//1、加载数据库驱动
            Class.forName(DB_DRIVER);
            //2、获取数据库连接
            connection = DriverManager.getConnection(DB_URL, USER, PASSWORD);
        } catch (Exception e) {
            System.out.println("数据库连接异常");
            e.printStackTrace();
        }
        
        //调用此方法返回数据库连接对象
        return connection;
    }
    public  static void closeConnection(Connection connection){

                    if(connection != null){
                        try {
                        	// 关闭数据库连接
                            connection.close(); 
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                }
    }

 剩下的代码都不用修改:

 UserDao.java代码

此处修改代码为:

红色标记处是你自己取名的数据表,必须改。

        SQL = "select * from login where username = ? and password = ?";

 

package com.mc.dao;



import java.sql.*;
import java.sql.ResultSet;

import com.mc.user.User;




public class UserDao {

    User user = null;
    private String SQL =""; 
    public User login(String username, String password){
    	//3、定义sql语句
        SQL = "select * from login where username = ? and password = ?";
        Connection connection = null;
        PreparedStatement pstmt = null;
        try {
        	//调用DBDao中的getConnection返回的数据库连接对象
            connection = DBDao.getConnection();
           //4、 获取操作对象preparedStament
            pstmt = (PreparedStatement) connection.prepareStatement(SQL);
            
            System.out.println("我在UserDao.java这里,自己查询数据库是否有匹配的用户名:"+username);
            System.out.println("我在UserDao.java这里,自己查询数据库是否有匹配的密码:"+password);

           //4.1 给占位符赋值 
            pstmt.setString(1, username);
            pstmt.setString(2, password);
          //5、执行sql语句,并将结果放入结果集中返回结果集对象--ResultSet
            ResultSet rSet = (ResultSet) pstmt.executeQuery();//得到数据库的查询结果,一个数据集
            //6、判断结果集是否有效,结果集对象中有数据就获取
            if(rSet.next()){
                user = new User();
                user.setUsername(rSet.getString("username"));
                user.setPassword(rSet.getString("password"));
            }
            connection.close();
            pstmt.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }finally{
        //无论如何finally语句块都会执行:一般用来释放资源的
			
        //			7、释放资源:先开的后关,后开的先关
            DBDao.closeConnection(connection);
        }
        return user;
    }

}

LoginServlet.java代码

package com.mc.login.servlet;



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

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 com.mc.dao.UserDao;
import com.mc.user.User;


@WebServlet("/login")
public class LoginServlet extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    	
      /* 必须要有这句话,否则当你输入中文用户名的时候就会获取乱码,
    	下面的代码就无法识别你所输入的用户名(username)
    	这就是我要补充之前遗漏的(6)乱码问题。
    	通俗讲:就是浏览器请求数据时,tomcat接受到的数据不是UTF-8,因此我们要转换为UTF-8
    	*
    	*
    	*/
      //获取从浏览器得到的数据,并转换为UTF-8的形式(防止请求乱码)浏览器-----》服务器
    	request.setCharacterEncoding("UTF-8");




	   //设置向浏览器发送信息的编码格式(防止响应乱码)服务器---------》浏览器
    	//服务器响应的编码格式,防止出现中文乱码,这里提供了两种方法    	
        response.setCharacterEncoding("UTF-8");//法一
       // response.setContentType("text/html;charset=utf-8");//法二
        
        
        
        
        //获取用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        //查看有没有获取到username 和password
        System.out.println("成功从用户登录界面(login.jsp)获取用户名:"+username);
        System.out.println("成功从用户登录界面(login.jsp)获取密码:"+password);
        //获取UserDao实例
        UserDao userDao = new UserDao();

        User user = userDao.login(username,password);
        // 判断user是否为空
        if(user != null){
        // 转发到LoginSuccess.jsp页面
        //  getRequestDispatcher()是请求转发
        	
        	System.out.println("数据库连接成功你就到这吧");
    		    
               
        	//response.getWriter().append("登录成功");
        	request.getRequestDispatcher("Success.jsp").forward(request, response);
        }else{
        // 登录失败
           request.getRequestDispatcher("Failed.jsp").forward(request, response);
                }
        }

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

}

User.java代码

package com.mc.user;



/*
 * 用户登录类,定义基本属性用户名和密码
 */

public class User {

    private String username;

    private String password;

    public String getUsername(){
        return this.username;
    }
    public void setUsername(String username){
        this.username = username;
    }

    public String getPassword(){
        return this.password;
    }
    public void setPassword(String password){
        this.password = password;
    }
}

login.jsp代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登录界面</title>
   
  </head>

  <body>
     <center>
         <form method="post" action="login">
             用户名:<input type="text" name="username" ><br>
             密码:<input type="password" name="password" ><br>
           
                 <br>
              <input type="submit" value="登录">
            
        </form> 
    </center>
  </body>
</html>

登录Success代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登陆成功</title>

   

  </head>

  <body>
      <h1> 你终于成功登录了,好棒! </h1><br>
  </body>
</html>

登录Failed.jap代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登录失败</title>


  </head>

  <body>
        登录失败,请返回重新登录 <br>
        <!--注意此处的action中的路径写法-->
        <form action="./login.jsp">
        <input type = "submit" value = "返回">
        </form>

  </body>
</html>

直接运行login.jsp页面就可以了

 

效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 登录失败:因为我的数据库根本就没有小明这个人

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 控制台没有出现中文乱码

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_17,color_FFFFFF,t_70,g_se,x_16

 

 

 

 

案例二:代码和上面的都是一样的,几乎没有任何改变,只是login.jsp的代码不一样了,只不过这里的login.jsp,我放在lWebcontent的jsp子文件中。按照原来的login.jsp代码根本就运行不了.出现资源找不到。

分两步来:先演示直接粘贴代码,看看会出现什么效果:

粘贴复制之后点击运行login.jsp,写入用户名和登录密码

效果图:看见没有

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 为什么会出现这样的问题?

原因在于login.jsp它运行提交之后找不到他映射的loginservlet地址,,找不到是因为它跳不出jsp这个子文件夹,多了上图的jsp路径,当初我写的第一篇文章讲过jsp和html要放在WebContent目录下,映射的的地址才会自动跳转到相应的Servlet类中

那现在怎么办呢?

这就是我要讲的知识点,

把上面的代码login.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>登录界面</title>
   
  </head>

  <body>
     <center>
         <form method="post" action="login">
             用户名:<input type="text" name="username" ><br>
             密码:<input type="password" name="password" ><br>
           
                 <br>
            <input type="submit" value="登录">
            
        </form> 
    </center>
  </body>
</html>

 粘贴复制之后点击运行login.jsp,写入用户名和登录密码

 效果图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

 

好开心,为什么呢?

看图说话:圈住的两部分是在原来login.jsp中新增的代码

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 圈住这两段代码的意思是:其实就是配置绝对路径

首先我们得来了解什么是BathPath?

   Basepath其实就是提供了一个默认的绝对路径,相当于:localhost:8080/项目名/,让我们在写路径的时候不再为路径错误导致的404烦恼。

再来看看配置之后圈住的部分:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

 没有配置圈住的部分:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAd2VpeGluXzQzNjE5NTY0,size_20,color_FFFFFF,t_70,g_se,x_16

配置之后明显就是跳出了jsp这个子文件夹

讲解这个虽然很简单,但是却非常有用,以后我们搭建项目的时候总不能都放在WebContent目录下再去找Servlet类吧,创建文件夹分好类,利用好绝对路径这种方法才是王道。

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值