# geekbang-campus **Repository Path**: light_shadow/geekbang-campus ## Basic Information - **Project Name**: geekbang-campus - **Description**: No description available - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-13 - **Last Updated**: 2021-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # geekbang-preview-week #### 介绍 小马哥训练营的预习周作业 #### 软件架构 [预习周]servlet-web模块包含了第一周和第二周的作业,第四次作业在 my-httpserver模块中的com.general.geekbang.myhttpserver.AntURLPatternsMatcher这个类中 ``` **正式课第一个作业 ** 访问链接:http://localhost:8080/servlet-web/router/a.jsp 显示如下: JSP Custom Tag [Server Info]serverName: tomcat-server, requestId: F83FD858-3896-4C5E-7229-CC44D4E3148F 第一个是打印的tag 第二个是自定义tag显示的信息 ``` ```$xslt 正式课的第二个作业 实现类 my-configuration模块的com.general.config.ServletRequestConfigSource (目前在代码中将ServletRequest强转为HttpServletRequest 是为了获取requestMethod,除此之外没有想到特别好的方法,先暂时这样做 ) 使用方式:servlet-web中以listener的方式使用 见:com.general.campus.listener.LogPropertiesServletListener 使用demo: 启动servlet-web中的tomcat7 mvn tomcat7:run 场景一: 输入: http://localhost:8080/servlet-web/router/xxx GET 请求 参数随便定义:比如a->1111, b-> 1,2,3,4,5,6,即可在控制台中看到如下的打印日志: -------------start log request property---------------------- propertyNames = [[a, b]] key: a -> [1111] key: b -> [1,2,3,4,5,6] -------------log request property end ---------------------- 场景二: 输入: http://localhost:8080/servlet-web/router/xxx POST 请求 contentType: application/x-www-form-urlencoded 参数随便定义:比如a->1111, b-> 1,2,3,4,5,6,即可在控制台中看到如下的打印日志: -------------start log request property---------------------- propertyNames = [[a, b]] key: a -> [1111] key: b -> [1,2,3,4,5,6] -------------log request property end ---------------------- 场景三: 输入: http://localhost:8080/servlet-web/router/xxx POST 请求 contentType: application/json 参数随便定义:比如 { "name": "xiaoming", "city":[1,2,3,4] } 即可在控制台中看到如下的打印日志: -------------start log request property---------------------- propertyNames = [[city, name]] key: city -> [1,2,3,4] key: name -> [xiaoming] -------------log request property end ---------------------- ``` #### 安装教程 第二次作业实现了两个servlet,分别是H2JdbcDataSourceServlet和MySQLJdbcDataSourceServlet 1. H2JdbcDataSourceServlet 访问的url是 [http://localhost:8080/servlet-web/jdbc/h2](http://localhost:8080/servlet-web/jdbc/h2), 会返回在请求时插入到内存数据库中的几条数据 数据分别如下 ``` id: 1, name: Eli, age: 18, email: Eli@example.com id: 2, name: Jack, age: 10, email: Jack@example.com id: 3, name: Tom, age: 28, email: Tom@example.com id: 4, name: Sandy, age: 21, email: Sandy@example.com id: 5, name: Billie, age: 24, email: Billie@example.com ``` 2. MySQLJdbcDataSourceServlet 访问的url是 [http://localhost:8080/servlet-web/jdbc/mysql](http://localhost:8080/servlet-web/jdbc/mysql), 需要在本地安装mysql数据库(使用的数据库为mysql安装弯沉之后自带的数据库 sakila),数据库链接url: jdbc:mysql://localhost:3306/sakila, username:root, password:123456, 查询的表为: select language_id, name from language。 #### 使用说明 1. H2JdbcDataSourceServlet 访问 http://localhost:8080/servlet-web/jdbc/h2 2. MySQLJdbcDataSourceServlet 访问 http://localhost:8080/servlet-web/jdbc/mysql #### 遇到的问题 1. ``` String createTableSql = "DROP TABLE IF EXISTS user;" + "CREATE TABLE user" + "(" + " id BIGINT(20) NOT NULL COMMENT '主键ID'," + " name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名'," + " age INT(11) NULL DEFAULT NULL COMMENT '年龄'," + " email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱'," + " PRIMARY KEY (id)" + ");"; boolean create = statement.execute(createTableSql);``` h2 数据库 执行这个sql建表语句时,没有返回true,返回的却是false? 2. ``` String insertTableSql = "INSERT INTO user (id, name, age, email) VALUES" + " (1, 'Eli', 18, 'Eli@example.com')," + " (2, 'Jack', 10, 'Jack@example.com')," + " (3, 'Tom', 28, 'Tom@example.com')," + " (4, 'Sandy', 21, 'Sandy@example.com')," + " (5, 'Billie', 24, 'Billie@example.com');"; boolean insert = statement.execute(insertTableSql); ``` h2 数据库 执行这个sql插入语句时,没有返回true,返回的却是false?