① java怎樣可以在HTML中使用
靜態的html標簽是無法直接調用java程序的
有幾種方法可以實現
1、將按鈕放到form表單中,當按鈕點擊時提交表單(或者直接將input的type屬性定義成submit),表單可以指向JSP或Servlet,在JSP或Servlet里調用java程序
2、在按鈕的onclick時間中添加js代碼
self.location="url";其中url指向JSP或Servlet
3、使用第三方的javascript包,dwr是一個不錯的選擇:
需要准備dwr的jar包,並將之放到lib目錄下;
修改web.xml文件,添加DWRServlet的映射;
配置dwr,即在WEB-INF目錄下,添加dwr.xml文件,讓dwr知道在運行的時候應該給哪些JavaBean生成相應的javascript庫!
將需要的腳本庫引入到html頁面中就可以通過dwr的API訪問java類了
不是很難,網上參考資料挺多的
4、使用MVC框架的話就更簡單了,以struts為例,可以仿照1或2,將url替換成配置文件中配置的地址就能訪問java程序了
② java怎樣讀取html文件
java讀取html文件跟讀取普通文件一樣,都是使用輸入輸出流,但是java讀取html文件之後還需要解析,使用Jsoup對html進行解析。下面是一個java讀取帶表格的任意html文件,並把html文件轉換成excel的例子。
要求:要求能夠實現給出任意帶table表格的html文件,生成與表格相同內容的excel文件,附件可以作為測試文件,提供給定的roster.html文件,通過java代碼,實現生成與html頁面的table相同樣式的roster.xls文件。
首先看roster.html:
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.IOException;
importjxl.Workbook;
importjxl.write.Label;
importjxl.write.WritableCellFormat;
importjxl.write.WritableFont;
importjxl.write.WritableSheet;
importjxl.write.WritableWorkbook;
importjxl.write.WriteException;
importjxl.write.biff.RowsExceededException;
importorg.jsoup.Jsoup;
importorg.jsoup.nodes.Document;
importorg.jsoup.nodes.Element;
importorg.jsoup.select.Elements;
publicclassHTMLTOExcel{
publicstaticvoidmain(Stringargs[])throwsIOException{
///讀取classpath目錄下面的路徑
Stringpath=HTMLTOExcel.class.getResource("/").getPath();
path+="roster.html";
toExcel(path,"roster");
}
//得到Document並且設置編碼格式
publicstaticDocumentgetDoc(StringfileName)throwsIOException{
FilemyFile=newFile(fileName);
Documentdoc=Jsoup.parse(myFile,"GBK","");
returndoc;
}
///這個方法用於根據trs行數和sheet畫出整個表格
publicstaticvoidmergeColRow(Elementstrs,WritableSheetsheet)throwsRowsExceededException,WriteException{
int[][]rowhb=newint[300][50];
for(inti=0;i<trs.size();i++){
Elementtr=trs.get(i);
Elementstds=tr.getElementsByTag("td");
intrealColNum=0;
for(intj=0;j<tds.size();j++){
Elementtd=tds.get(j);
if(rowhb[i][realColNum]!=0){
realColNum=getRealColNum(rowhb,i,realColNum);
}
introwspan=1;
intcolspan=1;
if(td.attr("rowspan")!=""){
rowspan=Integer.parseInt(td.attr("rowspan"));
}
if(td.attr("colspan")!=""){
colspan=Integer.parseInt(td.attr("colspan"));
}
Stringtext=td.text();
drawMegerCell(rowspan,colspan,sheet,realColNum,i,text,rowhb);
realColNum=realColNum+colspan;
}
}
}
///這個方法用於根據樣式畫出單元格,並且根據rowpan和colspan合並單元格
publicstaticvoiddrawMegerCell(introwspan,intcolspan,WritableSheetsheet,intrealColNum,intrealRowNum,Stringtext,int[][]rowhb)throwsRowsExceededException,WriteException{
for(inti=0;i<rowspan;i++){
for(intj=0;j<colspan;j++){
if(i!=0||j!=0){
text="";
}
Labellabel=newLabel(realColNum+j,realRowNum+i,text);
WritableFontcountents=newWritableFont(WritableFont.TIMES,10);//設置單元格內容,字型大小12
WritableCellFormatcellf=newWritableCellFormat(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);
}
publicstaticintgetRealColNum(int[][]rowhb,inti,intrealColNum){
while(rowhb[i][realColNum]!=0){
realColNum++;
}
returnrealColNum;
}
///根據colgroups設置表格的列寬
publicstaticvoidsetColWidth(Elementscolgroups,WritableSheetsheet){
if(colgroups.size()>0){
Elementcolgroup=colgroups.get(0);
Elementscols=colgroup.getElementsByTag("col");
for(inti=0;i<cols.size();i++){
Elementcol=cols.get(i);
Stringstrwd=col.attr("width");
if(col.attr("width")!=""){
intwd=Integer.parseInt(strwd);
sheet.setColumnView(i,wd/8);
}
}
}
}
//toExcel是根據html文件地址生成對應的xls
publicstaticvoidtoExcel(StringfileName,StringexcelName)throwsIOException{
Documentdoc=getDoc(fileName);
Stringtitle=doc.title();
///得到樣式,以後可以根據正則表達式解析css,暫且沒有找到cssparse
Elementsstyle=doc.getElementsByTag("style");
///得到Table,demo只演示輸入一個table,以後可以用循環遍歷tables集合輸入所有table
Elementstables=doc.getElementsByTag("TABLE");
if(tables.size()==0){
return;
}
Elementtable=tables.get(0);
//得到所有行
Elementstrs=table.getElementsByTag("tr");
///得到列寬集合
Elementscolgroups=table.getElementsByTag("colgroup");
try{
//文件保存到classpath目錄下面
Stringpath=HTMLTOExcel.class.getResource("/").getPath();
path+=excelName+".xls";
System.out.println(path);
WritableWorkbookbook=Workbook.createWorkbook(newFile(path));
WritableSheetsheet=book.createSheet("人事關系",0);
setColWidth(colgroups,sheet);
mergeColRow(trs,sheet);
book.write();
book.close();
}catch(RowsExceededExceptione){
e.printStackTrace();
}catch(WriteExceptione){
e.printStackTrace();
}
}
}
解析html文件的例子文檔地址:http://blog.csdn.net/androidwuyou/article/details/52636821
③ java如何解析html文檔
importjava.io.*;
importjava.util.*;
importjavax.swing.text.*;
importjavax.swing.text.html.*;
importjavax.swing.text.html.parser.*;
importjavax.swing.text.html.HTMLEditorKit.ParserCallback;
{//繼承ParserCallback,解析結果驅動這些回調方法
protectedStringbase;
protectedbooleanisImg=false;
protectedbooleanisParagraph=false;
protectedstaticVector<String>element=newVector<String>();
=newString();
publicParser(){
}
(){
returnparagraphText;
}
publicvoidhandleComment(char[]data,intpos){
}
publicvoidhandleEndTag(HTML.Tagt,intpos){
if(t==HTML.Tag.P){
if(isParagraph){
isParagraph=false;
}
}elseif(t==HTML.Tag.IMG){
if(isImg){
isImg=false;
}
}
}
publicvoidhandleError(StringerrorMsg,intpos){
}
publicvoidhandleSimpleTag(HTML.Tagt,MutableAttributeSeta,intpos){
handleStartTag(t,a,pos);
}
publicvoidhandleStartTag(HTML.Tagt,MutableAttributeSeta,intpos){
if(t==HTML.Tag.P){
isParagraph=true;
}elseif((t==HTML.Tag.IMG)){
Stringsrc=(String)a.getAttribute(HTML.Attribute.SRC);
if(src!=null){
element.addElement(src);
isImg=true;
}
}
}
publicvoidhandleText(char[]data,intpos){
if(isParagraph){
StringtempParagraphText=newString(data);
if(paragraphText!=null){
element.addElement(tempParagraphText);
;
}
}
}
privatestaticvoidstartParse(StringsHtml){
try{
ParserDelegatorps=newParserDelegator();//負責每次在調用其parse方法時啟動一個新的DocumentParser
HTMLEditorKit.ParserCallbackparser=newParser();//解析結果驅動這些回調方法。
ps.parse(newStringReader(sHtml),parser,true);//解析給定的流並通過解析的結果驅動給定的回調。
//System.out.println(getParagraphText());
Vectorlink=element;
for(inti=0;i<link.size();i++){
System.out.println("----haha-----");
System.out.println(link.get(i));
}
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(Stringargs[]){
try{
Stringfilename="D://blogbaby.htm";
BufferedReaderbrd=newBufferedReader(newFileReader(filename));
char[]str=newchar[50000];
brd.read(str);
StringsHtml=newString(str);
startParse(sHtml);
}catch(Exceptione){
e.printStackTrace();
}
}
}
④ 請教如何使用java從html內容中提取指定信息
File input = new File("/tmp/input.html");
Document doc = Jsoup.parse(input, "UTF-8", "IP");
看看這個代碼,調用 doc.text() 方法即可。
⑤ java獲取html內的內容
簡單實現:
HtmlRequest類的內容:
[java] view plain
package com.capinfotech.net;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HtmlRequest {
public static void main(String[] args) throws IOException {
URL url = new URL("http://www.163.com/");
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
InputStream inputStream = conn.getInputStream(); //通過輸入流獲得網站數據
byte[] getData = readInputStream(inputStream); //獲得網站的二進制數據
String data = new String(getData, "gb2312");
System.out.println(data);
}
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
}
這樣就能獲得http://www.163.com的內容,在控制台會列印輸出
⑥ Java 處理 html Css
有,自定義jstl ,這個非常方便,建議樓主去學習下,例子如下:
當時我要在很多頁面根據值判斷狀態給不一樣的樣式。如果用if-else太麻煩了,每個頁面都要寫,於是就用到了自定義jstl。
導入自定義標簽後在頁面調用:
<%@tagliburi="/tags/cos-cstatus"prefix="cs"%>
<td>
<cs:cstatusvalue="${item.the_consolidated_status}"/>
</td>
代碼:
@Override
publicintdoEndTag()throwsJspException{
try{
if(value==null||value.length()==0){
pageContext.getOut().print("");
}elseif("Normal".equalsIgnoreCase(value)){
pageContext.getOut().print("<spanclass='label'>"+value+"</span>");
}elseif("Warning".equalsIgnoreCase(value)){
pageContext.getOut().print("<spanclass='labellabel-warning'>"+value+"</span>");
}else{
pageContext.getOut().print("<spanclass='labellabel-important'>"+value+"</span>");
}
}catch(Exceptione){
e.printStackTrace();
}
returnEVAL_PAGE;
}
效果:
⑦ java中幾種解析html的工具
HTML分析是一個比較復雜的工作,Java世界主要有幾款比較方便的分析工具:
1.Jsoup
Jsoup是一個集強大和便利於一體的HTML解析工具。它方便的地方是,可以用於支持用jQuery中css selector的方式選取元素,這對於熟悉js的開發者來說基本沒有學習成本。
String content = "blabla";
Document doc = JSoup.parse(content);
Elements links = doc.select("a[href]");
Jsoup還支持白名單過濾機制,對於網站防止XSS攻擊也是很好的。
2.HtmlParser
HtmlParser的功能比較完備,也挺靈活,但談不上方便。這個項目很久沒有維護了,最新版本是2.1。HtmlParser的核心元素是Node,對應一個HTML標簽,支持getChildren()等樹狀遍歷方式。HtmlParser另外一個核心元素是NodeFilter,通過實現NodeFilter介面,可以對頁面元素進行篩選。這里有一篇HtmlParser的使用文章:使用 HttpClient 和 HtmlParser 實現簡易爬蟲。
3.Apache tika
tika是專為抽取而生的工具,還支持PDF、Zip甚至是JavaClass。使用tika分析HTML,需要自己定義一個抽取內容的Handler並繼承org.xml.sax.helpers.DefaultHandler,解析方式就是xml標準的方式。crawler4j中就使用了tika作為解析工具。SAX這種流式的解析方式對於分析大文件很有用,我個人倒是認為對於解析html意義不是很大。
4.HtmlCleaner與XPath
HtmlCleaner最大的優點是:支持XPath的方式選取元素。XPath是一門在XML中查找信息的語言,也可以用於抽取HTML元素。XPath與CSS Selector大部分功能都是重合的,但是CSS Selector專門針對HTML,寫法更簡潔,而XPath則是通用的標准,可以精確到屬性值。XPath有一定的學習成本,但是對經常需要編寫爬蟲的人來說,這點投入絕對是值得的。