zoukankan      html  css  js  c++  java
  • 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界面时,我们就需要这个类了。

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

  • 相关阅读:
    CodeForces 446A. DZY Loves Sequences(最长上升子序列)
    CodeForces
    2020牛客暑期多校训练营(第一场)
    POJ3281-Dining(最大流)(拆点)
    「杂题」图论杂题选做
    「学习小结」CDQ 分治多维偏序问题
    「算法笔记」Tarjan 算法 双连通分量
    「算法笔记」状压 DP
    「算法笔记」数位 DP
    「算法笔记」矩阵乘法
  • 原文地址:https://www.cnblogs.com/zll20153246/p/7871723.html
Copyright © 2011-2022 走看看