软工三作业遇到问题即解决

5.9

new url(path)中path需指明protocol(如http: ftp: file:)

如访问本地文件path=“file:index.html”

访问远程文件path="http://www.baidu.com"


JEditorPanen可用来显示html和rtf格式的文档

JViewport用处


5.10

关于svn使用的几点总结

1,提交时只将修改的提交,更新时整个项目更新

2,每次提交前要先更新,确认没有冲突


6.10

URI的基本语法

3.1 基本构造

一个URI的基本语法规则是:

    <schme>:<hier-part>[?<query>][#<fragment>]

 

释疑:当我们罗列语法规则时,我们使用斜体字。语法规则中的符号尖括号“<”和“>”表示这是一个语法成分,尖括号中的字符串是这个语法成分的名称。方括号“[”和“]”表示一个语法中的可选部分,语法中的其它字符是必须照样书写的字符。

 

语法中的<schme>是命名方案名称,例如http、mailto等。命名方案名称后面必须是一个冒号,然后是一个表示层次结构的成分<hier-part>,例如域名加上存储路径和文件名。接下来是两个可选部分,其中<query>表示某种查询字符串,这种字符串开头必须有一个问号。例如,在一个html文件中设置一个form,当用户在form包含的输入框中输入了一些数据并按下提交按钮时,浏览器就会向服务器发送一个包含查询字符串的URI,例如:

   http://www.example.com/scripts/check.asp?value=some%20text

这个例子中的http属于<schme>部分,//www.example.com/scripts/check.asp属于<hier-part>部分,value=some%20text属于<query>部分,其中的%20是空格的转义符,注意空格不是URI的合法字符。

    <fragment>是片断标识,以符号#开头。当我们在html文档中设置文档内部的链接时,我们就用到这种片断标识,例如:

    <Ahref="http://rfc.net/rfc3986.html#s1">...</A>

    ... ...

    <A name="s1">

其中第一个超链接的属性href的属性值是一个带有片断标识的URI,当用户点击这个链接时,将链接到<A name="s1">处。

   以下我们将详细描述URI各个组成成分的语法。

3.2  scheme

scheme是URI所使用的命名方案的标识符,这种标识符以英文字母开头,后跟英文字母或数字,也可以使用字符“+”、“-”和“.”。

如前所述,命名方案是要注册登记的,注册机构负责维护命名方案标识符及其对应的规范文件。原则上URI中scheme后面的语法和语义由命名方案决定,但是这种语法必须与URI规范文件(RFC3986)所描述的基本语法一致。

scheme标识符以冒号结尾。

3.3 hier-part

hier-part是一个层次结构的标识字符串。这部分可以包含主管(authority)和路径(path),也可以只有路径。例如,

    http://www.ietf.org/rfc/rfc2396.txt

其中的“//www.ietf.org”是主管部分,“/rfc/rfc2396.txt”是路径部分。又如,

    urn:ietf:rfc:2141

其中没有主管部分,“ietf:rfc:2141”是一个路径。

    路径可以是空的。

3.4 主管(authority)

    主管部分必须以双斜杠“//”开头,这一部分通常是一个主机的域名或其IP地址,也可以包含登录主机的用户信息和服务器的联接端口,其语法是:

     [<userinfo>@]<host>[:<port>]

其中<host>可以是主机的IP地址,也可以是主机的域名,还可以是任何已登记的主机名称。主机域名或其它名称中如果包含非ASCII字符,则必须首先用UTF-8对这些字符编码,然后用转义的方法表示这些字符。

   <userinfo>是登录主机的用户标识,某些URI必须指出这种信息。例如,用非匿名方式访问FTP服务器就必须给出用户名,例如:

    ftp://user@ftp.example.com

过去曾经允许在用户名后面直接给出登录密码,用户名和密码之间用冒号隔开。例如,

    ftp://user:my_password@ftp.example.com

由于这种方式极不安全,所以现在已经淘汰了这种方式。但为了兼容,一些软件可能仍然允许用户以这种方式输入,但这些软件必须既不显示密码也不保存密码。

   <port>部分用来指出联接主机时使用的TCP端口编号,以十进制数表示。有一些命名方案本身指定了默认端口,例如http的默认端口是80,ftp的默认端口是21,使用这些命名方案的URI不必指出端口。但是,如果你设计一个内部使用的网站,假如你指定用端口2048联接你的服务器,则你的网站URI必须形如:

    http://www.my_web_side.com:2048

3.5 路径(path)

路径由若干段(segment)组成。例如,http和ftp URI中的文件存放路径和文件名,其中每一个子目录和最后的文件名都是路径的一段。具体地说,例如如下URI:

   http://www.example.com/a/b/c/d.htm

其中/a/b/c/d.htm是路径,a、b、c和d.htm是路径中的段。

    路径中段与段之间用斜杠“/”分隔,当URI包含主管部分时,主管部分和路径也用斜杠分隔。

    各个段的语法和语义由命名方案决定,但是,每个段的标识符只能使用如下字符:非保留字符集中的字符、表三中的字符(作为段内分隔符),转义之后的字符,以及字符“:”和“@”。

    例如mailto:someone@example.com,这个URI没有主管部分,只有一条单段的路径someone@example.com。又如urn:ietf:rfc:2141,其中urn是命名方案标识符,这个URI没有主管部分,同样只有一条单段的路径ietf:rfc:2141。

当URI中包含主管部分并且路径非空时,路径以斜杠“/”开头。

    一个URI中的路径可以是空的,或者说没有路径,例如:

   http://www.example.com?fred

其中http是命名方案标识符,其后是主管部分//www.example.com,随后的路径是空的,最后是<query>部分fred。

3.6 查询(query)

查询部分以“?”开头,这一部分没有层次结构,可认为就是一串字符串,其作用是进一步指定所关心的资源。

    查询部分的语法、语义取决于具体的应用,没有统一的规定。例如,对于网页中的表单(Form),提交表单数据时将会产生一个包含查询部分的URI,HTML规范就对这个查询的语法语义做了规定。以下是一个例子。假定有一个HTML文档,其中有如下内容:

<form action="http://www.example.com/search"method="post">

        <input type="text" name="t1" >

        <input type="text" name="t2" >

        <input type="Submit">

</form>

这个表单包含两个输入框,名称分别为t1和t2,还有一个提交按钮。假设用户在两个输入框中分别输入“zhang”和“wang”,然后按下提交按钮,则浏览器将向服务器发送一个HTTP消息,其中包含如下URI:

    http://www.example.com/search?t1=zhang&t2=wang

其中的查询字符串t1=zhang&t2=wang对应两个输入框的名称及其中用户输入的数据,彼此之间用字符“&”联接。关于这种查询字符串的详细规定,读者可参阅HTML规范,例如http://www.w3.org/TR/1998/REC-html40-19980424。

    虽然RFC3986没有规定查询字符串的语法语义,但对其中允许使用的字符做了限制。允许使用的字符是:非保留字符集中的字符、表三中的字符,转义之后的字符,以及字符“:”、“@”、“/”和“?”。注意按照这个规定,查询字符串中如果要包含汉字,则必须转义。例如,对于上述例子,如果用户在输入框中输入汉字,则浏览器在发送HTTP消息时必须先将汉字转义,然后形成查询字符串。

 

释疑:你可以访问google网站,在查询输入框中输入汉字的关键词,然后观察在IE地址栏中显示的URI,特别是其中的查询部分,它包含了转义之后的汉字关键词。

3.7 片断标识(Fragment)

片断标识以字符“#”开头,并且必须放在URI的最后。

     片断标识的主要作用是标识相对于主资源的子资源。一个包含片断标识的URI,其主管、路径和查询部分(这几部分不一定都要有)标识了主资源,片断标识则进一步指定其中的某个子资源。例如3.1节提到的例子,其中的URI

http://rfc.net/rfc3986.html#s1

标识的主资源是//rfc.net/rfc3986.html,这是一个HTML文件,片断标识指定这个文件中的某个位置,即出现元素 <Aname="s1">处。

     片断标识的语法语义取决于主资源的媒体类型,主资源可能是一张网页,也可能是一张电子表格,一个图象,或一段声音,等等。不同的媒体标识子资源的方法各不相同,因此片断标识语法语义的规定独立于URI规范,也独立于URI的命名方案。

    但是片断标识所使用的字符则必须遵守URI规范的限制。片断标识所能使用的字符与查询字段所能使用的字符相同。

    当在客户-服务器模式的系统中用含有片断标识的URI获取信息时,客户计算机首先向服务器获取URI中指定的主资源,然后客户计算机再按照片断标识在已获得的主资源中定位子资源。

 

//从网络根据URL获取资源

  // 获取网络文件,转存到fileDes中,fileDes需要带文件后缀名

	public static void saveUrlFile(String fileUrl, String fileDes) throws Exception {
		File toFile = new File(fileDes);
		if (toFile.exists()) {
			return;
		}
		toFile.createNewFile();
		FileOutputStream outImgStream = new FileOutputStream(toFile);
		outImgStream.write(getUrlFileData(fileUrl));
		outImgStream.close();
	}




// 获取链接地址文件的byte数据
	public static byte[] getUrlFileData(String fileUrl) throws Exception {
		URL url = new URL(fileUrl);
		HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
		httpConn.connect();
		InputStream cin = httpConn.getInputStream();
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024];
		int len = 0;
		while ((len = cin.read(buffer)) != -1) {
			outStream.write(buffer, 0, len);
		}
		cin.close();
		byte[] fileData = outStream.toByteArray();
		outStream.close();
		return fileData;
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值