zoukankan      html  css  js  c++  java
  • javaweb-jsp开发模式+JSON插件

      阅读这一篇文章,你至少需要掌握的技术有:servlet,jsp,javaban(java基础);

      所需要的jar:

    1,封装表单的jar:commons-beanutils-1.8.3.jar;

                         commons-logging-1.1.1.jar;

    2,jdbc数据库的jar(这里用的mysql数据库):mysql-connector-java-5.0.8-bin.jar;

    3,jstl标签库的jst:jstl.jar;

       Standard.jar;

    4,jsonjar:

     commons-collections-3.2.1.jar;

     commons-lang-2.5.jar;

     ezmorph-1.0.6.jar;

                     json-lib-2.4-jdk15.jar;

    (下面这两个jar包前面已经加载过,不需要重复加载,额外写一遍是因为有可能单独使用json的时候需要用到,故此在这里备注一下)

          commons-logging-1.1.1.jar;

              commons-beanutils-1.8.3.jar;

      本文主要对jsp的开发模式,mvc模式进行学习

    1 ,Jsp的开发模式;

      1,1 主要开发模式:

    1.1.1,模型一

    使用的技术:jsp+javaBean

    这种技术有一个很明显的缺点,jsp虽然能很方便的向页面输出内容,但是当我在一个jsp页面中嵌入了大量的java代码时候,页面结构非常混乱,java代码和html代码相互交替,在后期维护的时候十分麻烦();

    1.1.2模型二(主要用这个)

         使用的技术:jsp+servlet+javaBean

     主要特点:分工合作,负责自己的功能范围,

     Jsp:用来显示数据;

     Servlet:控制中心,管理操作,javaBeanjsp中建立联系;

     javaBean:封装数据,处理数据;

    2, 使用模型二模拟登陆操作(就不写代码了,代码简单,好理解,逻辑步骤明确即可);

    2.1 实现步骤

       ①创建一个jsp登陆页面,提交信息到控制中心servlet页面;

           ②创建控制中心servlet调用业务逻辑层,实现登陆功能的判断;

         ③创建Service实现功能(这里先不用持久层,直接在Service中处理结果);

           ④控制中心从业务逻辑层获取获取结果,反馈信息给登陆页面(失败),或其它页面;

    1. mvc开发模式(这个模式思想很多地方都有用到,不要局限与web之中);

    3.1 mvc:;

           M:模型;

           V:视图;

       C:控制器;

    特点:使用控制器,控制模型与视图之间的关系;

    3.2 javaweb开发中的具体分工;

    3.1.1 M:使用javaBean技术,处理数据;

    3.1.2 V:使用jsp技术,显示数据;

    3.1.3 C:使用servlet技术,控制管理功能;

    1. javaee的三层结构;

      4.1 web (jsp,servlet);

      4.2 商业逻辑层(业务逻辑层);

      4.3 持久化层(jdbc 数据库操作);

      4.4 dao模式:用在持久化层的模式,专注于对数据操作的模式,数据封装成对象;

         注意事项:①第一步,创建一个接口,定义要使用的功能(制定对外的规则);

                  ②第二步,创建一个类,实现接口的所有方法(之后可以通过该类实现功能);

      ③第三步:参数用对象进行封装(方便传输);

    //dao模式使用的参数传递,全部是用的封装过的对象传递

    5, mvc+dao模式的练习: 实现登陆功能的操作;

      5.1 实现步骤(主要难点在于参数如何传递,步骤如何实现):

     ①创建一个jsp页面(V),from表单提交参数到servlet(C);

     ②创建一个servlet(C)来获取数据请求,并进行封装调用service(M)中的方法实现功能;

     ③创建一个servlet(M)来实现功能,调用dao模式中的方法;

     ④创建dao模式相关接口和类,与数据库挂接;

     ⑤servlet(M)返回结果给servlet(C),servlet(C)根据结果把信息反馈给jsp页面(V);

    6,mvc+dao 模式的练习:实现注册功能的步骤:

      6.1实现步骤:

    ①创建一个注册页面(V),表单数据提交到servlet(C)

    ②创建一个servlet(C)来获取请求数据,并封装, 然后调用service(M)的方法实现功能

    ③创建一个servlet(M)来实现功能,调用 dao模式中的方法

    ④在dao模式的接口和实现类中创建方法,实现效果

    ⑤反馈结果,显示在jsp页面上(v);

    6.2功能完善:ID值唯一

    实现方法:

    ①创建表的时候设定id为主键并且自动增长:id int primary key atuo_increment,

    ②使用uuid类随机生成id

    //生成一个随机的唯一的id

    String id = UUID.randomUUID().toString();

    id = id.replace("-", "");

    6.3 其它练习:增加,删除(挺简单的,就不一一累赘了,重点在于掌握mvc+dao这一种开发模式,同时对之前的知识点进行复习);

    7 JSON插件的使用(好东西,可以把集合或者对象转换成JSON,算是间接的与js搭建了桥梁)

    JSON是一个轻量级的数据储存格式,方便使用(在安卓开发中用的很多)

    需要的jar包在本文开头已经提到了,就不再这里重复说明了

    使用方式:

    对象转JSON

    JSONObject jsonobject =JSONObject.fromObject(对象);

    集合转JSON

    JSONArray jsonarray=JSONObjectfromArray(集合);

    整理时间 2016.5.14

    最后贴一下 mvc+dao模式代码,写的比较简单,见笑了.

    MVC  

    控制中心(C)

    package com.zzx.control;
    
    import java.io.IOException;
    import java.lang.reflect.InvocationTargetException;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.swing.text.StyledEditorKit.BoldAction;
    
    import org.apache.commons.beanutils.BeanUtils;
    
    import com.zzx.bean.Player;
    import com.zzx.service.PlayerService;
    
    public class Control extends HttpServlet {
            //这里是登陆控制中心
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            //0,考虑到用户名会有中文的可能
            request.setCharacterEncoding("utf-8");
            //1,封装数据
            Player p =new Player();
            Map map = request.getParameterMap();
            try {
                BeanUtils.populate(p, map);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //2,调用商业逻辑层实现效果
            boolean flag =PlayerService.Login(p);
            if(flag){
                response.getWriter().write("Login sucess");
            }else{
                request.setAttribute("msg", "用户名或密码错误");
                request.getRequestDispatcher("/Login.jsp").forward(request, response);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            doGet(request, response);
        }
    
    }

    下面是 业务逻辑层

    package com.zzx.service;
    
    import java.util.List;
    
    import com.zzx.bean.Player;
    import com.zzx.dao.SQLControl;
    import com.zzx.dao.SQLControlIn;
    
    public class PlayerService {
        //这里是业务综合处理处
        //1登陆功能
        public static boolean Login(Player p) {
         //调用 sql数据操作
         SQLControl sc =new SQLControlIn();
         boolean flag = sc.Login(p);
             if(flag){
                 return true;
             }else{
                 return false;
             }
        }
        //注册操作
        public static boolean reg(Player p) {
            //调用 Dao模式下方法创建
            SQLControl sc =new SQLControlIn();
            boolean flag= sc.reg(p);
            if(flag){
                return true;
            }else{
            return false;
            }
        }
        //判断姓名是否重复
        public static boolean OnlyName(Player p) {
            SQLControl sc =new SQLControlIn();
            boolean flag=sc.OnlyName(p);
            if(flag){
                return true;
            }else{
            return false;
            }
        }
        public static List<Player> AllPlayer() {
            SQLControl sc =new SQLControlIn();
            List<Player>list =sc.AllPlayer();
            return list;
        }
    }

    下面是持久层

    package com.zzx.dao;
    
    import java.util.List;
    
    import com.zzx.bean.Player;
    
    public interface SQLControl {
        //这里是对外提供的数据库控制中心
        //登录操作
        public boolean Login(Player p);
        //注册操作
        public boolean reg(Player p);
        public boolean OnlyName(Player p);
        public List<Player> AllPlayer();
    }
    package com.zzx.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.util.LinkedList;
    import java.util.List;
    
    import com.zzx.bean.Player;
    import com.zzx.utils.JdbcTools;
    
    public class SQLControlIn implements SQLControl{
        private Connection conn;
        private PreparedStatement ps;
        private ResultSet rs;
        //1,这里是登陆操作
        public boolean Login(Player p) {
            String username=p.getUsername();
            String password=p.getPassword();
            try{
            //1,获取链接
            conn = JdbcTools.loadDriver();
            //2,创建sql语句
            String sql ="select * from player where username=? and password=?";
            //3,获取预编译对象并设置参数
            ps = conn.prepareStatement(sql);
            ps.setString(1, username);
            ps.setString(2, password);
            //4,获取执行结果
            rs = ps.executeQuery();
            if(rs.next()){
                return true;
            }else{
                return false;
            }
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcTools.clearAll(conn, ps, rs);
            }
            return false;
        }
        //注册功能
        public boolean reg(Player p) {
            try{
                conn = JdbcTools.loadDriver();
                //创建sql语句
                String sql = "insert into player values(?,?,?,?)";
                //获取预编译对象
                ps = conn.prepareStatement(sql);
                //设置参数
                String id = p.getId();
                String username = p.getUsername();
                String password = p.getPassword();
                String addr = p.getAddr();
                ps.setString(1, id);
                ps.setString(2, username);
                ps.setString(3, password);
                ps.setString(4, addr);
                //执行sql
                ps.executeUpdate();
                //返回结果
                return true;
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcTools.clearAll(conn, ps, rs);
            }
            return false;
        }
        //判断名字是否唯一
        public boolean OnlyName(Player p) {
            String username=p.getUsername();
            try{
            //1,获取链接
            conn = JdbcTools.loadDriver();
            //2,创建sql语句
            String sql ="select * from player where username=?";
            //3,获取预编译对象并设置参数
            ps = conn.prepareStatement(sql);
            ps.setString(1, username);
            //4,获取执行结果
            rs = ps.executeQuery();
            if(rs.next()){
                return true;
            }else{
                return false;
            }
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                JdbcTools.clearAll(conn, ps, rs);
            }
            return false;
        }
        
        //获取所有用户
        public List<Player> AllPlayer() {
            List<Player> list =new LinkedList<Player>();
            Player p ;
            try{
                //1,获取链接
                conn = JdbcTools.loadDriver();
                //2,创建sql语句
                String sql ="select * from player";
                //3,获取预编译对象并设置参数
                ps = conn.prepareStatement(sql);
                //4,获取执行结果
                rs = ps.executeQuery();
                while(rs.next()){
                    //创建对象,封装数据
                    p=new Player();
                    String id =rs.getString("id");
                    String username = rs.getString("username");
                    String password = rs.getString("password");
                    String addr = rs.getString("addr");
                    p.setId(id);
                    p.setUsername(username);
                    p.setPassword(password);
                    p.setAddr(addr);
                    //添加到集合中去
                    list.add(p);
                }
                return list;
                }catch (Exception e) {
                    e.printStackTrace();
                }finally{
                    JdbcTools.clearAll(conn, ps, rs);
                }
                return null;
        }
        
    
    }

    下面是JDBC工具类(手头上只有MySQL就用的MySQL了)

     

    package com.zzx.utils;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.ResourceBundle;
    
    
    //这里是操作数据库的工具类
    /*
     * 工具类功能:1,加载驱动,获取链接
     *            2,释放资源
     */
    public class JdbcTools {
        //定义参数获取配置文件中的信息
        private static String driverName;
        private static String username;
        private static String password;
        private static String url;
        static{
            driverName=ResourceBundle.getBundle("config").getString("driverName");
            username=ResourceBundle.getBundle("config").getString("username");
            password=ResourceBundle.getBundle("config").getString("password");
            url=ResourceBundle.getBundle("config").getString("url");
        }
        //功能1,加载驱动,获取链接
        public static Connection loadDriver(){
            //1,通过反射获取字节码文件加载驱动
            try {
                Class.forName(driverName);
                Connection conn = DriverManager.getConnection(url,username,password);
                return conn;
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        //功能2,释放资源
        public static void clearAll(Connection conn,Statement state,ResultSet rs){
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            rs=null;
            
            if(state!=null){
                try {
                    state.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            state=null;
            
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            conn=null;
            
            
        }
    }

    下面是V web页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h1>请输入用户名跟密码登陆</h1>
        <h2><font color="red">${msg }</font></h2>
        <form action="${pageContext.request.contextPath }/servlet/Control" method="post">
            用户名:<input type="text" name="username"/><br/>
            密码:<input type="password" name="password"/><br/>
            <input type="submit" value="登陆"/>
        </form>
        <hr/>
        <a href="${pageContext.request.contextPath }/servlet/ShowAll">点我显示所有用户</a>
    </body>
    </html>
  • 相关阅读:
    maven打包成jar文件与打包成tar.gz文件
    maven命令错误:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME
    Nginx监听多个端口配置实例 Linux
    怎么修改redis-cli访问的地址
    eclipse的.properties文件中文显示问题
    Linux关闭防火墙命令red hat/CentOs7
    CentOS 7防火墙快速开放端口配置方法
    Window下Beego环境搭建和bee工具使用
    .netcore2.1 使用middleware对api请求头进行验证
    .netcore2.1 统一接口返回属性名称
  • 原文地址:https://www.cnblogs.com/adventurer/p/5493979.html
Copyright © 2011-2022 走看看