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:
- 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 atribut
Atribut
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) atau sebagai parameter permintaan (cth.
/images/*, supaya anda boleh melaksanakan beberapa kod Java pada URL tertentu.
- menyediakan
Disediakan
- @Lobuntuk ini.
Dalam Servlet, anda cuma tulis
bait[] ini atau![]()
.srcnya.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=1URL 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提供@LobImej ialah data binari yang boleh diperoleh daripada pangkalan data sebagaibait[] atau 李>InputStream,JDBC APIbyte[]或InputStream写入响应的OutputStreamResultSet#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 melaluisrcJenis Kandungan perlu ditetapkan juga. Anda boleh mendapatkan jenis yang betul melaluiKemudian 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); } } } Itu sahaja. Jika anda bimbang tentang HEAD dan pengepala cache dan membalas permintaan ini dengan betul, gunakanTemplat Abstrak untuk servlet Sumber Statikini.
Lihat juga: