JSP+javabean+servlet


       最近老師讓我們給大二的學弟學妹們講解jsp+javabean+servlet,很頭疼,不知道從哪里下手,感覺自己好像也不是太懂得樣子哈哈哈,那就寫一篇博文來發表一下自己的看法,順便理清思路,不能被大二的學弟學妹嘲笑,對吧!

       那么什么是servlet?

      Servlet 是在服務器上運行的小程序,用來動態的顯示 Web 內容。這個流程大概就是

  1. 客戶端發送請求至服務器端;
  2. 服務器將請求信息發送至 Servlet;
  3. Servlet 生成響應內容並將其傳給服務器。響應內容動態生成,通常取決於客戶端的請求;
  4. 服務器將響應返回給客戶端。

      什么是Javabean呢?

     說白了就是類而已,只不過現在改了一個名字而已,之前寫的時候都是一堆類混在一起,現在就是把他們拆開,按照不同的功能放在一起,一般我們用四個包來區分。

    

  1.       com.Bean包:這個包里面放的都是一些屬性類,一般數據庫里面有什么表,相應的就要有什么bean,當然表里面的數據在bean里面也要全有,比如有一個Student表,表里面有id,name那么在該包下就要建立相應的Studentbean(Studentbean只是一個名字,你自己可以隨便取)類,有私有變量id和name,與之對應的get和set函數。
  2.       com.Dao包:這個包就是放一些類,類里面的函數就是用來對數據庫進行操作的,例如增刪改查。
  3.       com.DBUtil:這包里面放的就是用來連接數據庫的函數,在Dao函數里面直接調用這個就能連接數據庫,代碼復用。
  4.       com.Servlet:這個包放置的就是servlet類,用來網頁與后台數據的交互,下面講解一個簡單的登錄界面JSP+javabean+Servlet.

      

讓我們用程序來實現一下吧.這樣更能很好的理解他到底是干嘛的。

 

一:首先我們需要建立一個登錄界面,很簡單只需要一個用戶名username和password的文本輸入框就可以了。

Login.jsp

<%@ page language="java" isErrorPage="true" pageEncoding="utf-8"%>
<!DOCTYPE html>

<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div class="container">
    <section id="content">
        <form action="" method="post"><!---這里action的地址我們先不寫,一會配置完servlet再回來補充。--->
            <h1>登錄 界面</h1>
            <div>
                <input type="text" placeholder="登錄名" required="" id="username" name="username1"/>
            </div>
            <div>
                <input type="password" placeholder="密碼" required="" id="password" name="password1" />
            </div>
            <div>
                <input type="submit" value="登 錄" />
                <a href="#">注冊</a>
            </div>
        </form><!-- form -->
        <div class="button">
        </div><!-- button -->
    </section><!-- content -->
</div><!-- container -->
</body>
</html>

二:我們需要建立與之匹配的數據庫,下面我們建立一個servlet的數據庫建立一個user的表,當然只需要用戶名和密碼就行,類型為varchar類型就行,值都為123.

 

 三:接下來我們需要建立一個com.Bean的包,上面說了這個里面的數據與數據庫都是一一對應的,我們給包取名為bean,將類取名為Userbean

package bean;

public class Userbean {
    private String username;//用戶名
    private String password;//密碼都是與數據庫匹配的,下面是set和get函數
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    

}

四:接下來我們需要建立數據庫的連接com.DBUtl,類名取名為DBUtil。

 

package com.DBUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil 
{
    public static String db_url="jdbc:mysql://localhost:3306/servlet?uerUnicode=true&characterEncoding=UTF-8";
    //這是連接數據庫,servlet是數據庫的名稱,uerUnicode=true&characterEncoding=UTF-8是將字符集設置為utf-8,避免亂碼。
    public static String db_user="root";//數據的用戶名
    public static String db_password="20153246";//數據庫的密碼
    public static Connection getConn()//獲取連接,返回Connection類型,必須設置為static這樣才能在其他類中使用
    {
        Connection conn=null;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");//加載驅動
            conn=DriverManager.getConnection(db_url,db_user,db_password);//連接數據庫
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        return conn;
    }
    public static void close(Statement state,Connection conn)//關閉函數
    {
        if(state!=null)//只有狀態和連接時,先關閉狀態 
        {
            try
            {
                state.close();
            }
            catch(SQLException e)
            {
                e.printStackTrace();
            }
        }
        if(conn!=null)
        {
            try
            {
                conn.close();
            }
            catch(SQLException e)
            {
                 e.printStackTrace();
            }
        }
    }
    public static void close(ResultSet rs,Statement state,Connection conn)
    {
        if(rs!=null)//有結果集,狀態和連接時,先關閉結果集,在關閉狀態,在關閉連接
        {
            try
            {
                rs.close();
            }
            catch(SQLException e)
            {
                e.printStackTrace();
            }
        }
        if(state!=null)
            
        {
            try
            {
                state.close();
            }
            catch(SQLException e)
            {
                e.printStackTrace();
            }
        }
        if(conn!=null)
        {
            try
            {
                conn.close();
            }
            catch(SQLException e)
            {
                e.printStackTrace();
            }
        }
    }

}

五:然后我們就要建立servlet類,建立一個com.servlet的包,建立一個Userservlet的servlet類

package com.servlet;

import java.io.IOException;

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

import dao.Userdao;



@SuppressWarnings("serial")
public class Userservlet extends HttpServlet
{
    //當從jsp跳轉到servlet類時,首先執行service函數(這是定理)
    protected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
    {
        req.setCharacterEncoding("utf-8");//設置字符集,避免亂碼
        //獲取jsp界面需要進行的操作,
        String method = req.getParameter("method");
        if(method.equals("login"))//轉到login函數
        {
            login(req,resp);
        }
    }
    protected void login(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
    {
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username1");//獲取jsp界面的username1和password1的值
        String password = req.getParameter("password1");
        
    }

}

六:配置servlet文件,用來實現從jsp界面跳轉到servlet的操作。在WEB-INF下面建立.xml文件,取名必須為web,

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>Userservlet</servlet-name><!--servlet的別名,隨便取  -->
        <!--servlet的包路徑,后面再加上.servlet類名 ,這里的類名必須是包下面的servlet類名,目的是讓找到該servlet的路徑 -->
        <servlet-class>com.servlet.Userservlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Userservlet</servlet-name><!--servlet的別名,和上面保持一致就行  -->
        <!--jsp跳轉到servlet的路徑名,自己取,用來從jsp界面跳轉到servlet的路徑,程序會根據路徑找到servlet的位置  -->
        <url-pattern>/Servlet/Userservlet</url-pattern><!--  -->
    </servlet-mapping>

</web-app>

七:建立Dao,用來執行sql語句,判斷是否登錄成功。類名取為Userdao,

package dao;

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

import db.DBUtil;

public class Userdao {
    public int login(String username,String password)
    {
        Connection conn = DBUtil.getConn();//這里就是從DBUtil類里面得到連接
        Statement state =null;
        ResultSet rs = null;
        int flag=0;
        try
        {
            String sql = "select * from user where name = '"+username+"'";//SQL語句,
            state = conn.createStatement();
            
            rs=state.executeQuery(sql);
            if(rs.next())
            {
                if(rs.getString("password").equals(password))
                {
                    flag=1;
                }
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        
        finally
        {
            DBUtil.close(rs, state, conn);
        }
        return flag;
    }
    

}

八:修改servlet下面的代碼,紅色的為添加的代碼

package servlet;

import java.io.IOException;

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

import dao.Userdao;



@SuppressWarnings("serial")
public class Userservlet extends HttpServlet
{
    //當從jsp跳轉到servlet類時,首先執行service函數(這是定理)
    protected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
    {
        req.setCharacterEncoding("utf-8");//設置字符集,避免亂碼
        //獲取jsp界面需要進行的操作,
        String method = req.getParameter("method");
        if(method.equals("login"))//轉到login函數
        {
            login(req,resp);
        }
    }
    protected void login(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
    {
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username1");//獲取jsp界面的username1和password1的值
        String password = req.getParameter("password1");
        Userdao userdao = new Userdao();//創建Userdao的實例
        int flag = userdao.login(username, password);//用來判斷是否登陸成功
        if(flag==1)
        {
            System.out.println("登錄成功!");
            resp.sendRedirect(req.getContextPath()+"/index.jsp");
        }
        else
        {
            System.out.println("登錄失敗!"); }
    }

}

九:在login.jsp界面我們剛剛沒有添加action的路徑,現在將他加上,路徑就是在web.xml文件下剛剛配置的路徑,

<%@ page language="java" isErrorPage="true" pageEncoding="utf-8"%>
<!DOCTYPE html>

<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div class="container">
    <section id="content">
        <form action="${pageContext.request.contextPath}/Servlet/Userservlet?method=login" method="post">
<!---
${pageContext.request.contextPath}的目的是找到主工程的名字,/Servlet/Userservlet就是web.xml下面配置的路徑,也就是servlet的路徑--->

            <h1>登錄 界面</h1>
            <div>
                <input type="text" placeholder="登錄名" required="" id="username" name="username1"/>
            </div>
            <div>
                <input type="password" placeholder="密碼" required="" id="password" name="password1" />
            </div>
            <div>
                <input type="submit" value="登 錄" />
                <a href="#">注冊</a>
            </div>
        </form><!-- form -->
        <div class="button">
        </div><!-- button -->
    </section><!-- content -->
</div><!-- container -->
</body>
</html>

十:執行一下login.jsp,有一個成功登陸的界面index.jsp上面就寫着這是主頁,另外在控制台輸出了一句話登陸成功,這里我就不粘貼代碼了,

    

 

 結尾:我們發現上面的代碼里面我們沒有用的Userbean這個類,是不是他就沒有用呢,顯然不是,這里我們做登陸的時候不需要這個,但是我們要進行將數據庫的數據傳遞到jsp界面時,我們就需要這個類了。

如果有什么問題,歡迎提問。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM