使用java控制在html img标记中呈现哪个图像

时间:2013-08-06 15:36:03

标签: java eclipse jsp servlets

当我输入以下内容时,Eclipse会给我各种邪恶的魔力:

<img src=<%if(request.getParameter("x")==null){"/images/x.gif">}  
else{"get-it?x=<%=request.getParameter("x")}%>">

如果动态生成的图像的参数为空,则指定要显示的默认inage的正确语法是什么?此外,我可能想要添加其他条件,这些条件需要显示默认图像。

我应该补充一点,这是在一个由java servlet控制的jsp页面中。

2 个答案:

答案 0 :(得分:2)

使用EL(Scriplets已经死了很长时间):

<c:set var="imgURL" value="get-it?x=${param.x}" />
<img src="${empty param.x ? '/images/x.gif' : imgURL}" />

或者您也可以在不设置其他属性的情况下执行此操作:

<img src="${empty param.x ? '/images/x.gif' : 'get-it?x='}${param.x}" />

如果您只有if-else,则三元运算符将起作用。如@Sotirios的评论中所述,如果您有多个条件可供选择 - if-else if-else阶梯,那么您需要使用<c:choose>代码。

注意,您需要在lib文件夹中添加JSTL库,并包含核心标记库。


说了这么多,你还应该考虑在Servlet本身准备Image URI,转发到JSP。

假设您有一个HTML表单:

<form action="/servlet1" method="POST">
    <input type = "text" name="x" />
</form>

/servlet1映射的Servlet中,您应该获取参数x,并根据该参数创建图像URL 。然后将该图片网址放在请求属性

String x = request.getParameter("x");
if (x == null) {
    // Set Default image in request attribute
    request.setAttribute("imageURL", "images/x.gif");

} else {
    // Else create the image, and set it in request attribute
    resp.setContentType("image/gif");
    BufferedImage bi = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
    GetBI fetchBI = new GetBI(); 
    bi = fetchBI.get_bi(x); 
    ImageIO.write(bi,"gif",resp.getOutputStream()); 

    request.setAttribute("imageURL", "get-it?x="+x);
}

// Forward the request to the required JSP

然后在JSP页面中,您可以使用*imageURL*获取EL

<img src="${imageURL}" />

看,我只需要一个Servlet。如果我错过了什么,看一看并评论。我认为你想要做的只需使用一个Servlet即可。

另见:

答案 1 :(得分:1)

通常的方法是在应用程序(即servlet)的逻辑中计算出图像URI,而不是在视图中(即JSP)。

在你的servlet中;

String uri;
String x = request.getParameter("x");
if (x == null) {
  uri = "/images/x.gif";
} else {
  uri = "get-it?x=" + x;
}
request.setAttribute("imageUri", uri);

在您的JSP中;

<img src="${imageUri}"/>