頁面:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、撫松網(wǎng)站維護(hù)、網(wǎng)站推廣。
body
form action="/。。。。" id="form1"
input type="hidden" name="indexUrl" id="indexUrl"
a href="javascript:void(0);" onclick="goTo();"URL/a
/form
/body
script type="text/javascript"
function goTo(){
var form = document.getElementById("form1");
var url = location.href;
var indexUrl = document.getElementById("indexUrl");
indexUrl.value = url;
form.submit();
}
/script
servlet的doPost方法:
String indexUrl = request.getParameter("indexUrl");
URL url = new URL(indexUrl);
InputStream is = url.openConnection().getInputStream();
byte[] bs = new byte[9999];
int len = 0 ;
while((len = is.read(bs, 0, 9999))!=-1){
System.out.write(bs, 0, len);
}
is.close();
還可以用專門獲取網(wǎng)頁的JAR包,好像是jsoap?上面的代碼沒有考慮轉(zhuǎn)碼的問題。如果是中文可能出現(xiàn)亂碼,注意要統(tǒng)一編碼格式。
------------------------------------------------------
修改了一下servlet的doPost方法,解決編碼問題。我的頁面是utf-8編碼。
String indexUrl = request.getParameter("indexUrl");
URL url = new URL(indexUrl);
InputStream is = url.openStream();
// InputStream is = url.openConnection().getInputStream();
InputStreamReader isr = new InputStreamReader(is,"utf-8");
char[] cs = new char[9999];
while(isr.read(cs, 0, 9999)!=-1){
System.out.print(cs);
}
is.close();
?java讀取html文件跟讀取普通文件一樣,都是使用輸入輸出流,但是java讀取html文件之后還需要解析,使用Jsoup對html進(jìn)行解析。下面是一個java讀取帶表格的任意html文件,并把html文件轉(zhuǎn)換成excel的例子。
要求:?要求能夠?qū)崿F(xiàn)給出任意帶table表格的html文件,生成與表格相同內(nèi)容的excel文件,附件可以作為測試文件,提供給定的roster.html文件,通過java代碼,實(shí)現(xiàn)生成與html頁面的table相同樣式的roster.xls文件。
首先看roster.html:
java代碼:
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileReader;
import?java.io.IOException;
import?jxl.Workbook;
import?jxl.write.Label;
import?jxl.write.WritableCellFormat;
import?jxl.write.WritableFont;
import?jxl.write.WritableSheet;
import?jxl.write.WritableWorkbook;
import?jxl.write.WriteException;
import?jxl.write.biff.RowsExceededException;
import?org.jsoup.Jsoup;
import?org.jsoup.nodes.Document;
import?org.jsoup.nodes.Element;
import?org.jsoup.select.Elements;
public?class?HTMLTOExcel?{
public?static?void?main(String?args[])?throws?IOException{
///讀取classpath目錄下面的路徑
String?path=HTMLTOExcel.class.getResource("/").getPath();
path+="roster.html";
toExcel(path,"roster");??????
}
//得到Document并且設(shè)置編碼格式
public?static?Document?getDoc(String?fileName)?throws?IOException{
File?myFile=new?File(fileName);
Document?doc=?Jsoup.parse(myFile,?"GBK","");
return?doc;
}
///這個方法用于根據(jù)trs行數(shù)和sheet畫出整個表格
public?static?void?mergeColRow(Elements?trs,WritableSheet?sheet)?throws?RowsExceededException,?WriteException{
int[][]?rowhb=new?int[300][50];
for(int?i=0;itrs.size();i++){
Element?tr=trs.get(i);
Elements?tds=tr.getElementsByTag("td");
int?realColNum=0;
for(int?j=0;jtds.size();j++){
Element?td=tds.get(j);??
if(rowhb[i][realColNum]!=0){
realColNum=getRealColNum(rowhb,i,realColNum);
}
int?rowspan=1;
int?colspan=1;
if(td.attr("rowspan")!=""){
rowspan?=?Integer.parseInt(td.attr("rowspan"));
}
if(td.attr("colspan")!=""){
colspan?=?Integer.parseInt(td.attr("colspan"));
}
String?text=td.text();
drawMegerCell(rowspan,colspan,sheet,realColNum,i,text,rowhb);
realColNum=realColNum+colspan;
}
}
}
///這個方法用于根據(jù)樣式畫出單元格,并且根據(jù)rowpan和colspan合并單元格
public?static?void?drawMegerCell(int?rowspan,int?colspan,WritableSheet?sheet,int?realColNum,int?realRowNum,String?text,int[][]?rowhb)?throws?RowsExceededException,?WriteException{
for(int?i=0;irowspan;i++){
for(int?j=0;jcolspan;j++){
if(i!=0||j!=0){
text="";
}
Label?label?=?new?Label(realColNum+j,realRowNum+i,text);
WritableFont?countents?=?new?WritableFont(WritableFont.TIMES,10);?//?設(shè)置單元格內(nèi)容,字號12??
WritableCellFormat?cellf?=?new?WritableCellFormat(countents?);?
cellf.setAlignment(jxl.format.Alignment.CENTRE);//把水平對齊方式指定為居中
cellf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//把垂直對齊方式指定為居
label.setCellFormat(cellf);
sheet.addCell(label);
rowhb[realRowNum+i][realColNum+j]=1;
}
}
sheet.mergeCells(realColNum,realRowNum,?realColNum+colspan-1,realRowNum+rowspan-1);
}
public?static?int?getRealColNum(int[][]?rowhb,int?i,int?realColNum){
while(rowhb[i][realColNum]!=0){
realColNum++;
}
return?realColNum;
}
///根據(jù)colgroups設(shè)置表格的列寬
public?static?void?setColWidth(Elements?colgroups,WritableSheet?sheet){
if(colgroups.size()0){
Element?colgroup=colgroups.get(0);
Elements?cols=colgroup.getElementsByTag("col");
for(int?i=0;icols.size();i++){
Element?col=cols.get(i);
String?strwd=col.attr("width");
if(col.attr("width")!=""){
int?wd=Integer.parseInt(strwd);
sheet.setColumnView(i,wd/8);
}
}
}
}
//toExcel是根據(jù)html文件地址生成對應(yīng)的xls
public?static?void?toExcel(String?fileName,String?excelName)throws?IOException{
Document?doc=getDoc(fileName);
String?title?=?doc.title();
///得到樣式,以后可以根據(jù)正則表達(dá)式解析css,暫且沒有找到cssparse
Elements?style=?doc.getElementsByTag("style");
///得到Table,demo只演示輸入一個table,以后可以用循環(huán)遍歷tables集合輸入所有table
Elements?tables=?doc.getElementsByTag("TABLE");????
if(tables.size()==0){
return;
}
Element?table=tables.get(0);
//得到所有行
Elements?trs?=?table.getElementsByTag("tr");
///得到列寬集合
Elements?colgroups=table.getElementsByTag("colgroup");
try?{
//文件保存到classpath目錄下面
String?path=HTMLTOExcel.class.getResource("/").getPath();
path+=excelName+".xls";
System.out.println(path);
WritableWorkbook?book?=?Workbook.createWorkbook(new?File(path));????
WritableSheet?sheet?=?book.createSheet("人事關(guān)系",?0);??
setColWidth(colgroups,sheet);
mergeColRow(trs,sheet);????
book.write();????
book.close();????
}?catch?(RowsExceededException?e)?{
e.printStackTrace();
}?catch?(WriteException?e)?{?
e.printStackTrace();
}
}
}
解析html文件的例子文檔地址:
步驟:
一、使用java點(diǎn)虐 包下的URL類,可以將一個網(wǎng)頁(鏈接)封裝成一個URL對象。
二、URL對象有一個openStream()方法,使用該方法可以獲取該網(wǎng)頁的輸入流,我們可以通過讀取輸入流的方式獲得網(wǎng)頁的內(nèi)容,并通過輸出流寫入HTML文件中。
補(bǔ)充:
步驟:
1.通過URL對象的openStream()方法獲得網(wǎng)頁的字節(jié)輸入流 。
2.為字節(jié)輸入流加緩沖 。
3. 創(chuàng)建字節(jié)輸出流對象 。
4. 為字節(jié)輸出流加緩沖 。
5. 讀取數(shù)據(jù),并寫入HTML文件 。
%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%
html
body
!--post或get--
form id="test" method="post" action="action.jsp"
select id="se_id" name="seid"
option value="值1"cn/option
option value="值2"us/option
option value="值3"en/option
/select
input type="submit" value="提交表單"
br
/form
/body
/html