drp的笔记1

来源:互联网 发布:淘宝代销怎么上传宝贝 编辑:程序博客网 时间:2024/06/07 02:11

想应用,想重点,想细节,想易错点,想原理

                           第十五天
1. 文件的上传:
   文件的上传一定要传到真实的路径之中(比如说硬盘)。但是可以用request.getsession.getServletContext().getRealPath("upload");

   目标导向:
     1.完成基本的上传的功能。
     2.使用相对的路径完成上传的功能。
     3.自动创建一个目录。
     4.将文件的名称放到数据库里面。如果放文件读取不方便。

   作业:1.用javascript限制图像的后缀名为jpg和gif。
         2.上传的时候,有图片的预览的功能。
         3.删除物料的时候将对应的图片也删除。


                           第十七天
1. 实现的功能:1.如何定义一个Dao的接口,如何写一个Dao接口的实现?如何抛出异常?
               2.如何保证在同一个线程中,共用相同的connection?使用ThreadLocal的类。
               3.使用青蛙编写简单的sql的语句。
               4.如何向oracle添加时间数据:psts.setTimestamp(6,new Timestamp(flowCard.getRecorderDate().getTime()));
               5.如何将时间格式转化为String的格式。String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());
   易错点:1.层与层之间应该互相不可以看见。
           2.各自抛各自的异常。
           3.取出来的是String可以转化为int类型。

   知识点:1.事务的边界应该设置到业务逻辑层。
           2.了解主从表的结构或者原理。(实际上就是一对多)
           3.如果在一些金融的行业中,需要使用java.math 类 BigDecimal来处理,但是比较麻烦。
           4.dao应该封装持久层的东西,并且是细粒度的,而service是业务逻辑层的东西,并且是封装粗粒度的,
           5.ThreadLocal类的作用是在同一个线程中共享一个变量。还可以防止线程的安全问题。


                            开学第一天: 表的创建和导入

1. 知识点:1.关于树形结构如何抽取一张表出来? 使用id和pid和leaf的方法,pid是外键参照主键id。
           2.两张表在什么情况下可以作为一张表去设计? 当一张表是另一张表的子集时。但要注意设一个字段来区分这两张表。
           3.有下拉类表的时候,如何处理?  可以建一个数据字典。并且加一个字段来区分不同的下拉列表。
           4.主键维护表的设计。表名称和值。这样的移植性更好。
           5.一个班级对应多个学生是主从表的关系。       
           6.tools-check model通过此种方式可以检查错误的信息,然后database-generate database导出脚本。

   易错点:1.生成的脚本如何去掉双引号? tools-model option - other object -code 变为大写就可以解决问题。
           2.在生成的时候如何去掉约束? 在生成的时候去掉。

   实际应用:1.如何为树形结构的表建立数据?使用id和pid和leaf的方法
             2.有下拉类表的时候,如何处理?
             3.插入的时候,如何让主键自增。
             4.如何创建一个用户?
                create user drp identified by drp;      ---- 创建用户
                create tablespace ts_drp datafile 'd:\drp\drp_data.dbf' size 100m;; ---创建一个表空间
                alter user drp default tablespace ts_drp;     -----将表空间分配给用户
                grant create session , create table ,unlimited tablespace to drp;
                conn drp/drp;
                @d:\drp\create_drp.sql;
    总结:要学会如何创建多张表,并且导入数据库中。
                
                     
                        servlet和jsp

1. 知识点:1.servlet是单实例,多线程。   
           2.servlet的原理:
              客户端通过http的请求将url发给tomcat,这时,tomcat先创建两个对象,然后通过配置文件找到那个servlet
              new 一个单例出来,后来调用doPost和doGet的方法。最后通过response返回给客户端。

           3.   *******************一个完整的项目包含哪些东西? ***********************   
                (这是sun定义的)
                项目名称/WEB-INF / lib
                                   classes
                                   web.xml
           4. servlet只实例化一次,它是单例的,这样可以引发线程的安全问题。
           5. 关于cookie不重要,但是它的概念非常重要。
              添加一个cookie和在服务器端读取一个cookie

           6. session是一个人一个session。浏览器关闭了就断了,但是对象还在内存里面。还有一个超时的问题。
          
   易错点:1. 项目名称区分大小写。
           2. tomcat不能正常启动,可能是因为没有配置JAVA_HOME。在系统变量中配置,如果想JAVA_HOME只在tomcat中使用,则可以
              编辑启动文件,在第一行加入 :  set JAVA_HOME = C:\JDK;
           3. 如果要编译成class文件,需要将servlet-api.jar引入到系统变量中。
          
 
                                         开学第三天
1. 开发一个项目常见的一些步骤:
    1. 使用powerDesigner创建一些表,并且使用命令创建一个用户,分配表空间。最后导入到数据库中。
    2. 建一个项目
    3. 创建数据库的连接,同时注意要引入驱动包。
    4. 创建tomcat的连接,并且发布。
    5. 引入工具类。

2. myeclipse常用的快捷键:
     Ctrl+1 快速修复(最经典的快捷键,就不用多说了)
     Ctrl+D: 删除当前行
     Ctrl+Alt+↓ 复制当前行到下一行(复制增加)
     Ctrl+Alt+↑ 复制当前行到上一行(复制增加)
     Alt+Shift+R 重命名
     Alt+Shift+M 抽取方法
     Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)
     Ctrl+/   注释,或者取消注释。
     Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)
     tab 整体右移动
     tab+shift 整体左移动

3. xml知识点(主要的作用是用于数据的交换):
     1.它是可以扩展的标记语言。
     2.dtd是规范标签的名字。
     3.schema规定类型,标签的名称。
     4.xsl主要是对xml进行装饰,让xml不同的风格显示!

   实际应用:通过java程序来读取xml的配置文件  (注意:配置文件应该放在类加载器中)
     1. xml:
         <?xml version="1.0" encoding="UTF-8"?>
         <config>
           <db_info>
             <driver_name>oracle.jdbc.driver.OracleDriver</driver_name>
             <url>jdbc:oracle:thin:@127.0.0.1:1521:orcl</url>
             <username>drp</username>
             <password>drp</password>
           </db_info>
          </config>
 
       读取的关键代码:
           // 通过类加载器来加载这个xml文件,返回一个document的对象
           document = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream("db_info.xml"));
           //获得这个对象中的元素
           Element element1 = (Element) document.selectObject("/config/db_info/driver_name");
           //通过元素的方法获得它的值
           System.out.println(element1.getStringValue());
     注意:要引入两个包,一个是DOM4J这个包,还有第三方的开发包。

4. 注意:1.向oracle数据库中插入时间的时候,应该使用Timestamp!!!!!!
         2.静态页面改为动态页面注意要先加jsp的开头。
         3.tomcat的端口被占用的问题:在进程中杀掉java的小的一个。
         4.javascript验证的时候需要去掉两端的空格!!!!!!!!!!
         5.onkeydown和onkeypress的区别:
             onkeypress 这个事件在用户按下并放开任何字母数字键时发生。系统按钮(例如,箭头键和功能键)无法得到识别。
             onkeydown 这个事件在用户按下任何键盘键(包括系统按钮,如箭头键和功能键)时发生。
             区别:一个放开一个没有放开
             还有一个区别:onkeydown 对于字母大小写不区分keyCode 而 onkeypress 区分
         6.关于编码问题可以使用uedit
         7.添加的时候乱码是request的时候,过来的问题。回去没有乱码,是response的问题。(根本是http请求)

   实际应用: 使用javascript完成基本的验证,并且会使用正则表达式!!!!!
              1.只能输入数字(但是与系统键无关)
               function  noNumbers(){
   var keynum;
   var keychar;
   var re = /\d/;
   if(window.event){
      keynum = event.keyCode;
          }else if(event.which){
      keynum = event.which;
          }
      keychar = String.fromCharCode(keynum);
      return re.test(keychar);
          }
                <input name="fiscalYear" type="text" class="text1" id="fiscalYear" size="10" maxlength="10" onkeypress="return noNumbers()">

                                       开学第四天  ajax

1.ajax的介绍: ajax与java没有关系,可以在很多语言中使用。A指的是异步 jax 指的是 javascript和xml(哥笑了,其实与xml没有关系,只是当时xml流行而已)
2. 
  *************************************************** ajax的原理 ***********************************************************
  ajax相当于浏览器的一个插件,浏览器只需要告诉ajax引擎用什么方式提交,去找谁,是同步还是异步。然后自己做自己的事情,不需要等待。ajax引擎send之后
  去做事情了,而浏览器可以通过xmlHttp.responseText回调它的数据。

3.同步和异步的关系?
  同步是需要等待它做完之后才能做别的事情,而异步无须等待。

4.一个重要的对象XMLHttpRequest
5.
  实际应用: 使用ajax进行无刷新验证
        var xmlHttp;
 function createXMLHttpRequest(){
  if(window.XMLHttpRequest){
   xmlHttp = new XMLHttpRequest(); 
  }else if(window.ActiveXObject){
   xmlHttp = new ActionXObject("Microsoft.XMLHTTP");
  }
 }
 function firstAjax(field){
  if(trim(field.value).length!=0){
    createXMLHttpRequest();
    var url = "test3.jsp?userId=" + field.value+"&timestamp="+new Date().getTime();  (使用get的方式提交)
    xmlHttp.open("GET", url,true);
    xmlHttp.onreadystatechange = function(){
     if(xmlHttp.readyState == 4){
     if(xmlHttp.status == 200){
         document.getElementById("spanUserId").innerHTML = "<font color= 'red' size='+0'>"+xmlHttp.responseText+"</font>";
     }else{
      alert("请求错误!"+xmlHttp.status);
     } 
    }   
    };
    xmlHttp.send(null);
  }else{
    document.getElementById("spanUserId").innerHTML ="";
  }
 }
        注意: 1. 当为空字符的时候,应该将对象的html设为没有。
                      2. 署名函数的使用
                      3. ***为了防止缓存捣乱的问题: 在url地址的后面加一个时间圈。
                      4. 线程不安全,所以应该一个请求,一个xmlHttpRequest。
6.推荐一本电子书: ajax.pdf

1.实际应用:
          1.oracle分页查询的实现。
          2.使用pageModel对查询的数据进行二次的封装。
          3.关于显示的时候,有可能为空的问题。

作业遇到的问题:
          1. 日期是字符串,一个字符串如何装化成日期存到一个对象中?
          2. 两个字符串如何比较日期的大小?

 

                                             用户的增删改查和分页pagemodel的封装
1. 彻底理解: window.self.location = "useradd.jsp"; (Location 对象是由 JavaScript runtime engine 自动创建的,包含有关当前 URL 的信息)
             这里的location已经包含了当前的url,所以从同一级进行跳转。

2. 实际应用:
            1. 使用pagemodel彻底的封装。
            2. 完成分页的功能。
            3. 使用三目运算符解决在页面上展示为空的问题。就是将null转化成""
            4. 关于泛型的封装: 是为了提前发现错误,可以用T这个标识来代替。
作业:将查询的按钮变灰。

            5. 完成checkbox的全部选中的功能。
            6. 删除时步骤:
                    判断是否有选中的checkbox?给出是否真正删的提示?真的删除。
            7. js中如何跳转?
                window.self.location = "user_modify.html?userId="+selectFlag[index].value;

 

                                                 开学第五天
1. 知识点:
          1.readonly和disabled的区别
            <input name="userId" type="text" class="text1" id="userId" size="10" maxlength="10" disabled="disabled">
            readonly表示只读,不能修改 
            <input name="userId" type="text" class="text1" id="userId" size="10" maxlength="10" readonly="true">
          2. 一进来,它会自动加载这个函数。
            <body class="body1" onload="init()"></body>
            function init(){
  document.getElementById("userName").focus();
     }
          3. filter的原理: 实际上就是拦截request和response的一个servlet、

    实际应用:使用filter来设置字符集。******************************************************************************
             import java.io.IOException;
             import javax.servlet.*;
             public class SetCharacterEncodingFilter implements Filter {
                     private String encoding ="";
              public void destroy() {}
              public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
   FilterChain filterChain) throws IOException, ServletException {
               servletRequest.setCharacterEncoding(encoding);
               filterChain.doFilter(servletRequest, servletResponse);
       }
              public void init(FilterConfig filterConfig) throws ServletException {
                    this.encoding =  filterConfig.getInitParameter("encoding");
       }
              }
              web.xml的配置:
                 <filter>
                        <filter-name>SetCharacterEncodingFilter</filter-name>
                        <filter-class>com.huxin.drp.util.SetCharacterEncodingFilter</filter-class>
                      <init-param>
                         <param-name>encoding</param-name>
                         <param-value>utf-8</param-value>
                      </init-param>
                 </filter>
                 <filter-mapping>
                       <filter-name>SetCharacterEncodingFilter </filter-name>
                       <url-pattern>*.jsp</url-pattern>
                 </filter-mapping>

          常见三种的匹配 :
                   eg。*.jsp  ,/sysmgr/*  , /*

     注意:filter只对post的请求起作用!!!!!!!!!!!!!!!!!!!!!!!!!!!!  

                                 用户登录和sql的注入问题。
password: ' or '1' = '1
    

原创粉丝点击