JAVA新手知識點(個人向)

stat的值

循環時stat的屬性
current:當前這次迭代的(集合中的)項。
index:當前這次迭代從0開始的迭代索引。
count:當前這次迭代從1開始的迭代計數。
first:用來表明當前這輪迭代是否爲第一次迭代,該屬性爲boolean類型。
last:用來表明當前這輪迭代是否爲最後一次迭代,該屬性爲boolean類型。
begin:begin屬性的值。
end:end屬性的值

所有的id以choose開頭的複選框的選中狀態和allChoose的一樣

//id以chose開頭的選擇
$("input[id^='choose']").prop("checked", $(this).prop("checked"));

**^='**'
//判斷checkbox?是否選中??
$("#id").is(":checked");//選中,返回true,沒選中,返回false??
//設置checkbox爲選中狀態??
$("#id").prop("checked",true);??
//設置checkbox爲不選中狀態?
$("#id").prop("checked",false);
//判斷哪個多選框別選中的jsp代碼:
<input type="radio" id="radioId" name="radioname" value="A" checked="checked"/>apple
<input type="radio" id="radioId" name="radioname" value="A" checked="checked"/>orange
<input type="radio" id="radioId" name="radioname" value="A" checked="checked"/>pear
jQuery:
alert("value="+$("input[name='radioname']:checked").val());

ajax傳遞數據時設置this可用

$.ajax({
	url : path + "/manage/questionType/delete",
	data : {id : id},
	success : function() {
	$(this).parent().parent().remove();
	//$("#tr"+id).remove();
	}.bind(this)
	});

批量刪除與批量添加

刪除

//全選框的設定
$("#allchose").click(function(){
//給全選框加點擊事件,點擊選擇當前頁面所有單選框
		if($(this).is(":checked")){
			 $("[id=choose${param.pageno}]").attr("checked",true);
		}
		else{
			 $("[id=choose${param.pageno}]").attr("checked",false);
		}
	})
//給當前頁面的單選框加點擊事件,如果點擊則遍歷查找是否都選中
	$("[id=choose${param.pageno}]").click(function(){
		alert(1);
		var a=false;
		$("[id=choose${param.pageno}]").each(function(){
			if(!$(this).is(":checked")){
				a=true;
			}
		})
//如果沒有都選中則去掉全選框,如果都選中則加上全選框
		if(a==false){
			$("#allchose").attr("checked",true)
		}
		else{
			$("#allchose").attr("checked",false)
		}
		
	})
	
})
//將數據傳給controller
$("#deleteallarticles").click(function(){
		var a="";
		//獲得所有選中的數字的id
		$(":checked[id^='choose']").each(function(){
			var m=$(this).next().html();
			a+=m+',';
		})
		//移除<tr>
		$(":checked[id^='choose']").each(function(){
			$(this).parent().parent().remove();
		})
		if(a.length>1){
		//去掉最後一個,
			a = a.substring(0, a.length - 1);
			$.ajax({
				url:"manage/deletesomearticle",
				type:"post",
				data:{ids:a},
				success:function(mes){
					
				}
			})
		}
		else{
			alert("不能不選擇")
		}
	})
//controller裏面
 @RequestMapping("manage/deletesomearticle")
 @ResponseBody
 public void deletesomearticle(String ids){
	 String[] array = ids.split(",");
	 List<Integer> listid = new ArrayList<Integer>();
	 for(String temp:array){
	     listid.add(Integer.parseInt(temp));
	 }
//批量刪除
as.deletesomearticle(listid);
}
//mybities裏面
   <update id="deletesomearticle" >
  update article set article.`enable`=false where id in 
  
        <foreach collection="list" open="(" close=")" 
        item="id" separator=",">
            #{id}
        </foreach>
   
  </update>

添加

 //jsp裏面
 //添加標題
 <input type="text" id="title">
 <br>
 //添加內容
 <input type="text" id="info">
 <br>
 //置頂要通知的員工
 <br>
 <c:forEach items="${allEmp }" var="allEmp" varStatus="stat">
  <input type="checkbox" id="someemp" value="${allEmp.id }">${allEmp.name }
 </c:forEach>
 <br>
 <input type="button" value="確定添加" id="sure">
 $("#sure").click(function(){
	 var aa="";
	 var cc=0;
		$(":checked[id='someemp']").each(function(){
			var m=$(this).val();
			aa+=m+',';
			 cc=cc+1;
		})
		$(":checked[id='choose']").each(function(){
			$(this).parent().parent().remove();
		})		 
	 var title=$("#title").val();
	 var info=$("#info").val();
	 var empCount=cc;
	 var zz = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{1,25}$/;
	 var zz1 = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{1,1500}$/;
	 var flag1=zz.test(title);
	 var flag2=zz1.test(info);
	 if(flag1==true&&flag2==true){
		 $.ajax({
			 url:"<%=path%>/insertNotice",
			 type:"post",
			 data:{title:title,info:info,empCount:empCount,listid:aa},
			 success:function(mes){
				 
			 }
		 })
	 }
	 else{
		 alert("不能爲空")
	 } 
 })
// controller裏面
@RequestMapping("insertNotice")
@ResponseBody
public void getInsertNotice(Notice notice,String listid){
	//添加一個表
	ns.insert(notice);
	//查找剛剛插入語句的id
	Integer a=ns.findnewNotice();
	//批量添加
	 String[] array = listid.split(",");
	 List<Integer> listemp = new ArrayList<Integer>();
	 for(String temp:array){
		 listemp.add(Integer.parseInt(temp));
	 }
	 ns.Insertsome(a, listemp);
}
}
// dao裏面
 //添加新的notice
	void insert(Notice notice);
	//查找新加入的notice的id
	Integer findnewNotice();
	//批量添加
	void Insertsome(@Param("noticeid")Integer noticeid,@Param("listempid")List<Integer> listemp);
// mybities裏面
  <insert id="insert" parameterType="vo.Notice">
  insert into notice(title,info,empCount) values(#{title},#{info},#{empCount})
  </insert>
  <select id="findnewNotice" resultType="Integer">
  select max(id) from notice ;
  </select>
  <insert id="Insertsome">
    insert into notice_emp(noticeId,empId) values 
   <foreach collection="listempid" open="" close="" item="id" separator=",">
  (#{noticeid},#{id})
    </foreach> 
  </insert>

下拉列表框

//跳轉頁面後設置默認選中
//默認複選框選中
$(document).ready(function(){  
     var defaultId = "${param.menuid}";  
     $("select option").each(function(){  
       if($(this).val()==defaultId){  
         $(this).attr("selected","selected");  
         }  
        });  
    });  
//默認單選框選中
<script type="text/javascript">
	$(document).ready(function(){
	$("input[value=${sessionScope.userinfo.sex}]").prop("checked",true);
	});
</script>
//獲得下拉列表框的值
//兩種方法獲取select下拉框選中的option的值
//第一種
<select name="type" id="aaa" onchange="show_sub()">      
    <option value="0">請選擇主菜名</option>      
    <option value="1">白菜</option>      
    <option value="2">蘿蔔</option>      
 </select>  
 function show_sub(){     
 alert($("#aaa").find("option:selected").attr("value"));//原生  
  alert($("#aaa").find("option:selected").val());  //加入jq庫
} 
//第二種
<select name="type" onchange="show_sub(this.options[this.options.selectedIndex].value)">      
    <option value="0">請選擇主菜名</option>      
    <option value="1">白菜</option>      
    <option value="2">蘿蔔</option>      
 </select> 
<script>       
    function show_sub(v){       
        alert(v);       
    }       
</script>  

mybities傳多個參數的問題

一、基於註解
public List<XXXBean> getXXXBeanList(@Param("id")String id, @Param("code")String code);  
<select id="getXXXBeanList" resultType="XXBean">
  select t.* from tableName where id = #{id} and name = #{code}  
</select>  
由於是多參數那麼就不能使用parameterType, 這裏用@Param來指定哪一個
二、Map封裝多參數:  
public List<XXXBean> getXXXBeanList(HashMap map);  
<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">
	select 字段... from XXX where id=#{xxId} code = #{xxCode}  
</select>  
其中hashmap是mybatis自己配置好的直接使用就行。map中key的名字是那個就在#{}使用那個,map如何封裝就不用了我說了吧。 
三、List封裝in:
public List<XXXBean> getXXXBeanList(List<String> list);  
<select id="getXXXBeanList" resultType="XXBean">
  select 字段... from XXX where id in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
    #{item}  
  </foreach>  
</select>  
foreach 最後的效果是select 字段... from XXX where id in ('1','2','3','4') 

jquary的顯示和隱藏

jQuery的hide()show()
通過 jQuery,您可以使用 hide()show() 方法來隱藏和顯示 HTML 元素:

$("#hide").click(function(){
  $("p").hide();
});
$("#show").click(function(){
  $("p").show();
});

零碎的知識點

@RequestMapping()中的mothod默認是post和get方法都可以,通過前端自適應
//將某個數據打印到工具臺上
  console.log(form);
//jquary中string和int的轉化
Jquary自帶parseInt方法,可以點出來
//resource和Autowired
@resource@Autowired 兩者
都可以做bean 注入。兩者都可以在setter方法和字段上使用不同:resource按照類型裝配對象,默認要求依賴對象必須存在如果可以爲null需要required爲falses在xml裏面用《scope》test<scoper>可以限制編譯
//阻止a鏈接的跳轉行爲 
 e.preventDefault();
 //兩個路徑請求一個controller
@webservlet({"/servlet/text"},"/adv")
//html的日曆標籤
<span>日期:</span><input style="height:30px" type="date" name="date"/>  

上下移動

//修改排序
//jsp裏面
//上移 
$("[id='articleup']").bind("click",function(){
    var $this  = $(this);
    var id1=$this.next().html();
  	var curTr = $this.parents("tr");
    var prevTr = $this.parents("tr").prev();
  	var id2=prevTr.find("[id=articleup]").next().html();
    if(prevTr.length == 0){
        alert("已經是第一行了");
        return;
    }else{
    	prevTr.before(curTr);//before是將div和上一個div互換位置
    	$.ajax({
        	url:"manage/articleupanddown",
        	type:"post",
        	data:{id1:id1,id2:id2},
        	success:function(mens){
        	}
        })
 }
});
//下移
$("[id='articledown']").bind("click",function(){
	var $this  = $(this);
    var curTr = $this.parents("tr");
    var nextTr = $this.parents("tr").next();
    var id1=$this.next().html();
    var id2=nextTr.find("[id=articledown]").next().html();
    if(nextTr.length == 0){
        alert("已經是最後一行了");
        return;
    }else{
        nextTr.after(curTr);//after是將div和下一個div互換位置
        $.ajax({
        	url:"manage/articleupanddown",
        	type:"post",
        	data:{id1:id1,id2:id2},
        	success:function(mens){
        	}
        })
   }
});
//controller裏面
@RequestMapping("manage/articleupanddown")
	 @ResponseBody
	 public void getarticleupanddown(Integer id1,Integer id2){
		//文章上移
		//獲取第一個id的屬性
		//獲取第二個id的屬性
	Article a1=	as.selectById(id1);
	Article a2=	as.selectById(id2);
	Article a3=new Article();
	a3.setId(a1.getId());
	a3.setSort(a2.getSort());
	Article a4=new Article();
	a4.setId(a2.getId());
	a4.setSort(a1.getSort());
	//更改兩者的屬性
	as.updateById(a3);
	as.updateById(a4);
}

圖片上傳

//在spring-mvc設置
<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="UTF-8"></property>
		<property name="maxUploadSize" value="-1"></property>
		<property name="resolveLazily" value="true"></property>
	</bean>
//jsp代碼
        <p class="error-text" ><i class="icon-picture"></i>【鏈接圖片】 <input type="text" id="pho"></p>
    <form id="test">    
    選擇文件:<input data-role="none" type="file" name="file" width="120px"> 
   	 <input type="button"  onclick="testUpload();" value="上傳圖片">  </form>
 	<img id="onepho" alt="" src="">
<script type="text/javascript">
    function testUpload(){  
       var form = new FormData(document.getElementById("test"));  
      var url ="uploadimages";  
        $.ajax({  
            url : url,  
            data : form,  
            type : "post",  
            processData:false,  
            contentType:false,  
            success : function(mes){  
            	if(mes==1){
            		alert("圖片重名")
            	}
            	if(mes==2){
            		alert("請選擇圖片")
            	}
            	else{
            		alert(mes); 
                    $("#onepho").attr("src","<%=path %>/images/"+mes);	
                    $("#onepho").attr("style","width:100px;height:60px;");	
                    $("#pho").attr("value",mes);
            	}
             }
        });  
    }  
</script>
//controller裏面
@RequestMapping("uploadimages")
@ResponseBody
public void getuploadimages(MultipartFile file,HttpServletRequest request,HttpServletResponse response){  
	    //圖片名稱
	    String path = request.getSession().getServletContext().getRealPath("/images");   
	    //圖片名稱
	    String fileName = file.getOriginalFilename();
	   System.out.println(file.getContentType()); 
	    PrintWriter writer = null;
	  		try {
	  			writer = response.getWriter();
	  		} catch (IOException e1) {
	  			// TODO Auto-generated catch block
	  			e1.printStackTrace();
	  		}
	    if(fileName!=null){
	    	  //利用UUID或得隨機文件名
	 		String filenames=UUID.randomUUID().toString();
	 		//獲得存取的名稱
	       String a=filenames+fileName;
	 		//圖片存取路徑
		    File dir = new File(path, a);  
		    //查看是否存在這個文件夾,不存在,則創建這個文件夾
		    if(!dir.exists()){  
		        dir.mkdirs();  
		    }  
		//  轉存文件
		    try {
				file.transferTo(dir);
				writer.print(a);
			} catch (IllegalStateException e) {
				// TODO Auto-generated catch block
				writer.print(1);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				writer.print(1);
			}  
		}  	
	    else{
	    	writer.print(2);
	    }	
}

分頁 查詢

controller裏面:
 	ModelAndView mv=new ModelAndView();
	//分頁讀取友情鏈接表內容
	//分頁查詢
		Pager pager=new Pager();
		//查詢每一頁顯示的數量
		Config config=cfs.finpagesize();
		pager.setPagersize(Integer.parseInt(config.getValue()));
		//查找總的數量
		Integer count=ls.findallcount();//總數量
		//總頁面數量
		int pagercount=(count-1)/pager.getPagersize()+1;
		pager.setPagercount(pagercount);
		int pagerblur=1;
		if(pagerno==null){
			pagerno=1;
		}
		  try {
			  pagerblur=pageno;
			} 
		catch (Exception e) {
				// TODO: handle exception
			}
		pager.setPagerblur(pagerblur);
		int str=(pager.getPagerblur()-1)*pager.getPagersize();
		pager.setPagetstart(str);
		 List<Links> a=ls.listlink(pager);
		mv.addObject("pagerno", pager);
		mv.addObject("listlinks", a);
		mv.setViewName("manage/managelinks");
		return mv;
jsp裏面:
<c:forEach items="${requestScope.listlinks}" var="listlinks" varStatus="stat">
        <tr>
          <td>${listlinks.title }</td>
          <td>${listlinks.url }</td>
          <td>${listlinks.inputTime }</td>
           <td><a href="#myModal" role="button" data-toggle="modal"><i class="icon-search"></i></a><span style="display: none">${listlinks.id }</span></td>
          <td><a href="javaScript:void(0)"><i class="icon-circle-arrow-up"></i></a><span style="display: none">${listlinks.id }</span></td>
          <td><a href="javaScript:void(0)"><i class="icon-circle-arrow-down"></i></a><span style="display: none">${listlinks.id }</span></td>
          <td><a href="javaScript:void(0)" id="deleteonearticle"><i class="icon-trash"></i></a><span style="display: none">${listlinks.id }</span></td>
        </tr>
</c:forEach>	   
<div class="pagination">
   <ul>
   	<li><a href="manage/manageadposition?pageno=1">首頁</a></li>
        <li><a href="manage/manageadposition?pageno=${pagerno.pagerblur-1}">前一頁</a></li>
        <c:forEach begin="${pagerno.pagerblur}" end="${pagerno.pagerblur+2>pagerno.pagercount?pagerno.pagercount:pagerno.pagerblur+2}" var="i">
   						 <c:if test="${pagerno.pagerblur eq i}" var="isEq">
    					<li><span style="color: red">[${i}]</span></li>
   					 	</c:if>
    					<c:if test="${not isEq }">
    					<li><a href="manage/manageadposition?pageno=${i}">[${i}]</a></li>
   						 </c:if>
   						 </c:forEach>
        <li><a href="manage/manageadposition?pageno=${pagerno.pagerblur+1}">下一頁</a></li>
   	<li><a href="manage/manageadposition?pageno=${pagerno.pagercount}">尾頁</a></li>
    </ul>
</div>

ip地址的獲取

方案一.採用搜狐的接口
<script src="http://pv.sohu.com/cityjson?ie=utf-8"></script> 

 var f=returnCitySN["cip"]+','+returnCitySN["cname"];
//其中returnCitySN["cip"]獲取當前用戶的ip
//其中returnCitySN["cname"]獲取當前用戶所在的城市
方案二.直接在java裏面獲取當前用戶的ip,不能獲得地址

數據庫創建規範與是spring

創建規範:
不存在依賴關係
有主鍵
列不可分割,原子性
Spring:
輕量級控制反轉和麪向切面的MVC容器框架
事務:一系列的事,都成功,或者都失敗
構造函數也可以注入

配置事務管理器和事務的註解驅動

 在application.xml裏面
//<!-- 配置事務管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"></property>
</bean>
//<!-- 事務的註解驅動 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 
//事務通知
//<tx:advice id="txAdvice">
//<tx:attributes>
//所有方法使用缺省事務
//<tx:method name="*" />
//</tx:attributes>
//</tx:advice>
//<aop:config>
//定義切入點表達式
//<aop:pointcut id="defaultServiceOperation"
//expression="execution(* com.wanmait.demo.service.impl.AdminServiceImpl.login*(..))" />
//事務通知和切入點表達式進行關聯
<aop:advisor pointcut-ref="defaultServiceOperation"
advice-ref="txAdvice" />
</aop:config> -->
<aop:aspectj-autoproxy />
<context:component-scan base-package="com.wanmait.demo.service"></context:component-scan>
<context:component-scan base-package="com.wanmait.demo.aop"></context:component-scan>
事務一般加在業務邏輯層.ServiceImpl
 @Transactional

mysql查詢最大值最小值分組

select cityName,Max(id),provinceId from city group by provinceId 
	group是分組
	Max取最大值


ajax請求json和處理json:json


A--pom文件裏面
<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.8.5</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.8.5</version>
		</dependency>
			<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>2.8.5</version>
		</dependency>
B--Spring-mvc裏面
 <mvc:annotation-driven >
		<mvc:message-converters>
			<bean class="org.springframework.http.converter.StringHttpMessageConverter"></bean>
			<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean>
		</mvc:message-converters>
</mvc:annotation-driven>
 
C--jsp裏面
//將數據轉變成字符串
 var jsonString = JSON.stringify(form);
 <script type="text/javascript">
    $("#aaa").click(function(){
    	$.ajax({
    		  	url:"manage/jjson",    //請求的url地址
    		    contentType:"application/json; charset=utf-8",
    		    dataType:"json",   //返回格式爲json
    		    async:true,
    		    data:JSON.stringify({    }),//傳遞json數據
    		    type:"post", 
    		    success:function(mes){
    		    	$("#aao").empty();
    		    	for(var i=0;i<mes .length;i++)
    				{
    		    		$("#aao").append(mes[i].provincename);//append,往。。。裏面添加什麼東西
    				}
    		    }
    	})
    })
</script>
    <div id="aao"></div>
第二種方式
$(function(){
	getcourse();
	$("#module").change(getcourse);
	var c = $("#courseid").val();
	function getcourse()
	{
		$("select[name=courseid]").empty();
		var moduleid = $("#module").val();
		$.getJSON("manage/knowledge/getcourse",{"moduleid":moduleid},function(list){
			for(var i=0;i<list.length;i++)
			{
				if(list[i].courseid==c)
					$("select[name=courseid]").append("<option selected value="+list[i].courseid+">"+list[i].coursename+"</option>");
				else
					$("select[name=courseid]").append("<option value="+list[i].courseid+">"+list[i].coursename+"</option>");
			}
		});
	}
});
controller裏面
	@RequestMapping("manage/jjson")
	@ResponseBody
	public void getjjson(HttpServletResponse response){
		//查找全部省內容
		List<Province> listprovince=pros.selectallinformation();
		
		JSONArray jsonObject= new JSONArray(listprovince);
		response.setCharacterEncoding("UTF-8");
		PrintWriter writer=null;
		try {
			writer=response.getWriter();
			writer.print(jsonObject);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
}

在線編輯器設置

A--pom文件裏面
<dependency>
    <groupId>cn.meddb</groupId>
    <artifactId>ueditor</artifactId>
    <version>20180110</version>
</dependency>
B--複製ueditor文件夾,在lib中config.json裏面配置
"imageUrlPrefix": "/wantTrain_maven", /* 圖片訪問路徑前綴 */
"imagePathFormat": "/images/{yyyy}{mm}{dd}{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
C--在jsp裏面設置
<div class="block" >
    <p class="block-heading">內容</p>
	<div class="block-body"style="height:700px">
      <textarea name="info" id="info">                  	
       </textarea>
      </div>
</div>
<!-- 配置文件 -->
	<script type="text/javascript"
		src="<%=path%>/ueditor-utf8/ueditor.config.js"></script>
	<!-- 編輯器源碼文件 -->
	<script type="text/javascript"
		src="<%=path%>/ueditor-utf8/ueditor.all.min.js"></script>
	<!-- 實例化編輯器 -->
	<script type="text/javascript">
		var ue = UE.getEditor('info', {
			initialFrameWidth : 850,
			initialFrameHeight:600,
			toolbars: [[
			     
			            'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript',
			           	'customstyle', 'paragraph', 'fontfamily', 'fontsize',
			            'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', 'simpleupload', 'emotion'
			        ]]
		});
</script>

正則 驗證


//不能以_開頭和結尾的3-15個合法字符
 var zz = /^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]{3,15}$/;
 var flag=zz.test(name);
 /D除了數字之外的
 /d數字
var zz = /^(?!_)(?!.*?_$)[\u4e00-\u9fa5]+$/;
var zzz = /^(?!_)(?!.*?_$)[a-z]+$/;
var zza = /^(?!_)(?!.*?_$)[A-Z]+$/;
var flag = zz.test(provincename);
var flag2=zzz.test(quanpin);
var flag3=zza.test(jianpin);
a.只有字母、數字和下劃線且不能以下劃線開頭和結尾的正則表達式:^(?!_)(?!.*?_$)[a-zA-Z0-9_]+$   
只有字母和數字的: ^[a-zA-Z0-9_]+$   
b. 至少一個漢字、數字、字母、下劃線: "[a-zA-Z0-9_\u4e00-\u9fa5]+"         
c.至少一個漢字的正則表達式:"^[\u4e00-\u9fa5]"  
d. 最多10個漢字: ValidationExpression="^[\u4e00-\u9fa5]{0,10}"  
e. 只含有漢字、數字、字母、下劃線不能以下劃線開頭和結尾:^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$    
   解釋:   
    ^  與字符串開始的地方匹配   
    (?!_)  不能以_開頭   
    (?!.*?_$)  不能以_結尾   
    [a-zA-Z0-9_\u4e00-\u9fa5]+  至少一個漢字、數字、字母、下劃線   
    $與字符串結束的地方匹配   
f. email正則表達式:兩種方式都可以   
   (1) \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*   
   (2) ^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*((\\.[A-Za-z]{2,}){1}$)   

縮略 截取顯示

 <%@ taglib prefix="fn"  uri="http://java.sun.com/jsp/jstl/functions"%>
 
  <td title="${listarticle.title }">
<c:if test="${fn:length(listarticle.title)>5 }">${fn:substring(listarticle.title,0,5) }....</c:if>
<c:if test="${fn:length(listarticle.title)<=5 }">${listarticle.title }</c:if>
  </td>

jsp頁面jstl標籤中的時間比較

 <c:set var="nowDate" value="<%=new java.util.Date() %>"></c:set> 
 
  		<c:if test="${nowDate >listad.endTime}">
  		
  		 <i class="icon-truck">已經過期</i>
  		
  		</c:if>  
  		<c:if test="${nowDate <listad.endTime&&nowDate>listad.startTime  }">
  		
  		 <i class="icon-truck">廣告已到運行時間,是否運行?</i>
  		
  		</c:if>  
  		<c:if test="${nowDate <listad.startTime  }">
  		
  		 <i class="icon-truck">廣告還未到運行期限</i>
  		</c:if>  

json返回時間格式化

 //通過json轉化的時間爲一串字符
 var endtime = new Date(mes[i].endTime);
 var a=endtime.getFullYear()+"-"+(endtime.getMonth()+1)+"-"+endtime.getDate();
  
 var starttime=new Date(mes[i].startTime);
var b=starttime.getFullYear()+"-"+(starttime.getMonth()+1)+"-"+starttime.getDate();

java裏面的時間比較

//在java裏講string轉換成date並進行時間比較
	try {
			Date starttime = df.parse(starttimes);
			Date endtime = df.parse(endtimes);
			ad.setStartTime(starttime);
			ad.setEndTime(endtime);
		    long diff = endtime.getTime() - starttime.getTime();//這樣得到的差值是微秒級別    
	        days = (int)diff / (1000 * 60 * 60 * 24);  
	       System.out.println(days);
	       System.out.println(adlocationid);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
//字符串時間轉換和比較
//Timestamp time;
		String s="2017-10-28 00:00:00";
		Timestamp t2 = new Timestamp(System.currentTimeMillis());//獲得當前系統時間
		Timestamp ts2 = Timestamp.valueOf(s);//string->Timestamp
		 time=ts2;
	        System.out.println(time);
	        //時間比較大小,1爲大,0爲相等,-1爲小
	        int compareTo = ts2.compareTo(ts2);
	        System.out.println(compareTo);
在mysql中時間比較方式爲
select *from evaluate where time>'2018-01-27 12:18:31' and time<'2018-01-27 12:22:11'	

數據庫mysql中的時間相加減的問題和比較

MySQL 日期、時間相減
函數:datediff(date1,date2), timediff(time1,time2)
MySQL datediff(date1,date2):兩個日期相減 date1 – date2,返回天數。
select datediff(2008-08-08,2008-08-01);7
select datediff(2008-08-01,2008-08-08);-7
MySQL timediff(time1,time2):兩個日期相減 time1 – time2,返回 time 差值。
select timediff(2008-08-08 08:08:08,2008-08-08 00:00:00);08:08:08
select timediff(08:08:08,00:00:00);08:08:08
注意:timediff(time1,time2) 函數的兩個參數類型必須相同。
日期轉換函數、時間轉換函數
 (時間、秒)轉換
函數:time_to_sec(time), sec_to_time(seconds)
select time_to_sec(01:00:05);3605
select sec_to_time(3605); — ’01:00:05′
(日期、天數)轉換
to_days(date), from_days(days)
select to_days(0000-00-00);0
select to_days(2008-08-08);733627
select from_days(0); — ‘0000-00-00′
select from_days(733627); — ‘2008-08-08′
MySQL Str to Date (字符串轉換爲日期)
函數:str_to_date(str, format)
select str_to_date(08/09/2008,%m/%d/%Y’);2008-08-09
select str_to_date(08/09/08,%m/%d/%y’);2008-08-09
select str_to_date(08.09.2008,%m.%d.%Y’);2008-08-09
select str_to_date(08:09:30,%h:%i:%s’);08:09:30
select str_to_date(08.09.2008 08:09:30,%m.%d.%Y %h:%i:%s’);2008-08-09 08:09:30
MySQL 獲得國家地區時間格式
函數:get_format()
MySQL get_format() 語法:
get_format(date|time|datetime, ‘eur’|’usa’|’jis’|’iso’|’internal’
獲得當前日期 + 時間(date + time)
函數:now()
獲得當前日期 + 時間(date + time)
函數:sysdate()
sysdate() 日期時間函數跟 now() 類似,不同之處在於:now() 在執行開始時值就得到了, sysdate() 在函數執行時動態得到值
獲得當前日期(date)
函數:curdate()
獲得當前時間(time)
函數:curtime()
alter user hr account unlock  解鎖
 序列
外鍵:foreign 主鍵 primary

循環嵌套數據重複問題

 解決辦法
    <c:set var="flag" value="0"></c:set>
      <c:forEach items="${requestScope.OneManagerAllMenuType }" var="OneManagerAllMenuType" varStatus="stat">
        <c:if test="${OneManagerAllMenuType.menuId.id==firstMenuType.id}">  
            <c:set var="flag" value="1"></c:set>
        </c:if>  
     </c:forEach> 
     <c:if test="${flag==1 }">
       <td><a href="Javascript:void(0)" ><i class="icon-heart"></i></a></td>
     </c:if>
      <c:if test="${flag==0 }">
     <td><a href="Javascript:void(0)" ><i class="icon-heart-empty"></i></a></td>
     </c:if>

lucene

//pom文件裏面
 <dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-core</artifactId>
    <version>6.4.1</version>
</dependency>

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-analyzers-common</artifactId>
    <version>6.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-queryparser</artifactId>
    <version>6.4.1</version>
</dependency>
<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-highlighter</artifactId>
    <version>6.4.1</version>
</dependency>
<dependency>
    <groupId>com.janeluo</groupId>
    <artifactId>ikanalyzer</artifactId>
    <version>2012_u6</version>
</dependency>
//controller裏面
//創建索引
@RequestMapping("createArticleIndex")
	@ResponseBody
	public void createArticleIndex(HttpServletRequest request,HttpServletResponse response){
		//更新config表裏面的文章索引的創建時間
		Config config =new Config();
		config.setId(12);
		//將現在的時間改爲字符串添加到value裏面
		String dateStr = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
		config.setValue(dateStr);
		cs.updateById(config);
		//創建文章的索引
		String indexDir=request.getSession().getServletContext().getRealPath("/ArticleIndex");
		System.out.println(indexDir);
		List<Article> allArticle=arts.findAllArticle();
		IndexWriter indexWriter = null;
		// 索引存儲路徑
		Directory dir = null;
		try {
			dir = FSDirectory.open(Paths.get(indexDir));
			// 標準分詞器
			//StandardAnalyzer analyzer = new StandardAnalyzer();
			IKAnalyzer analyzer = new IKAnalyzer();
			//HanLP.segment(indexDir);
			//HanLP analyzer = new HanLP();
			// 寫入器配置
			IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
			// 索引寫入器
			indexWriter = new IndexWriter(dir, indexWriterConfig);
			// 刪除原有索引
			indexWriter.deleteAll();
			Document doc = null;
			// 添加索引文檔到寫入器
			for (Article article : allArticle) {
				
				// 創建文檔
				doc = new Document();
				// 添加字段
				Field idField = new IntPoint("id", article.getId());
				doc.add(idField);
				doc.add(new StoredField("id", article.getId()));
				doc.add(new NumericDocValuesField("id", article.getId()));
				Field titleField = new TextField("title", article.getTitle(),Store.YES);
				doc.add(titleField);
				Field nameField = new TextField("name", article.getAdmin().getUsername(),Store.YES);
				doc.add(nameField);
				DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
				doc.add(new StringField("inputTime", dateFormat.format(article.getInputTime()), Store.YES));
				indexWriter.addDocument(doc);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (indexWriter != null) {
				try {
					indexWriter.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (dir != null) {
				try {
					dir.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
}
//進行搜索
	@RequestMapping("searchArticleIndex")
	@ResponseBody
	public List<Article> searchArticleIndex(Integer count,String type,String keyword,HttpServletRequest request){
	//搜索查找文章
		String indexDir=request.getSession().getServletContext().getRealPath("/ArticleIndex");
		List<Article> allArticle = new ArrayList<Article>();
		Directory dir = null;
		IndexReader indexReader = null;
		try {
			dir = FSDirectory.open(Paths.get(indexDir));
			indexReader = DirectoryReader.open(dir);
			// 索引查詢器
			IndexSearcher indexSearcher = new IndexSearcher(indexReader);
			// 分詞器,要和創建索引的時候使用的分詞器相同
			// StandardAnalyzer analyzer = new StandardAnalyzer();
			IKAnalyzer analyzer = new IKAnalyzer();
			// 查詢解析器,查詢名爲title的字段
			QueryParser queryParser = new QueryParser(type, analyzer);
			Query query = queryParser.parse(keyword);
			// 返回最多10個相關度最高的文檔
			// TopDocs topDocs = indexSearcher.search(query, 10);
			// 默認按着升序進行排序
			// SortField sortField = new SortField("id", Type.INT);
			// 第三個參數表示是否按着降序排序,不指定默認按着升序
			SortField sortField = new SortField("id", Type.INT, true);
			Sort sort = new Sort(sortField);
			// TopDocs topDocs = indexSearcher.search(query, 10,sort);
			TopDocs topDocs = indexSearcher.search(query,count, sort, true, false);
			// 高亮顯示
			QueryScorer queryScorer = new QueryScorer(query);
			// 得到得分片段,即包含查詢關鍵詞的摘要
			Fragmenter fragmenter = new SimpleSpanFragmenter(queryScorer);
			SimpleHTMLFormatter simpleHTMLFormatter = new SimpleHTMLFormatter(
					"<b><font color='red'>", "</font></b>");// 對查詢的數據格式化;無參構造器的默認是將關鍵字加粗
			Highlighter highlighter = new Highlighter(simpleHTMLFormatter,
					queryScorer);
			highlighter.setTextFragmenter(fragmenter);// 設置成高亮
			// 獲得得分文檔集合
			ScoreDoc[] scoreDocs = topDocs.scoreDocs;
			Article  at = null;
			for (ScoreDoc scoreDoc : scoreDocs) {
				// 文檔編號
				int docId = scoreDoc.doc;
				// 獲得文檔
				Document doc = indexSearcher.doc(docId);
				String id = doc.get("id");
				String title = doc.get("title");
				if (title != null) {
					TokenStream tokenStream = analyzer.tokenStream("title",title);
					try {
						title = highlighter.getBestFragment(tokenStream, title);
					} catch (InvalidTokenOffsetsException e) {
						e.printStackTrace();
					}
					System.out.println("title=" + title);
				}
				String name=doc.get("name");
				String inputTime = doc.get("inputTime");
				at = new Article();
				Admin admin=new Admin();
				admin.setUsername(name);
				at.setAdmin(admin);
				at.setId(Integer.parseInt(id));
				at.setTitle(title);
				DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
				at.setInputTime(new Timestamp(dateFormat.parse(inputTime).getTime()));
				allArticle.add(at);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (java.text.ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (indexReader != null) {
				try {
					indexReader.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if (dir != null) {
				try {
					dir.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		return allArticle;
	}
//其他補充
//查詢多個字段
//QueryParser queryParser = new QueryParser("title", analyzer);
			//Query query = queryParser.parse(keyword);
			//Occur.MUST表示對應字段必須有查詢值, Occur.MUST_NOT 表示對應字段必須沒有查詢值,Occur.SHOULD表示對應字段應該存在查詢值(但不是必須)
			Occur[] occurs ={Occur.SHOULD,Occur.SHOULD};
			Query query = MultiFieldQueryParser.parse(keyword, new String[]{"title","info"}, occurs,analyzer);
		//多個關鍵詞使用字符串數組
			//Query query = MultiFieldQueryParser.parse(new String[]{"核彈頭","儀式"}, new String[]{"title","info"}, occurs,analyzer);

table顯示格式


  <table>
    <thead>
        <tr>
       	 <th><input type="checkbox" id="allchose"></th>
          <th></th>
          <th></th>
          <th></th>
          <th></th>
       </tr>
    </thead>
    <tbody>
	
    <tr>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
		<td></td>
   </tr>
	</tbody>
 </table> 

ajax修改排序

js代碼:
 $("[id=focues]").blur(function(){
	  var sort=$(this).val();
	    var id=$(this).next().next().html();
		$.ajax({
		url:"updatesort",
		type:"post",
		data:{id:id,orderNumber:sort},
		success:function(mes){
			location.href=location.href
		}
	})
  })
 Mapper代碼
<update id="updatesort" parameterType="vo.Emp">
 update emp set emp.orderNumber=#{orderNumber} where emp.id=#{id}
</update>

在新窗口中打開一個超鏈接

<a href=url  target="_blank">
讓文本的每個單詞都是以大寫字母開頭
text-transform:capitalize
確認對話框
confirm();可以確定和取消
alert():只有確認
滾動條
overflow:scroll
打開頁面就會導入的畫面
onload();

配置歡迎頁面


在web.xml裏面配置
<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
在SpringMVC裏面配置
<mvc:view-controller path="/" view-name="index"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章