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界面时,我们就需要这个类了。

如果有什么问题,欢迎提问。

 

posted @ 2017-11-22 09:39  大神笨蛋  阅读(21371)  评论(5编辑  收藏  举报