Java-Java开发过程中零碎笔记

获得当前应用的路径

System.out.println("request.getContextPath():"+request.getContextPath());
System.out.println("request.getSession().getServletContext().getContextPath():"+request.getSession().getServletContext().getContextPath());

mysql授权

grant all PRIVILEGES on *.* to root@'%' IDENTIFIED by '123'

jar 文件搜索: http://www.jarvana.com/jarvana/

生成javadoc
生成javadoc中文乱码,在这里配置:-encoding UTF-8 -charset UTF-8

找不到符号
符号: 类 HttpServletRequest
解决方案:在项目的build path下添加jar包servlet-api.jar,tomcat带的,jdk中没有。

public static String YICHA_DOWN_XML_IN = "http://60.28.215.67/mXml/tdel.do?pvt=0&tit={0}&id={1}&key={2}";  //红色标为占位符
YiChaDown yiChaDown = this.yiChaService.getYiChaDownList(Config.YICHA_DOWN_XML_IN, tit, yid, " ");

// 先从缓存获取本地歌曲下载地址
downBean = (DownBean) this.commonService.getMemCache("ayyc_localSong"+ localSongId);
downUrl = MessageFormat.format(downUrl, new Object[] {URLEncoder.encode(tit, "UTF-8"), id,URLEncoder.encode(key, "UTF-8") });
yiChaDown = this.parseDownXmlByUrl(downUrl);

jquery UI选项卡

js

<script type="text/javascript" >
    $(function()
    {
        $("#mydialog").dialog();
        $("#select").tabs();
        $("#select").click(function() { $("#info").css("display", ""); });
    });
</script>

html

<div id="select">
    <ul>
        <li><a href="#phonebrands">品牌信息</a></li>
        <li><a href="#phones">手机信息</a></li>
    </ul>
</div>
<div id="phonebrands"></div>

报错信息:

2012-2-10 17:46:43 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'musicManageController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ttpod.recommend.service.INonLocalService com.ttpod.recommend.view.manage.MusicManageController.nonLocalService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.ttpod.recommend.service.INonLocalService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)

解决方案:在nonLocalService前面加上:@service ,以便系统在使用到这个service时就注入。

jar 文件搜索: http://www.jarvana.com/jarvana/

注意在 for 循环中用continue

for(Node fileTypeNode:nodeList){
        //文件类型:压缩,高质,普通
        String fileType=fileTypeNode.getText();
        Items item=nonLocalDown.new Items();
        if(fileType.indexOf("压缩")!=-1){
        totalType.append("0");
        item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }else if(fileType.indexOf("清晰")!=-1){
        totalType.append("1");
        item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }else if (fileType.indexOf("高音质")!=-1){
        continue;
//                 totalType.append("3");
//                 item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }else if (fileType.indexOf("保真")!=-1){
        continue;
//                 totalType.append("4");
//                 item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }
        Node itemNode=fileTypeNode.getParent();
        …………
        item.setFiletype(fileType);
}

js、css以及html

获得当前应用的路径

System.out.println("request.getContextPath():"+request.getContextPath());
System.out.println("request.getSession().getServletContext().getContextPath():"+request.getSession().getServletContext().getContextPath());

HTML5的figure标签


HTML5的figure标签

figure用来代替原来li标签,P标签谁来取代呢?答案就是:figcaption  
w3c赋予的定义:figure标签规定独立的流内容(图像、图表、照片、代码等等)。figure 元素的内容应该与主内容相关,但如果被删除,则不应对文档流产生影响。  

HTML <label> 标签的 for 属性

定义和用法
for 属性规定 label 与哪个表单元素绑定。
隐式和显式的联系
标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <label> 标签下的 for 属性命名一个目标表单 id,这样就是显式形式。
例如,在 XHTML 中:
显式的联系:
<label for="SSN">Social Security Number:</label>
<input type="text" name="SocSecNum" id="SSn" />
隐式的联系:
<label>Date of Birth: <input type="text" name="DofB" /></label>
第一个标记是以显式形式将文本 "Social Security Number:" 和表单的社会安全号码的文本输入控件 ("SocSecNum") 联系起来,它的 for 属性的值和控件的 id 一样,都是 SSN。第二个标记 ("Date of Birth:") 不需要 for 属性,它的相关控件也不需要 id 属性,它们是通过在 <label> 标签中放入 <input> 标签来隐式地连接起来的。

实例
带有两个输入字段和相关标记的简单 HTML 表单:
<form>
    <label for="male">Male</label>
    <input type="radio" name="sex" id="male" />
    <br />
    <label for="female">Female</label>
    <input type="radio" name="sex" id="female" />
</form>

jQuery中设置form表单中action值的方法

html代码:
<form id="myFormId" name="myForm" action="" method="post">
    <input type="hidden" id="inParam" name="inParam" />
    <input type="hidden" id="tstype" name="tstype" />
    <input type="hidden" id="zd" name="zd" />
</form>
熟悉JavaScript的朋友一定晓得JS可以动态改变form表单中action的值,写法如下:
document.myForm.action = "userinfo.shtml";
//需要注意的是form标签一定要有name属性,光有id没有name不起作用
document.myForm.attributes["action"].value  = "XXXXXXXX";
document.all("myFormId").setAttribute("action", "欲赋的action的值");
上述两种方式在JavaScript中均经过测试。
下面介绍在jQuery中设置form表单中action的值的方法。
$("#myFormId").attr("action", "userinfo.shtml");
【注意】:$("#myFormId").action="XXX";  这种写法是不起作用的!

Jquery获取和设置元素value属性

Jquery提供了获得和设置元素的value的方法。如input, textarea等元素的value值。
例子:<input name="a" id="a" value="Hello">
1. val()获取元素的值。jquery不能直接使用value属性去操作元素的值。
错误操作: var myvalue=$("#a").value;
正确操作: var myvalue=$("#a").val();
2. val("要设置的值") : 设置元素的值。
错误操作: $("#a").value="new value";
正确操作: $("#a").val("new value");
那个错误例子是我第一次使用的时候,想当然的使用方法。当然,那是不对的。

数组转换成字符串

<script lanuage="javascript">
    var tt = new Array("abc","cde","ggg");
    alert(tt.toString());
    alert(tt+"");
    alert(tt.join(""));
</script>

示例:

<script type="text/javascript">
    var dict = new Array();
    dict[""] = "ren";
    dict[""] = "kou";
    dict[""] = "shou";
    var arr=new Array();
    arr.push("aaaaaaa");
    arr.push("bbbbbb");
    arr.push("cccc");
    arr.push("ddd");
    alert("dict.toString():"+dict.toString()); //输出空串
    alert("dict.join():"+dict.join()); //输出空串
    alert("dict.toString():"+dict[""]); //输出 ren
    alert("arr.toString():"+arr.toString()); //输出 aaaaaaa,bbbbbb,cccc,ddd
</script>

后端Java

spring mvc注解报错信息:

2012-2-10 17:46:43 org.apache.catalina.core.ApplicationContext log
严重: StandardWrapper.Throwable
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'musicManageController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ttpod.recommend.service.INonLocalService com.ttpod.recommend.view.manage.MusicManageController.nonLocalService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.ttpod.recommend.service.INonLocalService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1074)

解决方案:在nonLocalService前面加上:@service ,以便系统在使用到这个service时就注入。
jar文件搜索: http://www.jarvana.com/jarvana/

修改java web 项目名称
第一种方法:
打开工程所在目录,找到一个 .mymetadata的文件,用写字板打开,内容大致如下:

<?xml version="1.0" encoding="UTF-8"?>
<project-module
        type="WEB"
        name="action"
        id="myeclipse.1242011546906"
        context-root="/old"
        j2ee-spec="1.4"
        archive="old.war">
    <attributes>
        <attribute name="webrootdir" value="/WebRoot" />
    </attributes>
</project-module>

context-root=”/old” 为发布后的目录名,改为 context-root=”/new” 之后,用eclipse重新发布的目录名就是new了。如果用war的打包方式发布,则将 archive=”old.war”> 改为 archive=”new.war”>。

第二种方法更为简单:
右键点击你的项目,然后选择属性—->然后点击myeclipse-web选项,修改web context-root名称为你要修改的项目名称和前面重命名的名称一致就可以了。

从网络读取图片并保存至本地

package cn.cctv.net;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class ImageRequest {
    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
    //new一个URL对象
        URL url = new URL("http:    //img.hexun.com/2011-06-21/130726386.jpg");
    //打开链接
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    //设置请求方式为"GET"
        conn.setRequestMethod("GET");
    //超时响应时间为5秒
        conn.setConnectTimeout(5 * 1000);
    //通过输入流获取图片数据
        InputStream inStream = conn.getInputStream();
    //得到图片的二进制数据,以二进制封装得到数据,具有通用性
        byte[] data = readInputStream(inStream);
    //new一个文件对象用来保存图片,默认保存当前工程根目录
        File imageFile = new File("BeautyGirl.jpg");
    //创建输出流
        FileOutputStream outStream = new FileOutputStream(imageFile);
    //写入数据
        outStream.write(data);
    //关闭输出流
        outStream.close();
    }
    public static byte[] readInputStream(InputStream inStream) throws Exception{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    //创建一个Buffer字符串
        byte[] buffer = new byte[1024];
    //每次读取的字符串长度,如果为-1,代表全部读取完毕
        int len = 0;
    //使用一个输入流从buffer里把数据读取出来
        while( (len=inStream.read(buffer)) != -1 ){
    //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
            outStream.write(buffer, 0, len);
        }
    //关闭输入流
        inStream.close();
    //把outStream里的数据写入内存
        return outStream.toByteArray();
    }
}

java检查音频文件是否有效

    /**
     * 判断链接是否是mp3文件的链接
     */
    public boolean isMp3Url(String url){
        URLConnection urlCon=null;
        try {
            URL urlObj=new URL(url);
            urlCon= urlObj.openConnection();
            urlCon.connect();
            if(urlCon.getContentType().equals("audio/mpeg")){ //如果不是音频文件
                return true;
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }finally{
            urlCon=null;
        }
    }

测试函数运行时间的工具类
通常的做法

public class TestObject {
    /**
     * 一个用来被测试的方法,进行了一个比较耗时的循环
     */
    public static void testMethod(){
        for(int i=0; i<100000000; i++){
        }
    }
    /**
     * 一个简单的测试方法执行时间的方法
     */
    public void testTime(){
        long begin = System.currentTimeMillis();//测试起始时间
        testMethod();//测试方法
        long end = System.currentTimeMillis();//测试结束时间
        System.out.println("[use time]:" + (end - begin));//打印使用时间
    }
    public static void main(String[] args) {
        TestObject test=new TestObject();
        test.testTime();
    }
}

使用Java回调函数来实现
首先定一个回调接口,java 代码如下:

public interface CallBack {
//执行回调操作的方法
    void execute();
}

然后再写一个工具类,java 代码如下:

public class Tools {
    /**
     * 测试函数使用时间,通过定义CallBack接口的execute方法
     * @param callBack
     */
    public void testTime(CallBack callBack) {
        long begin = System.currentTimeMillis();//测试起始时间
        callBack.execute();///进行回调操作
        long end = System.currentTimeMillis();//测试结束时间
        System.out.println("[use time]:" + (end - begin));//打印使用时间
    }
    public static void main(String[] args) {
        Tools tool = new Tools();
        tool.testTime(new CallBack(){
//定义execute方法
            public void execute(){
//这里可以加放一个或多个要测试运行时间的方法
                TestObject.testMethod();
            }
        });
    }
}

java读取字节流

import java.net.URL;
import java.net.URLConnection;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
import sun.security.krb5.internal.crypto.c;
public class urlc {
    void display() {
        byte buf[] = new byte[100];
        try {
            // System.out.print("请输入文件的URL地址: ");
            // // 读取用户输入的URL
            // int count = System.in.read(buf);
            //
            // String addr = new String(buf, 0, count);
            // 将用户输入的URL字符串传入URL类对象
            URL url = new URL(url地址);
            // 创建URLConnection对象,用URL的openConnection方法将连接返回给URLConnection的对象
            // 实际上URL的openConnection的返回值就是一个URLConnection
            URLConnection c = url.openConnection();
            // 用URLConnection的connect()方法建立连接
            c.connect();
            // 显示该连接的相关信息,这些都是URLConnection的方法
            System.out.println("内容类型: " + c.getContentType());
            System.out.println("内容编码: " + c.getContentEncoding());
            System.out.println("内容长度: " + c.getContentLength());
            System.out.println("创建日期: " + new Date(c.getDate()));
            System.out.println("最后修改日期: " + new Date(c.getLastModified()));
            System.out.println("终止日期: " + new Date(c.getExpiration()));
            StringBuffer txt = new StringBuffer();
            InputStream in = c.getInputStream();
            InputStreamReader inReader = new InputStreamReader(in);
            BufferedReader reader = new BufferedReader(inReader);
            String rdline = "";
            while ((rdline = reader.readLine()) != null) {
                txt.append(rdline + "\n");
            }
            reader.close();
            System.out.println(txt.toString());
        }
        catch (IOException e) {
            System.out.println(e);
        }
    }
    public static void main(String[] args) {
        urlc app = new urlc();
        app.display();
    }
}

注意在 for 循环中用continue

    for(Node fileTypeNode:nodeList){
        //文件类型:压缩,高质,普通
        String fileType=fileTypeNode.getText();
        Items item=nonLocalDown.new Items();
        if(fileType.indexOf("压缩")!=-1){
            totalType.append("0");
            item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }else if(fileType.indexOf("清晰")!=-1){
            totalType.append("1");
            item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }else if (fileType.indexOf("高音质")!=-1){
            continue;
            // totalType.append("3");
            // item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }else if (fileType.indexOf("保真")!=-1){
            continue;
            // totalType.append("4");
            // item.setSize(fileType.substring(fileType.indexOf('[')+1,fileType.length()-1));
        }
        Node itemNode=fileTypeNode.getParent();
        …………
        item.setFiletype(fileType);
    }

String jonin的实现

String jonin的实现
实现1:

static String join(Collection<?> s, String delimiter) {
     StringBuilder builder = new StringBuilder();
     Iterator iter = s.iterator();
     while (iter.hasNext()) {
         builder.append(iter.next());
         if (!iter.hasNext()) {
           break;                  
         }
         builder.append(delimiter);
     }
     return builder.toString();
 }

实现2:

import com.google.common.base.Joiner;
Joiner.on(separator).join(data);

实现3:

String join (String delim, String ... data) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < data.length; i++) {
      sb.append(data[i]);
      if (i >= data.length-1) {break;}
      sb.append(delim);
    }
    return sb.toString();
  }

实现4:

public String join (Collection<String> c) {
    StringBuilder sb=new StringBuilder();
    for(String s: c)
        sb.append(s);
    return sb.toString();
}
for(String s : joinMe)
    target += s;

版权所有,转载请注明出处 luowei.github.io.