一些细节问题汇总

1.oracle插入当前时间

insert into aa(tydate) values (sysdate);
insert into dangdang_Administrator values('admin','admin','123','激活',sysdate,null);

2.Jquery验证码更换 或者一些点击事件

<img class="yzm_img" alt="加载失败" id='imgVcode' src="<s:url value="/user/getImageCode"/>" />
 
<a href="#" id="changeImg">看不清楚?换个图片</a>

点击图片,使用id选择器绑定点击事件,再次向action发送请求,拼接一个时间戳

//点击图片更换验证码    拼接时间戳
$("#imgVcode").click(function(){
    $(this).attr('src',"${pageContext.request.contextPath }/user/getImageCode?d="+new Date().getTime());
});

点击文字,使用id选择器绑定点击事件,再次向action发送请求,拼接一个随机数

//点击更换验证码   拼接随机数
$("#changeImg").click(function(){
    $("#imgVcode").attr('src',"${pageContext.request.contextPath }/user/getImageCode?d="+Math.random());
}); 

拼接的参数d是一个随机数,后台不用接收,当第一次访问页面获得验证码之后,浏览器会加入缓存,拼接时间戳和拼接随机数都是为了骗过浏览器缓存,让浏览器认为发送的是不同的请求,从新获取验证码从新响应。

3.常用数字与字母的正则表达式

验证数字的正则表达式集
验证数字:1$
验证n位的数字:^\d{n}$
验证至少n位数字:^\d{n,}$
验证m-n位的数字:^\d{m,n}$
验证零和非零开头的数字:^(0|[1-9][0-9]
)$
验证有两位小数的正实数:2+(.[0-9]{2})?$
验证有1-3位小数的正实数:3+(.[0-9]{1,3})?$
验证非零的正整数:^+?[1-9][0-9]$
验证非零的负整数:^-[1-9][0-9]
$
验证非负整数(正整数 + 0) ^\d+$
验证非正整数(负整数 + 0) ^((-\d+)|(0+))$
验证长度为3的字符:^.{3}$
验证由26个英文字母组成的字符串:4+$
验证由26个大写英文字母组成的字符串:5+$
验证由26个小写英文字母组成的字符串:6+$
验证由数字和26个英文字母组成的字符串:7+$
验证由数字、26个英文字母或者下划线组成的字符串:^\w+$
验证用户密码:8\w{5,17}$ 正确格式为:以字母开头,长度在6-18之间,只能包含字符、数字和下划线。
验证是否含有 ^%&’,;=?KaTeX parse error: Can't use function '\"' in math mode at position 1: \̲"̲ 等字符:[^%&',;=?\x22]+
验证汉字:9,{0,}$
验证Email地址:^\w+[-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)$
验证InternetURL:^http://([\w-]+.)+[\w-]+(/[\w-./?%&=]
)?$ ;10+://(w+(-w+))(.(w+(-w+)))(?S)?$
验证电话号码:^((\d{3,4})|\d{3,4}-)?\d{7,8}KaTeX parse error: Undefined control sequence: \d at position 99: …证号(15位或18位数字):^\̲d̲{15}|\d{}18
验证一年的12个月:^(0?[1-9]|1[0-2])$ 正确格式为:“01”-“09”和“1”“12”
验证一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$ 正确格式为:01、09和1、31。
整数:^-?\d+$
非负浮点数(正浮点数 + 0):^\d+(.\d+)?$
正浮点数 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$
非正浮点数(负浮点数 + 0) ^((-\d+(.\d+)?)|(0+(.0+)?))$
负浮点数 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$
浮点数 ^(-?\d+)(.\d+)?
符号表示意义:
匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
[\u4e00-\u9fa5]{2,20} 匹配2-20个汉字

  • 重复零次或更多次
  • 重复一次或更多次
    ? 重复零次或一次
    {n} 重复n次
    {n,} 重复n次或更多次
    {n,m} 重复n到m次

\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符

(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name’exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
注释
(?#comment) 这种类型的组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

使用案例

 if(reg.test($(this).val())==false){
    		$("#usererror").html("<font style='color:red;'>非法字符集</font>");
    		panduan =false;
    	}

4.关于frame标签的页面跳转方式

语法 XXXXX

属性值

值描述

_blank 在新窗口中打开被链接文档。

_self 默认。在相同的框架中打开被链接文档。

_parent 在父框架集中打开被链接文档。

_top 在整个窗口中打开被链接文档。

framename 在指定的框架中打开被链接文档

问题:页面分为上下两个frame,分别为A,B,frame B又分为1和2左右两个frame,在frame1种的连接如何跳转到整个frameB
解决方案一:如果是html标记的链接,可以用属性target="_parent"表示,直接跳转到父框架中。
解决方案二:使用asp.net控件,使用Response.Redirect("")时,没有target参数可用,可以使用一个中间页面作为中转,使用javascript脚本自动跳转。
如果还要在页面间同时传递参数,中间页面可以选择.aspx页面处理参数,但不清楚javascript能不能直接处理形式为url?a=b的参数。
具体方案如下:
1。新建中转页面redirect.aspx,加入控件textbox,在page_load()中把参数赋给textbox.text
2。在redirect.aspx中添加js函数
jump()
{
parent.location=document.all.textbox.value;
}
把的onload事件设置成该函数
注意:选用TextBox控件,如果采用Label,在js中读不出来。

如果是asp.net控件事件要求页面跳转到某一固定框架中,可采用
在实际应用中,元素必须出现在文档的HEAD标记间,要先于任何指向外部资源的元素前。如果在文档中指定了标记,那么链接将不再遵循默认的target位置,而是被明确地指向另外一个不同的target位置.

附target含义
_blank 在一个新的空窗口中装载文档,新窗口没有命名。
_parent 在链接所在窗口的直接父窗口中装载文档。
_search 在浏览器的搜索区装载文档,注意,这个功能只在Internet Explorer 5 或者更高版本中适用。
_self 在链接所在的窗口中装载文档。
_top 在最上层窗口中装载文档。

问题:在b frame中要刷新a frame中的页面
解决方案:

引伸到任意frame间跳转问题,可用型如 parent.frames[“targetFrame”].location=targeturl; 实现
变形如parent.location(…),top.location(…)等。

A标签target属性:

标签中的 target 属性规定在何处(当前窗口或新开窗口)打开链接文档。

假如在一个 标签内包含一个 target 属性,浏览器将会载入和显示用这个标签的 href 属性命名的、名称与这个目标吻合的框架或者窗口中的文档。如果这个指定名称或 id 的框架或者窗口不存在,浏览器将打开一个新的窗口,给这个窗口一个指定的标记,然后将新的文档载入那个窗口。从此以后,超链接文档就可以指向这个新的窗口。

Target属性作用:

当用户第一次选择内容列表中的某个链接时,浏览器将打开一个新的窗口,将它标记为 “view_window”,然后在其中显示希望显示的文档内容。如果用户从这个内容列表中选择另一个链接,且这个 “view_window” 仍处于打开状态,浏览器就会再次将选定的文档载入那个窗口,取代刚才的那些文档。

在整个过程中,这个包含了内容列表的窗口是用户可以访问的。通过单击窗口中的一个连接,可使另一个窗口的内容发生变化。

Target属性详解:

对于target属性的属性值可有以下5种:_blank、_self、_parent、_top、framename,下面一一讲解每个属性值的作用与其实际用法。

Target属性blank的作用

作用:所指浏览器总在一个新打开、未命名的窗口中载入目标文档。(在新窗口中打开被链接文档)

用法:网络推广

Target属性self的作用

作用:这个目标的值对所有没有指定目标的 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源文档。这个目标是多余且不必要的,除非和文档标题 标签中的 target 属性一起使用。(在相同的框架中打开被链接文档)

用法:网络推广

Target属性parent的作用

作用:这个目标使得文档载入父窗口或者包含来超链接引用的框架的框架集。如果这个引用是在窗口或者在顶级框架中,那么它与目标 _self 等效。(在父框架集中打开被链接文档)

用法:网络推广

Target属性top的作用

作用:这个目标使得文档载入包含这个超链接的窗口,用 _top 目标将会清除所有被包含的框架并将文档载入整个浏览器窗口。(在整个窗口中打开被链接文档)

用法:网络推广

Target属性framename的作用

对于framename的作用就与以上四个的用法就不同了,当采用frameset框架的时候,使用target=”frame_name”或target=”view_frame”可指定a目标的地址,也就是同一个页面当用户从左边框架中的目录中选择一个链接时,浏览器会将这个关联的文档载入并显示在右边这个”view_frame”或”frame_name” 框架中。当其他链接被选中时,右边这个框架中的内容也会发生变化,而左边这个框架始终保持不变。(在指定的框架中打开被链接文档)

其用法:

Target标签对seo的作用:

如果站在用户的角度方面,target标签对于优化用户体验的作用有一定的帮助性,当我们打开某一个页面时如果都在当前页面打开,会给用户造成极大的不便,总不能让用户每看一个页面点一次后退吧,还有就是有的用户习惯性的点击查看文章内容页后会关掉,如果都是当前页面打开,无异于提高了网站跳出率,所以一般网站的部分链接尽量使用新窗口打开

特殊的目标
有 4 个保留的目标名称用作特殊的文档重定向操作:

_blank
浏览器总在一个新打开、未命名的窗口中载入目标文档。

_self
这个目标的值对所有没有指定目标的 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源文档。这个目标是多余且不必要的,除非和文档标题 标签中的 target 属性一起使用。

_parent
这个目标使得文档载入父窗口或者包含来超链接引用的框架的框架集。如果这个引用是在窗口或者在顶级框架中,那么它与目标 _self 等效。

_top
这个目标使得文档载入包含这个超链接的窗口,用 _top 目标将会清除所有被包含的框架并将文档载入整个浏览器窗口。

提示:这些 target 的所有 4 个值都以下划线开始。任何其他用一个下划线作为开头的窗口或者目标都会被浏览器忽略,因此,不要将下划线作为文档中定义的任何框架 name 或 id 的第一个字符。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.jsp中引入js、css时出现net::ERR_ABORTED 404 (Not Found)错误

在这里插入图片描述
在这里插入图片描述

6.mybatis 中 foreach collection的三种用法

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束。

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可

以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 下面分别来看看上述三种情况的示例代码:
1.单参数List的类型:

1 <select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog">
2           select * from t_blog where id in
3        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
4                #{item}       
5        </foreach>    
6    </select>

上述collection的值为list,对应的Mapper是这样的
public List dynamicForeachTest(List ids);
测试代码:

 1 @Test
 2     public void dynamicForeachTest() {
 3         SqlSession session = Util.getSqlSessionFactory().openSession();      
 4         BlogMapper blogMapper = session.getMapper(BlogMapper.class);
 5          List ids = new ArrayList();
 6          ids.add(1);
 7          ids.add(3);
 8           ids.add(6);
 9         List blogs = blogMapper.dynamicForeachTest(ids);
10          for (Blog blog : blogs)
11              System.out.println(blog);
12          session.close();
13      }

2.单参数array数组的类型:

 1 <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
2     select * from t_blog where id in
3     <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
4          #{item}
5     </foreach>
6 </select>    

上述collection为array,对应的Mapper代码:
public List dynamicForeach2Test(int[] ids);
对应的测试代码:

 1 @Test
 2 public void dynamicForeach2Test() {
 3         SqlSession session = Util.getSqlSessionFactory().openSession();
 4         BlogMapper blogMapper = session.getMapper(BlogMapper.class);
 5         int[] ids = new int[] {1,3,6,9};
 6         List blogs = blogMapper.dynamicForeach2Test(ids);
 7         for (Blog blog : blogs)
 8         System.out.println(blog);    
 9         session.close();
10 }

3.自己把参数封装成Map的类型

1 <select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
2         select * from t_blog where title like "%"#{title}"%" and id in
3          <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
4               #{item}
5          </foreach>
6 </select>

上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:
public List dynamicForeach3Test(Map params);
对应测试代码:

@Test
    public void dynamicForeach3Test() {
        SqlSession session = Util.getSqlSessionFactory().openSession();
         BlogMapper blogMapper = session.getMapper(BlogMapper.class);
          final List ids = new ArrayList();
          ids.add(1);
          ids.add(2);
          ids.add(3);
          ids.add(6);
         ids.add(7);
         ids.add(9);
        Map params = new HashMap();
         params.put("ids", ids);
         params.put("title", "中国");
        List blogs = blogMapper.dynamicForeach3Test(params);
         for (Blog blog : blogs)
             System.out.println(blog);
         session.close();
     }

Mybatis插入空值或者放置空值问题总结

1、MyBatis 通过包含的jdbcType类型
BIT、FLOAT、CHAR 、TIMESTAMP 、 OTHER 、UNDEFINEDTINYINT 、REAL 、VARCHAR 、BINARY 、BLOB NVARCHAR、SMALLINT 、DOUBLE 、LONGVARCHAR 、VARBINARY 、CLOB、NCHAR、INTEGER、 NUMERIC、DATE 、LONGVARBINARY 、BOOLEAN 、NCLOB、BIGINT 、DECIMAL 、TIME 、NULL、CURSOR

2、Mybatis中javaType和jdbcType对应和CRUD例子

<resultMap type="java.util.Map" id="resultjcm">
  <result property="FLD_NUMBER" column="FLD_NUMBER" javaType="double" jdbcType="NUMERIC"/>
  <result property="FLD_VARCHAR" column="FLD_VARCHAR" javaType="string" jdbcType="VARCHAR"/>
  <result property="FLD_DATE" column="FLD_DATE" javaType="java.sql.Date" jdbcType="DATE"/>
  <result property="FLD_INTEGER" column="FLD_INTEGER"  javaType="int" jdbcType="INTEGER"/>
  <result property="FLD_DOUBLE" column="FLD_DOUBLE"  javaType="double" jdbcType="DOUBLE"/>
  <result property="FLD_LONG" column="FLD_LONG"  javaType="long" jdbcType="INTEGER"/>
  <result property="FLD_CHAR" column="FLD_CHAR"  javaType="string" jdbcType="CHAR"/>
  <result property="FLD_BLOB" column="FLD_BLOB"  javaType="[B" jdbcType="BLOB" />
  <result property="FLD_CLOB" column="FLD_CLOB"  javaType="string" jdbcType="CLOB"/>
  <result property="FLD_FLOAT" column="FLD_FLOAT"  javaType="float" jdbcType="FLOAT"/>
  <result property="FLD_TIMESTAMP" column="FLD_TIMESTAMP"  javaType="java.sql.Timestamp" jdbcType="TIMESTAMP"/>
 </resultMap>

在这里插入图片描述

一、指定插入值得jdbcType,将sql改成 insert into user(id,name) values(#{id,jdbcType=VARCHAR},#{name,jdbcType=VARCHAR}) 

在这里插入图片描述

非法使用long类型数据

LONG列不能出现在SQL语句的某些部分:
1、在WHERE、GROUP BY、ORDER BY、CONNECT BY子句以及在具有DISTINCT 操作的SELECT语句中。
2、SQL函数(如SUBSTR或INSTR)
3、表达式或条件。
4、包含有GROUP BY子句的查询的选择表。
5、在子查询的选择表或由集合操作组合查询选择表。
6、CREATE TABLE AS SELECT语句的选择表。
使用说明:
1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
4、很多工具,包括SQLPlus,处理LONG 数据类型都是很困难的。
5、LONG 数据类型的使用中,要受限于磁盘的大小。
能够操作 LONG 的 SQL 语句:
1、Select语句
2、Update语句中的SET语句
3、Insert语句中的VALUES语句
限制:
1、一个表中只能包含一个 LONG 类型的列。
2、不能索引LONG类型列。
3、不能将含有LONG类型列的表作聚簇。
4、不能在SQL
Plus中将LONG类型列的数值插入到另一个表格中,如insert into …select。
5、不能在SQL*Plus中通过查询其他表的方式来创建LONG类型列,如create table as select。
6、不能对LONG类型列加约束条件(NULL、NOT NULL、DEFAULT除外),如:关键字列(PRIMARY KEY)不能是 LONG 数据类型。
7、LONG类型列不能用在Select的以下子句中:where、group by、order by,以及带有distinct的select语句中。8、LONG类型列不能用于分布查询。
9、PL/SQL过程块的变量不能定义为LONG类型。
10、LONG类型列不能被SQL函数所改变,如:substr、instr。

foreach

在这里插入图片描述

Ajax 发送post请求

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>login test</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="ajax方式">
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript">
        function login() {
            $.ajax({
            //几个参数需要注意一下
                type: "POST",//方法类型
                dataType: "json",//预期服务器返回的数据类型
                url: "/users/login" ,//url
                data: $('#form1').serialize(),
                success: function (result) {
                    console.log(result);//打印服务端返回的数据(调试用)
                    if (result.resultCode == 200) {
                        alert("SUCCESS");
                    }
                    ;
                },
                error : function() {
                    alert("异常!");
                }
            });
        }
    </script>
</head>
<body>
<div id="form-div">
    <form id="form1" onsubmit="return false" action="##" method="post">
        <p>用户名:<input name="userName" type="text" id="txtUserName" tabindex="1" size="15" value=""/></p>
        <p>密 码:<input name="password" type="password" id="TextBox2" tabindex="2" size="16" value=""/></p>
        <p><input type="button" value="登录" onclick="login()">&nbsp;<input type="reset" value="重置"></p>
    </form>
</div>
</body>
</html>

在常用方式中,点击的登录按钮的type为"submit"类型;
在常用方式中,form的action不为空;
ajax方式中需要注意的是 . a j a x 方 法 中 的 参 数 : d a t a T y p e 和 d a t a 。 我 平 时 很 少 写 前 端 代 码 , 级 别 也 就 是 入 门 级 别 , 能 看 懂 能 改 而 已 , 所 以 很 多 时 候 都 是 百 度 , 像 这 次 这 个 功 能 的 实 现 也 是 借 助 了 百 度 , 但 是 , 我 百 度 到 的 代 码 在 .ajax方法中的参数:dataType和data。 我平时很少写前端代码,级别也就是入门级别,能看懂能改而已,所以很多时候都是百度,像这次这个功能的实现也是借助了百度,但是,我百度到的代码在 .ajaxdataTypedata.ajax方法中设置的dataType参数值为"html"而不是"json",导致我在一开始调试的时候一直报错,最终是改成了"json"才成功,因此在这里特别说明并提醒一下,别和我一样走错了路,还有就是向服务端传输的data值了,像上面代码一样,将form表单中的数据序列化传输即可。


  1. 0-9 ↩︎

  2. 0-9 ↩︎

  3. 0-9 ↩︎

  4. A-Za-z ↩︎

  5. A-Z ↩︎

  6. a-z ↩︎

  7. A-Za-z0-9 ↩︎

  8. a-zA-Z ↩︎

  9. \u4e00-\u9fa5 ↩︎

  10. a-zA-z ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从入门小白到小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值