• Servlet,JDBC,JSONObject三者配和处理客户端请求并返回正确的json数据


    JSON简介

      首先我们来理解json(JavaScript Object Notation),如果你熟悉python的字典结构和列表结构,其实json格式是非常容易理解的,当然不熟也不难理解,网上的资料很多。

      JSON格式包含有两种结构: 

      json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构
      1、对象:对象在js中表示为“{}”括起来的内容引用了一个对象,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。
      2、数组:数组在js中是中括号“[]”括起来的内容引用了一个数组,数据结构为 ["java","javascript","vb",...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。
      经过对象、数组2种结构就可以组合成复杂的数据结构了。

    可以到http://www.json.org/java/index.html 下载解析我们要使用到的代码,我们用这个包来封装json格式的字符串,我们可以用toString()把这些对象装换成字符串。

    JSONObject

      注意它的使用和一个Map非常相似,因为JSONObject类对应的字符串实际上可以被认为是一个字典结构(正如python中打印出来的字典格式一样)

    使用put(string,string)或构造函数,在json中添加一个键值对

    使用put(string, new string[]{})来添加一个键值对,值是一个数组

    使用put(string, map)来添加一个键值对,值是一个满足json格式的字符串

    使用getString(key)来返回一个值,当然它被转换称字符串了

    JSONArray

      它的用法和List相似,如果只需要返回一个[ ... ]形式的字符串,这个方法就很好。

    使用静态方法fromObject( new string[]{})或fromObject(list)来得到一个这个类的对象,对应一个数组字符串。

    使用add(string)或add(index,string)添加元素

    使用add(jsonobj)添加一个符合json格式的字符串

    tips:添加很多嵌套虽然理论上可行,然而实际应用中完全没有必要如此复杂,简单容易被解释就是最好的。

    Servlet简介

    响应代码的编程范式:

    public class ServletTest extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
            response.setContentType("text/html");
            PrintWriter writer = response.getWriter();
    
            String persontype = request.getParameter("persontype");
            String name = request.getParameter("name");
    
            writer.println("this is html or json");
    
            writer.close();
        }
    }

    request对象的方法:

    getHeaderNames(); 返回所有的报文头的字段名字符串

    getHeader(java.lang.String name) 返回某个字段名对应的字符串

    Cookie[]   getCookies() ; 返回的是根据报文生成的cookie对象

    Cookie[] getCookies() ; //获取报文头中的Cookie(读取Cookie的报文头属性) 
    java.util.Locale getLocale() //获取客户端本地化信息(读取 Accept-Language 的报文头属性) 
    int getContentLength();//获取请求报文体的长度(读取Content-Length的报文头属性) 

    HttpSession getSession() 返回这个请求关联的会话对象

    response对象的方法:

    void    setHeader(String name, String value);在报文头增加一个字段

    void addCookie(Cookie cookie) //添加Cookie报文头属性
    void sendRedirect(String location) //不但会设置Location的响应报文头,还会生成303的状态码

    JDBC简介

    mysql或postgresql的jdbc编程范式:

    public class JdbcTest {  
        public static final String url = "jdbc:mysql://127.0.0.1/emarket";  
        public static final String name = "com.mysql.jdbc.Driver";  
        public static final String user = "root";  
        public static final String password = "mysql";  
      
        public Connection conn = null;  
        public PreparedStatement pst = null;  
      
        public execute(String sql) {  
            try {  
                Class.forName(name);//指定连接类型  
                conn = DriverManager.getConnection(url, user, password);//获取连接  
                pst = conn.prepareStatement(sql);//准备执行语句 
                ResultSet rs = pst.executeQuery();
                while (rs.next()) {
                   System.out.println("@1");
                   System.out.print(rs.getString(1));
                   System.out.println(rs.getString(2));
                }
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
    
        try {  
                this.conn.close();  //关闭数据库链接,否则会导致连接数目过多
                this.pst.close();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }
        }  
    }

    完整的流程代码

      web服务器把HTTP请求报文封装成对象,并以此为参数执行我们的servlet代码,那么我们的代码要怎么样写呢?很自然,我们要用jdbc读取数据,然后让数据存储在字典或者数组结构中,在借助json包构建JSONObect对象,然后把它装换成字符串,写入HTTP报文体中。现在给出数据库中一个关系模式 item_homepage,我们要读取它:

    JSON包源代码分析

      

  • 相关阅读:
    jquery 实现 点击按钮后倒计时效果,多用于实现发送手机验证码、邮箱验证码
    javascript 中的后退和前进到上下一页
    文件IO流完成文件的复制(复杂版本主要用来演示各种流的用途,不是最佳复制方案哦)
    int ,Intege,String 三者之间的转换
    servlet生成验证码代码
    jsp servlet 的 请求转发和重定向
    struts2
    SQL连接:内连接、外连接、交叉连接。
    今天参加了聚思力面试
    进程(Process)和线程(Thread)的关系和区别
  • 原文地址:https://www.cnblogs.com/xinchrome/p/4883788.html
Copyright © 2020-2023  润新知