开发需求:把 http request 对象的数据保存到数据库中

第一步:编写 RequestInfoService 类,保存方法名是 saveRequestInfo

    // 保存request信息
public void saveRequestInfo(HttpServletRequest request){
Connection conn = null;
PreparedStatement pstmt = null; BaseDao baseDao = new BaseDao();
try {
conn = baseDao.dbConnection();
} catch (SQLException e1) {
e1.printStackTrace();
} StringBuffer sqlBf = new StringBuffer();
sqlBf.setLength(0); sqlBf.append("INSERT INTO REQUEST_INFO (REQUEST_INFO_SEQ \n");
sqlBf.append(" , CHARACTER_ENCODING \n");
sqlBf.append(" , CONTENT_TYPE \n");
sqlBf.append(" , CONTEXT_PATH \n");
sqlBf.append(" , LOCAL_ADDR \n");
sqlBf.append(" , LOCAL_NAME \n");
sqlBf.append(" , LOCAL_PORT \n");
sqlBf.append(" , METHOD \n");
sqlBf.append(" , REMOTE_ADDR \n");
sqlBf.append(" , REMOTE_HOST \n");
sqlBf.append(" , REMOTE_PORT \n");
sqlBf.append(" , REMOTE_USER \n");
sqlBf.append(" , REQUEST_URI \n");
sqlBf.append(" , REQUESTED_SESSION_ID \n");
sqlBf.append(" , LOCALE \n");
sqlBf.append(" , REGI_DT) \n");
sqlBf.append("VALUES(SEQ_REQUEST_INFO.NEXTVAL \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , SYSDATE) \n"); System.out.println(sqlBf.toString()); try {
pstmt = conn.prepareStatement(sqlBf.toString());
idx = 1;
pstmt.setString(idx++, request.getCharacterEncoding());
pstmt.setString(idx++, request.getContentType());
pstmt.setString(idx++, request.getContextPath());
pstmt.setString(idx++, request.getLocalAddr());
pstmt.setString(idx++, request.getLocalName());
pstmt.setInt(idx++, request.getLocalPort());
pstmt.setString(idx++, request.getMethod());
pstmt.setString(idx++, request.getRemoteAddr());
pstmt.setString(idx++, request.getRemoteHost());
pstmt.setInt(idx++, request.getRemotePort());
pstmt.setString(idx++, request.getRemoteUser());
pstmt.setString(idx++, request.getRequestURI());
pstmt.setString(idx++, request.getRequestedSessionId());
pstmt.setString(idx++, request.getLocale().toString()); int i = pstmt.executeUpdate();
if (i == 1) {
System.out.println("##### save request success \n");
} else {
System.out.println("##### save request fail \n");
}
} catch (SQLException e) {
e.printStackTrace();
} try {
baseDao.dbDisconnection();
} catch (SQLException e) {
e.printStackTrace();
}
}

第二步:Oracle 建表语句

CREATE TABLE SCOTT.REQUEST_INFO
(
REQUEST_INFO_SEQ NUMBER NOT NULL,
CHARACTER_ENCODING VARCHAR2 (10),
CONTENT_TYPE VARCHAR2 (10),
CONTEXT_PATH VARCHAR2 (50),
LOCAL_ADDR VARCHAR2 (50),
LOCAL_NAME VARCHAR2 (50),
LOCAL_PORT NUMBER,
METHOD VARCHAR2 (10),
REMOTE_ADDR VARCHAR2 (20),
REMOTE_HOST VARCHAR2 (20),
REMOTE_PORT NUMBER,
REMOTE_USER VARCHAR2 (20),
REGI_DT DATE,
REQUEST_URI VARCHAR2 (50),
REQUESTED_SESSION_ID VARCHAR2 (100),
LOCALE VARCHAR2 (20)
) ALTER TABLE SCOTT.REQUEST_INFO ADD(
CONSTRAINT PK_REQUEST_INFO_SEQ PRIMARY KEY (REQUEST_INFO_SEQ));

第三步:在访问页面的servlet中调用此service

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        RequestInfoService ris = new RequestInfoService();
ris.saveRequestInfo(request); EmpService es = new EmpService();
EmpBean eb = new EmpBean(); eb.setEname(request.getParameter("searchTxt"));
ArrayList<EmpBean> empBean = es.getEmpList(eb); request.setAttribute("empBean", empBean);
request.getRequestDispatcher("/view/empList.jsp").forward(request, response);
}

第四步:测试

访问 http://localhost:8081/web01/view/empList.jsp 页面进行测试。正常时每次点击 search 按钮,插入一条记录到数据库中

保存 http request 的数据到数据库表的更多相关文章

  1. 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

    摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...

  2. 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

      先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...

  3. Oracle sqlldr 在DOS窗口导入多列数据到数据库表

    sqlldr 用法详见:https://www.cnblogs.com/rootq/archive/2009/03/01/1401061.html 测试内容: 1.创建数据库表: create tab ...

  4. Excel表数据导入数据库表中

    ***Excel表数据导入到数据库表中 通过数据库表的模板做成‘Excel’表的数据导入到数据库相应的表中(注意:主表 和 从表的关系,要先导‘主表’在导入从表) 过程:通过数据库的导入工具—先导入为 ...

  5. SQL语句完成Excel数据导入数据库表中流程方法及注意事项

    第一步:先查看数据库是否安装AccessDatabaseEngine_X64.exe, 如下图查看: 如果未安装先下载脚本之家下载地址 https://www.jb51.net/softs/29150 ...

  6. oralce 超过1亿条数据的数据库表清理实践

    2018-08-18 16:58 无腿鸟 阅读(331) 评论(0) 编辑 收藏 问题:当一个表的数据量超过一亿条,要删除其中的5000w条,如何处理. 如果直接使用delete语句,会涉及到到大量的 ...

  7. 导入数据到数据库表,报错[Err] [Row1] [Imp] 1153 - Got a packet bigger than 'max_allowed_packet' bytes

    # 在数据库新增查询,执行如下命令即可: show VARIABLES like '%max_allowed_packet%'; set global max_allowed_packet = 2*1 ...

  8. java实现excel表格导入数据库表

    导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程 一.上传excel 前端jsp页面,我的是index.jsp 在页面中我自己加入了一个下载上传文 ...

  9. Activiti工作流数据库表结构

    Activiti工作流引擎数据库表结构 数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. ACT_RE_*: ...

随机推荐

  1. hibernate 学习 一 基本概念

    1: Hibernate对JDBC进行封装,以面向对象的方式对关系型数据库进行操作. 2:  Hibernate的配置文件: hibernate.properties  或者  hibernate.c ...

  2. Datawindow.net中实现让当前行选中,并且当前行以其他颜色显示

    如何在Datawindow.net中实现让当前行选中,并且当前行以其他颜色显示 使用Datawindow.net要选中一行是很容易的意见事情,有很多种办法可以实现,最简单的莫过于使用selectrow ...

  3. debugs

    import os def get_nova_credentials_v2(): d = {} d['version'] = '2.0' d['username'] = os.environ['OS_ ...

  4. python 内置函数的补充 isinstance,issubclass, hasattr ,getattr, setattr, delattr,str,del 用法,以及元类

    isinstance   是 python中的内置函数 , isinstance()用来判断一个函数是不是一个类型 issubclass  是python 中的内置函数,  用来一个类A是不是另外一个 ...

  5. python---socket与socketserver

    1.socket的方socket.getaddrinfo(host, port, family=0, type=0, proto=0, flags=0) #获取要连接的对端主机地址sk.bind(ad ...

  6. 带着问题看 react-redux 源码实现

    前言 Redux作为通用的状态管理器,可以搭配任意界面框架.所以并搭配react使用的话就要借助redux官方提供的React绑定库react-redux,以高效灵活的在react中使用redux.下 ...

  7. react中虚拟DOM的基本概念

    react中的核心概念 1.DOM的本质是什么: 浏览器中的概念,用js对象来表示页面上的元素,并提供操作DOM对象的API 2.什么事react中的虚拟DOM:是框架中的概念,是程序员用js对象来模 ...

  8. Swift 4.0 中的 open,public,internal,fileprivate,private

    1.private private访问级别所修饰的属性或者方法只能在当前类里访问. 2.fileprivate fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问. ...

  9. CodeForces599C【贪心】

    题意: 给你一个序列,要求你从小到大排序,你可以划分成一个块一个块地进行块内排序,问你最多能分成几个块 思路: 贪心,首先感觉就是有正序的话我就分开啊: 难道倒序不能分块?321肯定不行啊. 存不存在 ...

  10. 洛谷 P4704 太极剑【贪心】

    首先考虑分割线能分割一条线当且仅当分割线一个端点在这条线的ab中间,另一端点在外面,也就是分割线对应的一条弧不能同时有这条线的两个端点 每条线的两端点都染同色,然后分段,一段里面颜色互不相同,分割线就 ...