这句话,给解释下,尤其是引号,每个引号和谁匹配,什么作用

mingchaoyan 2011-06-03 10:36:05
out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");
这句话,给解释下,尤其是引号,每个引号和谁匹配,什么作用,我要的是仔细回答,每个引号
其中PhotoServlet的代码如下

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.album.AlbumDAOBean;
import com.javabean.AlbumPhoto;

public class PhotoServlet extends HttpServlet {
//处理POST请求
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
response.setContentType("image/jpeg");

String photoId=request.getParameter("photoId");
byte[] bi=null;
OutputStream os=null;
//获取图片
Vector vec=AlbumDAOBean.getPhoto(photoId);

for(Enumeration enu=vec.elements();enu.hasMoreElements();) {

AlbumPhoto ap=(AlbumPhoto)enu.nextElement();
bi=ap.getPhotoByte();
}
try {//输出图片
os=response.getOutputStream();
os.write(bi);
os.flush();
} catch (IOException ie) {
ie.printStackTrace();
} finally {
os.close();
}
}
//处理GET请求
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
this.doPost(request,response);
}
}


这个是先通过getPhotoByte(),然后OutputStream的对象的write将图片的字节数组写入输出流(因为图片是存储在数据库中),假如我现在把图片存在文件目录中,且可以通过getPhotoPath(photoId)取得路径,求相同功能的代码写法;
...全文
170 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
songminghong 2011-06-04
  • 打赏
  • 举报
回复
听着描述都有点晕
boat_in_sea 2011-06-04
  • 打赏
  • 举报
回复
out.println(①"<img height=122 width=130 src=\②"③"+request.getContextPath()+④"/PhotoServlet?photoId=⑤"+s+⑥"\⑦">⑧");
以下两两配对
①③代表字符串
④⑤同上
⑥⑧同上
②⑦因为在双引号中是不能直接放双引号的,所以当想要用双引号的时候就要用到转义符号“\”,
所以被双引号包围的 \" == "
oO临时工Oo 2011-06-04
  • 打赏
  • 举报
回复
out.println("<img height=122 width=130 src=\""+request.getContextPath( + "/PhotoServlet?photoId="+s+"\">");


理解时等效于

out.println("<img height=122 width=130 src="+request.getContextPath()+"/PhotoServlet?photoId="+s+">");


如果楼主连String str = "abcdefg";这句的引号的意思都不理解,我表示飘过。
qybao 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mingchaoyan 的回复:]
引用 1 楼 qybao 的回复:

首先说一下打印的结果是什么,再跟你跟你解释为什么这么写
out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");
打印结果就是
<img height=122 width=130 src="req……
[/Quote]

假设photoId得到的是一个路径(具体业务怎么通过photoId获取路径这里不考虑,只是为了说明得到一个路径后如何处理)
public class PhotoServlet extends HttpServlet {
//处理POST请求
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
response.setContentType("image/jpeg");

String photoId=request.getParameter("photoId");
byte[] bi=null;
OutputStream os=null;
//获取图片
//Vector vec=AlbumDAOBean.getPhoto(photoId);

//for(Enumeration enu=vec.elements();enu.hasMoreElements();) {

// AlbumPhoto ap=(AlbumPhoto)enu.nextElement();
// bi=ap.getPhotoByte();
//}
try {//输出图片
InputSteam is = new FileInputStream(photoId); //oepn file
bi = new byte[1024];
os=response.getOutputStream();
for (int len=is.read(bi); len!=-1; len=is.read(bi)) {
os.write(bi, 0, len); //write file
}
os.flush();
is.close();
} catch (IOException ie) {
ie.printStackTrace();
} finally {
os.close();
}
}
//处理GET请求
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
this.doPost(request,response);
}
}
安心逍遥 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qybao 的回复:]
首先说一下打印的结果是什么,再跟你跟你解释为什么这么写
out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");
打印结果就是
<img height=122 width=130 src="request.getContextPath()……
[/Quote]


懂这个
mingchaoyan 2011-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qybao 的回复:]

首先说一下打印的结果是什么,再跟你跟你解释为什么这么写
out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");
打印结果就是
<img height=122 width=130 src="request.getContextPath(……
[/Quote]
嗯 不错
但下面的问题呢:

这个是先通过getPhotoByte(),然后OutputStream的对象的write将图片的字节数组写入输出流(因为图片是存储在数据库中),假如我现在把图片存在文件目录中,且可以通过getPhotoPath(photoId)取得路径,求相同功能的代码写法;
tom_66 2011-06-03
  • 打赏
  • 举报
回复
其实就是打印一条html语句。代码中的引号是表示字符串,html标签中的属性值也是要用引号引起来的。
servlet很让人纠结啊
javaie 2011-06-03
  • 打赏
  • 举报
回复
改善下楼上的说法:
out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");

完全可以改写成:out.println("<img height=122 width=130 src="+request.getContextPath()+"/PhotoServlet?photoId="+s+">");

省的你纠结。。
qybao 2011-06-03
  • 打赏
  • 举报
回复
首先说一下打印的结果是什么,再跟你跟你解释为什么这么写
out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");
打印结果就是
<img height=122 width=130 src="request.getContextPath()取得的路径/PhotoServlet?photoId=s的值">
就是要得到src=""(中间的内容先不管)这样的形式
好了,在来看out.println("<img height=122 width=130 src=\""+request.getContextPath()+"/PhotoServlet?photoId="+s+"\">");
首先首尾的"不用说了,println的参数是个字符串,所以首尾"代表是个字符串,首尾"之间的东西就是字符串的内容
接下来看src=\",这里\"是对双引号的转义,假如我们要打印双引号,就必须是println("\""),前后两个"表示是个字符串,\"是字符串的内容,是个双引号
这样"<img height=122 width=130 src=\"",到这里是个完成的字符串,它的内容是<img height=122 width=130 src="
接下来,上面的内容加上 request.getContextPath(),然后再加上"/PhotoServlet?photoId="(这两个引号不用解释了),然后再加上s,然后加上"\">",这个前后两个"就不用说了,中间\"是个双引号的转义,所以它的内容是">

就这么个意思,没那么复杂,关键要知道打印双引号的时候该怎么转义

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧