как отобразить изображение по последнему созданному в базе данных в jsp

1

Это мой код. У меня есть образ в папке и пути к файлу в базе данных, я хочу получить все изображение по последней созданной строке. Я хочу показать первое последнее изображение.

<%@ include file="getcon.jsp"%>
<html>
<head>
<title>View Image Page</title>
</head>
<body>
<table width="100%" border="0">
<!-- main content -->
<%
String type=request.getParameter("type");
String sql;

if(type!=null)
       {
    sql="SELECT PICTURE, TITLE, TAG, POST from testimage where type='"+type+"'";




ResultSet rs=null;
try
{

rs=st.executeQuery(sql);


while(rs.next())
{
%>
<table width="700%" height="600" border="1" align="center">
<tr>
<!-- Mention Directory where your images has been saved-->
 <% String filename=rs.getString(2);

                                  //System.out.println("filename isssssss"+filename);
                                  out.println("<b>"+filename+"</b>");
                                  out.println(application.getRealPath("/"));
                                  //session.setAttribute("download",filename);
                          %>

<td><img src="jokeimage\<%=rs.getString(1)%>" width="500" height="400" /></td>
</tr>
</table>
<%
}
}
catch(Exception e)
{
out.print(""+e.getMessage());
}
}
else{}
%>
  • 1
    Пожалуйста, старайтесь избегать Scriplet, вместо этого используйте JSTL & EL.
  • 0
    Где именно проблема? При доступе к базе данных или изображению с сервера, пожалуйста, объясните немного больше?
Теги:
jsp

2 ответа

0

Всегда старайтесь избегать элементов Scriplet вместо этого использовать JSP Standard Tag Library, которая более проста в использовании и меньше подвержена ошибкам.

Вы можете использовать библиотеку тегов SQL, которая предназначена для доступа к базе данных в JSP.

Пример кода: (изменить URL-адрес базы данных и учетные данные)

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<sql:setDataSource var="dataSource" driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/db" user="root" password="" />

<sql:query dataSource="${dataSource}" sql="SELECT PICTURE, TITLE from testimage where type=? ORDER BY CREATION_DATE DESC" var="result">
    <sql:param value="${param.type}"/>
</sql:query>

<table width="100%" height="600" border="1" align="center">
    <c:forEach var="row" items="${result.rows}">
        <tr>
            <td><b>${row.tag}</b></td>
            <td><img src="${pageContext.request.contextPath}/jokeimage/${row.picture}" width="500" height="400" /></td>
        </tr>
    </c:forEach>
</table>

Как я преобразовал его в JSTL & EL из Scriplet?

  1. ${param.type} используется для request.getParameter("type")
  2. ${pageContext.request.contextPath} используется для application.getRealPath("/")
  3. c:forEach тег используется для во while цикла
  4. sql:param используется для параметризованного запроса
  5. sql:setDataSource используется для создания источника данных
  6. sql:query используется для выполнения запроса
0

Я бы выбрал параметры PreparedStatement и bind (поскольку текущий запрос восприимчив к SQL Injection), при условии, что значение столбца POST увеличивается для каждой следующей строки; возможно сделать что-то подобное в контроллере Servlet -

sql="SELECT PICTURE, TITLE, TAG, POST from testimage where type=? ORDER BY POST DESC";
PreparedStatement ps = null;
try {
  ps = conn.prepareStatement(sql);
  ps.setString(1, type);
  rs = ps.executeQuery();
  // ... Read the ResultSet ...
} finally {
  try {
    rs.close();
  } catch (Exception ignored) {
  }
  try {
    ps.close();
  } catch (Exception ignored) {
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню