powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / MS Word в blob, Apache POI и JSP
5 сообщений из 5, страница 1 из 1
MS Word в blob, Apache POI и JSP
    #38272836
wassaby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток, уважаемые форумчане. Разрабатываю последнюю часть дипломного проекта и встрял. Суть такова: в БД Oracle есть таблица T_FILE (id, name, content_type, size, data (blob)), в которой хранятся документы Word и необходимо вывести содержимое документа на страницу jsp, что-то вроде онлайн читалки. Скачал и подключил к проекту библиотеки apache poi.

На данный момент я пытаюсь это реализовать следующим образом:
Action, который выполняет функцию получения данных с таблицы БД:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
public class TestStudentReading extends AbstractStudentAction {
	public TestStudentReading() {
		super();
	}

	@Override
	protected ActionForward executeStudentAction(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		Logger log = Logger.getLogger(TestStudentReading.class);
		HttpSession session = request.getSession(true);
		DownloadFileForm download = (DownloadFileForm)form;
		IBFile file = null;

		WordExtractor extractor = null;

		InputStream in = null;
		FileInputStream fis = null;
		
		try {
			IComponentFactory manager = (IComponentFactory) getServlet()
					.getServletContext().getAttribute(
							WebTemplateConstants.MANAGER_ATTR);
			file = manager.getActionFile();
			BFileInfo fileInfo = file.getFile(download.getId());

			byte[] doc = fileInfo.getData();
			in.read(doc);
			
			HWPFDocument document = new HWPFDocument(in);

			extractor = new WordExtractor(document);
			String[] fileData = extractor.getParagraphText();
			request.setAttribute(WebTemplateConstants.READING, fileData);

		} catch (CommonsBeansException e) {
			log.error("Could not get file", e);
			StrutsUtils.processErrors(request, e.getErrorCode(),
					e.getMessageKey());
			return mapping.findForward(StrutsHelperConstants.ERROR_FORWARD);
		}
		return mapping.findForward("success");
	}
}



Страница JSP:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<%@page import="java.io.*"%>
<%@page import="org.apache.poi.poifs.filesystem.POIFSFileSystem"%>
<%@page import="org.apache.poi.hssf.record.*"%>
<%@page import="org.apache.poi.hssf.model.*"%>
<%@page import="org.apache.poi.hssf.usermodel.*"%>
<%@page import="org.apache.poi.hssf.util.*"%>

<h4>Чтение файла</h4>

<%
	String[] doc = (String[])request.getAttribute(WebTemplateConstants.READING);
		  for (int i = 0; i < doc.length; i++) {
				if (doc[i] != null)%>
				 <p align="center"><%= doc[i]%></p>
			<%};%> 



При переходе на страницу JSP выдает ошибку java.lang.NullPointerException на этом месте в Action'е:
Код: java
1.
in.read(doc);



Спасибо.
Проект в Eclipse, использую tomcat, struts.
...
Рейтинг: 0 / 0
MS Word в blob, Apache POI и JSP
    #38272850
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это по вашему должно работать?
Код: java
1.
2.
InputStream in = null;
in.read(doc);
...
Рейтинг: 0 / 0
MS Word в blob, Apache POI и JSP
    #38272891
wassaby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Совершенно верно, я тоже уже это обнаружил (ужасно сглупил). Сейчас пытаюсь теперь из этого потока байтов сделать файл и потом уже пользоваться POI. Спасибо.
...
Рейтинг: 0 / 0
MS Word в blob, Apache POI и JSP
    #38272913
wassaby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Я собрал все в одном java классе, дабы было проще следить за ходом исполнения команд.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ReadBlob {
	private static long id;
	private static String name;
	private static byte[] data;
	private static String contentType;
	private static long size;
	
	public static void main(String[] args) throws Exception {
		WordExtractor extr = null;
		File source = null;
		File sink = null;
		FileOutputStream out = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		String url = "jdbc:oracle:thin:@192.168.80.10:1521:orcl";
		String login = "diplom";
		String password = "diplom";
		System.out.println("\nResult:");
		try {
			Connection conn = DriverManager.getConnection(url, login, password);
			PreparedStatement pstmt = conn
					.prepareStatement("select t.id, t.name, t.p_size, t.p_data, t.content_type from t_file t where t.id = 281");
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				id = rs.getLong(1);
				System.out.println("\n File's ID = " + id);
				name = rs.getString(2);
				System.out.println(" File's name is = " + name);
				size = rs.getLong(3);
				System.out.println(" File's size is = " + size);
				data = rs.getBytes(4);
				contentType = rs.getString(5);
				System.out.println(" File's type is = " + contentType);
			}
			pstmt.close();
			conn.close();
			out = new FileOutputStream(source);
			out.write(data);
			out.close();
			FileInputStream inStream = new FileInputStream(source);
    	    FileOutputStream outStream = new FileOutputStream(sink);
    	    inStream.close();
			extr = new WordExtractor(inStream);
			String[] fileData = extr.getParagraphText();
			for (int i = 0; i < fileData.length; i++) {
				if (fileData[i] != null)
					System.out.println(fileData[i]);
			}
		} catch (SQLException e) {
			System.out.println("SQL Exception handled " + e);
			e.printStackTrace();
		} catch (IOException io) {
			System.out.println("IO Exception handled " + io);
			io.printStackTrace();
		}
	}
}



Я полученный массив байтов записываю в source
Код: java
1.
2.
3.
out = new FileOutputStream(source);
out.write(data);
out.close();


То есть source у меня как файл, верно?
Теперь я этот файл ложу в поток, чтобы extr могла с ним работать.
Код: java
1.
2.
3.
FileOutputStream outStream = new FileOutputStream(sink);
inStream.close();
extr = new WordExtractor(inStream);


Но ничего не получается. Что я делаю не так?
...
Рейтинг: 0 / 0
MS Word в blob, Apache POI и JSP
    #38272937
wassaby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решено. Тема закрыта. Кому вдруг поможет, то вот
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class ReadBlob {
	private static long id;
	private static String name;
	private static byte[] data;
	private static String contentType;
	private static long size;
	
	public static void main(String[] args) throws Exception {
		WordExtractor extr = null;
		FileOutputStream out = null;
		InputStreamReader isr = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		String url = "jdbc:oracle:thin:@192.168.80.10:1521:orcl";
		String login = "diplom";
		String password = "diplom";
		System.out.println("\nResult:");
		try {
			Connection conn = DriverManager.getConnection(url, login, password);
			PreparedStatement pstmt = conn
					.prepareStatement("select t.id, t.name, t.p_size, t.p_data, t.content_type from t_file t where t.id = 301");
			ResultSet rs = pstmt.executeQuery();
			if (rs.next()) {
				id = rs.getLong(1);
				System.out.println("\n File's ID = " + id);
				name = rs.getString(2);
				System.out.println(" File's name is = " + name);
				size = rs.getLong(3);
				System.out.println(" File's size is = " + size);
				data = rs.getBytes(4);
				System.out.println(" File's data is = " + data.length);
				contentType = rs.getString(5);
				System.out.println(" File's type is = " + contentType);
			}
			pstmt.close();
			conn.close();
			out = new FileOutputStream("data");
			out.write(data);
			out.close();
			FileInputStream inStream = new FileInputStream("data");
			extr = new WordExtractor(inStream);
			String[] fileData = extr.getParagraphText();
			for (int i = 0; i < fileData.length; i++) {
				if (fileData[i] != null)
					System.out.println(fileData[i]);
			}
		} catch (SQLException e) {
			System.out.println("SQL Exception handled " + e);
			e.printStackTrace();
		} catch (IOException io) {
			System.out.println("IO Exception handled " + io);
			io.printStackTrace();
		}
	}
}
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / MS Word в blob, Apache POI и JSP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]