JSP pada asasnya ialah teknologi paparan yang direka untuk menjana output HTML.
Untuk memaparkan imej dalam format HTML, anda memerlukan elemen HTML.
Untuk meletakkannya imej, anda perlu menentukan atributsrcnya.
Atribut
src属性需要指向有效的http://perlu menghala ke URLhttp://yang sah, jadi bukan laluan sistem fail cakera tempatan file://
kerana ini tidak akan berfungsi apabila pelayan dan klien berjalan pada mesin yang berbeza secara fizikal akan bekerja.
http://example.com/context/images/foo.png)或作为请求参数(例如http://example.com/context/images?id=1URL imej perlu memasukkan pengecam imej dalam laluan permintaan (cth.
http://example.com/context/images/foo.png) atau sebagai parameter permintaan (cth.
http:// contoh. com/context/images?id=1).
/images/*Dalam dunia JSP/Servlet, anda boleh meminta servlet mendengar corak URL tertentu, seperti
/images/*, supaya anda boleh melaksanakan beberapa kod Java pada URL tertentu.
ServletContext#getMimeType() Berdasarkan sambungan fail imej, anda boleh melanjutkan dan/atau mengatasi sambungan itu melalui
dalam web.xml. Begitulah sepatutnya. Ia cukup banyak menulis kod itu sendiri. Mari kita mulakan dengan HTML (dalam JSP):
Jika perlu, anda juga boleh menggunakan tetapan dinamik EL ="https://stackoverflow.com/tags/jstl/info">JSTL:
Kemudian tentukan/buatservletyang mendengar pada/images/*, contoh berikut menggunakan JDBC biasa untuk melakukan kerja:
@WebServlet("/images/*") public class ImageServlet extends HttpServlet { // content=blob, name=varchar(255) UNIQUE. private static final String SQL_FIND = "SELECT content FROM Image WHERE name = ?"; @Resource(name="jdbc/yourDB") // For Tomcat, define as in context.xml and declare as in web.xml. private DataSource dataSource; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String imageName = request.getPathInfo().substring(1); // Returns "foo.png". try (Connection connection = dataSource.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_FIND)) { statement.setString(1, imageName); try (ResultSet resultSet = statement.executeQuery()) { if (resultSet.next()) { byte[] content = resultSet.getBytes("content"); response.setContentType(getServletContext().getMimeType(imageName)); response.setContentLength(content.length); response.getOutputStream().write(content); } else { response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. } } } catch (SQLException e) { throw new ServletException("Something failed at SQL/DB level.", e); } } }
Mari lihat apa yang berlaku langkah demi langkah:
.
src
nya.src
属性需要指向有效的http://
perlu menghala ke URLhttp://
yang sah, jadi bukan laluan sistem fail cakera tempatan file://http://example.com/context/images/foo.png
)或作为请求参数(例如http://example.com/context/images?id=1
URL imej perlu memasukkan pengecam imej dalam laluan permintaan (cth.http:// contoh. com/context/images?id=1
)./images/*
Dalam dunia JSP/Servlet, anda boleh meminta servlet mendengar corak URL tertentu, sepertibyte[]
或InputStream
的形式获取,JDBC API提供ResultSet#getBytes()
和ResultSet#getBinaryStream()
为此,JPA API提供@Lob
Imej ialah data binari yang boleh diperoleh daripada pangkalan data sebagaibait[] atau 李>InputStream,JDBC APIbyte[]
或InputStream
写入响应的OutputStream
ResultSet#getBytes()danResultSet#getBinaryStream() Untuk melakukan ini,JPA APIContent-Type
响应头也需要设置。您可以通过ServletContext#getMimeType()
基于图像文件扩展名,您可以通过web.xml 中的
扩展和/或覆盖该扩展名
InputStream pada responsOutputStream (cara biasaJava IO
.Pelanggan perlu diarahkan untuk mengendalikan data sebagai imej, jadi sekurang-kurangnya pengepala respons
ServletContext#getMimeType() Berdasarkan sambungan fail imej, anda boleh melanjutkan dan/atau mengatasi sambungan itu melaluisrc
Jenis Kandungan perlu ditetapkan juga. Anda boleh mendapatkan jenis yang betul melaluiKemudian tentukan/buatservletyang mendengar pada
/images/*, contoh berikut menggunakan JDBC biasa untuk melakukan kerja:
Itu sahaja. Jika anda bimbang tentang HEAD dan pengepala cache dan membalas permintaan ini dengan betul, gunakanTemplat Abstrak untuk servlet Sumber Statikini.
Lihat juga: