2009-03-13 35 views
5

Tôi được giao nhiệm vụ thử tạo một trang web sẽ tạo mẫu HTML tùy chỉnh. Các tùy chỉnh được dựa trên tùy chỉnh khi người dùng nhập vào. Tôi hiện đang sử dụng tomcat/JSP cho phần còn lại của giao diện người dùng. Những gì tôi muốn làm là tạo các mẫu HTML trong JSP để xuất mã HTML có điều kiện, nhưng thay vì hiển thị đầu ra HTML này cho người dùng, tôi muốn lưu mã này vào một số tệp (sau đó sẽ được nén và chuyển đến người dùng, cùng với hình ảnh, tệp css, tệp js). Tôi cần phải biết làm thế nào để tạo ra một container giả sẽ thực thi một tệp tin JSP (quá trình bao gồm và đánh giá các biến).Ghi lại đầu ra JSP, lưu vào tập tin

Tôi đọc về cách sử dụng bộ lọc máy chủ để chặn đầu ra của mã JSP, nhưng tôi không chắc chắn điều này sẽ hoạt động vì a) Tôi cần tạo một số tệp HTML và b) Tôi cần hiển thị nội dung khác nhau cho người dùng (ví dụ: đây là tập tin zip ur, tải xuống nó) không phải đầu ra của JSP đang được xử lý.

Cảm ơn!

Trả lời

4

Đây là một ý tưởng. Tạo một servlet để chấp nhận đầu vào từ người dùng, từ servlet sử dụng java.net.HttpURLConnection để truyền đầu vào cho trang JSP và để có được kết quả.

URL urlPage = new URL(url); 
HttpURLConnection conn = (HttpURLConnection)urlPage.openConnection(); 
conn.connect(); 
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

//then loop through lines of webpage with br.readLine(); 

Sau đó, trong servlet của bạn, bạn có thể nén tất cả các file bạn kéo và gửi lại cho người sử dụng

0

Tại sao không sử dụng wget? Bạn có thể tải các trang vào một thùng chứa thực và sau đó lấy các trang được tạo ra từ thùng chứa bằng cách sử dụng wget.

--input-file=FILE read URLs from file. 

Sử dụng tùy chọn này trong wget sẽ lấy danh sách URL từ tệp và tải xuống cho bạn giống như văn bản sẽ được hiển thị trong chế độ xem của trình duyệt.

Cũng có sẵn wget cho Windows và Linux.

+0

cảm ơn ý tưởng, tôi yêu thích wget, nhưng nó không phù hợp với nhu cầu của tôi –

+0

@Roy Đã làm với bit nén không? – leeand00

+0

@ leeand00 không cụ thể, moreso với thực tế rằng đây là môi trường java phải làm việc trong nhiều môi trường, và chúng tôi có các nhà phát triển windows, mac và linux làm việc trên cùng một codebase, vì vậy giải pháp cần phải dựa trên java –

1

Bạn có thể có một servlet gọi tới JSP bằng cách mở một URLConnection và sau đó đọc trong đầu ra vào một tệp tạm thời hoặc một bộ đệm. Sau đó nó sẽ nén nó và viết zip ra.

1

Tôi thực sự không chắc là tôi hiểu câu hỏi của bạn, nhưng tôi sẽ mất một đâm vào nó. Tại sao không tạo ra một servlet và có nó gọi file jsp của bạn bằng cách sử dụng sau đây:


    RequestDispatcher d = getServletContext().getRequestDispatcher(jspName); 
    d.forward(request, response); 

Có jsp hiển thị khi kết thúc phía trước với hình thức/user đầu vào giá trị. Khi biểu mẫu được hoàn thành, hãy gửi biểu mẫu. Tại thời điểm đó, jsp sẽ trả về ngữ cảnh cho servlet nơi bạn có thể phân tích cú pháp các giá trị, xác định các tệp cần tạo và trả về cho người dùng. Một khi bạn đã xác định những gì bạn muốn hiển thị cho người dùng, ném nó vào một jsp khác và chuyển ngữ cảnh đến jsp đó.

Bạn có thể thực hiện việc này theo 2 cách. Bạn có thể tạo một jsp khác nhau cho các loại tệp khác nhau mà bạn muốn quay lại và chỉ cần gọi một tệp thích hợp. Hoặc Bạn có thể chuyển bất kỳ cấu trúc/giá trị nào bạn muốn vào jsp bằng cách nhúng chúng vào yêu cầu và sau đó nhận chúng trong jsp của bạn. Bạn có thể sử dụng thực tế này để tạo một jsp đơn dựa trên các tham số được truyền vào (được nhúng trong yêu cầu) sẽ hiển thị thông tin thích hợp.

Nếu tôi hoàn toàn bỏ lỡ điểm câu hỏi của bạn, vui lòng xóa câu trả lời này.

Chỉnh sửa: Dù bằng cách nào bạn cũng sẽ phải nhúng giá trị của mình trong yêu cầu.

0

Bạn cũng có thể thử sử dụng một số công cụ tạo mẫu ánh sáng được thiết kế đặc biệt cho công việc đó. Đó là những gì tôi đã làm khi tôi có nhiệm vụ tương tự và không bao giờ nhìn lại. Hãy xem ví dụ Velocity.

Các vấn đề liên quan