`
YOUNG918
  • 浏览: 184916 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSP 问题解答

    博客分类:
  • java
阅读更多

JSP中可能会碰到的问题解答
  1、如何混合使用Jsp和SSI #include?
  在JSP中可以使用如下方式包含纯HTML:
  &lt !--#include file="data.inc"-- &gt
  但是如果data.inc中包含JSP CODE ,我们可以使用:
  &lt <A href="%@includemailto:%@include">%@include</A> file="data.inc"% &gt </P>
  2、如何执行一个线程安全的JSP?
  只需增加如下指令
  &lt %@ page isThreadSafe="false" % &gt </P>
  3、JSP如何处理HTML FORM中的数据?
  通过内置的request对象即可,如下:
  &lt %
  String item = request.getParameter("item");
  int howMany = new Integer(request.getParameter("units")).intvalue();
  % &gt </P>
  4、在JSP如何包含一个静态文件?
  静态包含如下:&lt %@ include file="copyright.html" % &gt
  动态包含如下:&lt jsp:include page="copyright.html" flush="true"/ &gt </P>
  5、在JSP中如何使用注释?
  主要有四中方法:
  1。&lt %-- 与 --% &gt
  2。//
  3。/**与**/
  4。&lt !--与-- &gt </P>
  6、在JSP中如何执行浏览重定向?
   使用如下方式即可:response.sendRedirect("<A href="http://ybwen.home.chinaren.com/index.htmlhttp://ybwen.home.chinaren.com/index.html">http://ybwen.home.chinaren.com/index.html</A>");
  也能物理地改变HTTP HEADER属性,如下:
  &lt %
  response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
  String newLocn="/newpath/index.html";
  response.setHeader("Location",newLocn);
  % &gt </P>
  7、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中?
  把如下脚本加入到JSP文件的开始即可:
  &lt %
  response.setHeader("Cache-Control","no-store"); //HTTP 1.1
  response.setHeader("Pragma","no-cache"); //HTTP 1.0
  response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
  % &gt </P>
  8、在JSP中如何设置COOKIE?
  COOKIE是作为HTTP HEADER的一部分被发送的,如下方法即可设置:
  &lt %
  Cookie mycookie = new Cookie("aName","avalue");
  response.addCookie(mycookie);
  % &gt </P>
  9、在JSP中如何删除一个COOKIE?
  &lt %
  Cookie killMyCookie = new Cookie("mycookie", null);
  killMyCookie.setMaxAge(0);
  killMyCookie.setPath("/");
  response.addCookie(killMyCookie);
  % &gt </P>
  10、在一个JSP的请求处理中如何停止JSP的执行
  如下例:
  &lt %
  if (request.getParameter("wen") != null) {
  // do something
  } else {
  return;
  }
  % &gt </P>
  11、在JSP中如何定义方法
  你可以定义方法,但是你不能直接访问JSP的内置对象,而是通过参数的方法传递。如下:
  &lt %!
  public String howBadFrom(HttpServletRequest req) {
  HttpSession ses = req.getSession();
  ...
  return req.getRemoteHost();
  }
  % &gt
  &lt %
  out.print("in general,lao lee is not baddie ");
  % &gt
  &lt %= howBadFrom(request) % &gt </P>
  12、如果BROWSER已关闭了COOKIES,在JSP中我如何打开SESSION来跟踪
  使用URL重写 即可,如下:
  hello1.jsp
  &lt %@ page session="true" % &gt
  &lt %
  Integer num = new Integer(100);
  session.putvalue("num",num);
  String url =response.encodeURL("hello2.jsp");
  % &gt
  &lt a href=&lt %=url% &gt &gthello2.jsp&lt /a &gt </P>
  hello2.jsp
  &lt %@ page session="true" % &gt
  &lt %
  Integer i= (Integer )session.getvalue("num");
  out.println("Num value in session is "+i.intvalue());
  % &gt </P>
  13、在JSP中能发送EMAIL吗
  可以使用SUN的专用包:sun.net.smtp包。如下脚本使用SmtpClient类发送EMAIL。
  &lt %@ page import="sun.net.smtp.SmtpClient, java.io.*" % &gt
  &lt %
  String from="<A href="ybwen@sina.commailto:ybwen@sina.com">ybwen@sina.com</A>";
   String to="<A href="hewenjun@yeah.netmailto:hewenjun@yeah.net">hewenjun@yeah.net</A>, <A href="lei@who.com.cnmailto:lei@who.com.cn">lei@who.com.cn</A>";
  try{
  SmtpClient client = new SmtpClient("mail.xxxxx.xxx");
  client.from(from);
  client.to(to);
  PrintStream message = client.startMessage();
  message.println("To: " + to);
  message.println("Subject: Sending email from JSP!");
  message.println("This was sent from a JSP page!");
  message.println();
  message.println("Cool! :-)");
  message.println();
  message.println("Good Boy");
  message.println("Im in genius.com");
  message.println();
  client.closeServer();
  }
  catch (IOException e){
  System.out.println("ERROR SENDING EMAIL:"+e);
  }
  % &gt </P>
  14、在SERVLET中我能调用一个JSP错误页吗
  当然没问题,如下展示了如何在一个SERVLET控制逻辑单元内调用一个JSP错误页面。
  protected void sendErrorRedirect(HttpServletRequest request,
  HttpServletResponse response, String errorPageURL,
  Throwable e)
  throws ServletException, IOException {
  request.setAttribute ("javax.servlet.jsp.jspException", e);
  getServletConfig().getServletContext().
  getRequestDispatcher(errorPageURL).forward(request,
  response);
  } </P>
  public void doPost(HttpServletRequest request,HttpServletResponse response) {
  try {
  // do something
  } catch (Exception ex) {
  try {
  sendErrorRedirect(request,response,"/jsp/MyErrorPage.jsp",ex);
  } catch (Exception e) {
  e.printStackTrace();
  }
  }
  } </P>
  15、JSP和APPLET如何通讯
  JSP如何与EJB SessionBean通讯
  下面的代码段作了很好的示范
  &lt %@ page import="javax.naming.*, javax.rmi.PortableRemoteObject,
  foo.AccountHome, foo.Account" % &gt
  &lt %!
  //定义一个对SessionBeanHome接口实例的全局引用
  AccountHome accHome=null; </P>
  public void jspInit() {
  //获得Home接口实例
  InitialContext cntxt = new InitialContext( );
  Object ref= cntxt.lookup("java:comp/env/ejb/AccountEJB");
  accHome = (AccountHome)PortableRemoteObject.narrow(ref,AccountHome.class);
  }
  % &gt
  &lt %
  //实例化SessionBean
  Account acct = accHome.create();
  //调用远程方法
  acct.doWhatever(...);
  // 如此等等
  % &gt </P>
  16、当我使用一个结果集时,如何防止字段为"null"的字域显示在我的 HTML输入文本域中?
  可以定义一个简单的函数来达到目的,如下:
  &lt %!
  String blanknull(String s) {
  return (s == null) ? "" : s;
  }
  % &gt </P>
  然后在JSP的FORM中,可以这样使用
  &lt input type="text" name="shoesize" value="&lt %=blanknull(shoesize)% &gt" &gt </P>
  17、如何中SERVLET或JSP下载一个文件(如:binary,text,executable)?
  现提供两个解决方案:
  A:使用HTTP,
  B:在Servlet中,通过设置ContentType和使用java.io包的Stream等类可作到.例如:
  response.setContentType("application/x-msword");
  然后想输出缓冲中写一些东东即可。 </P>
  18、使用useBean标志初始化BEAN时如何接受初始化参数
  使用如下两标签即可:
  &lt jsp:getProperty name="wenBean" property="someProperty"/ &gt
  &lt jsp:setProperty name="wenBean" property="someProperty" value="somevalue"/ &gt </P>
  19、使用JSP如何获得客户浏览器的信息?
  使用request.getHeader(String)即可 </P>
  20、能象调用子程序一样调用JSP吗?
  当然可以,用&lt jsp:include page="relativeURL" flush="true"/ &gt </P>
  21、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? </P>
   &lt <A href="%@includemailto:%@include">%@include</A> file="abc.jsp"% &gt与&lt jsp:include page="abc.jsp"/ &gt之间的差别?
  前一个为静态包含,而后一个为动态包含 </P>
  22、JSP的缺点?
  1。对JAVA程序进行调试没有好东东
  2。因大多数的servlet引擎不支持connection pooling
  3。Servlet引擎没有标准
  4。JSP与其它脚本语言的交互 </P>
  23、JSP能进行递归调用吗?
  当然可以,如对form的提交给本页 </P>
  34、如何实现JSP的国际化?
  为各种版本提供resource bundles属性文件即可 </P>
  25、在JSP中如何写文本文件?
  使用PrintWriter对象,如:
  &lt %@ page import="java.io.*" % &gt
  &lt %
  String str = "print me";
  String nameOfTextFile = "/usr/anil/imp.txt";
  try {
  PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile));
  pw.println(str);
  pw.close();
  } catch(IOException e) {
  out.println(e.getMessage());
  }
  % &gt </P>
  26、如何在JSP中包括绝对路径文件?
  使用URLConnection即可。 </P>
  27、在servlets和JSP之间能共享session对象吗?
  当然可以,
  HttpSession session = request.getSession(true);
  session.putvalue("variable","value"); </P>
  28、Javascript的变量能复制到JSP的SESSION中吗? </P>
  29、如何设置cookie在某一时间后过期?
  用Cookie.setMaxAge(int) </P>
  30、如何获得当前的sessions数?
  可以使用HttpSessionBindingListeners来跟踪 </P>
  31、能设置一些代码在我所有的JSP文件之上运行?如果可以,能共享吗?
  当然可以,可以为你的JSP文件定义一个别名:/jsp/=ybwen.genius.myPreprocessingServlet,而以/jsp/为前缀的文件可以使用 </P>
  32、对一个JSP页,如果多个客户端同时请求它,同步可能吗?
  在jsp:useBean语法中使用beanName有何好处?
  beanName使用Beans.instantiate()初始化Bean </P>
  33、当我使用&lt jsp:forward &gt时,在浏览器的地址栏没有改变?
  使用response.sendRedirect("newURL") </P>
  34、如何转换JSP 0.9版本的文件到JSP1.1?
  可使用sed/awk即可 </P>
  35、使用JSP能设置HTML FORM中输入域的焦点,不用Javascript?
  没办法 </P>
  36、使用JSP连接到数据库连接缓冲池的最好方法是什么?
  1。使用JDBC2。0中带有此服务的Driver
  2.使用提供有此服务的Application server

 

 

 

<转贴>

一般常见问题

什么是 JSP 技术?
JSP 技术的工作原理?
什么是 servlet?
我已经采用了servlets,为何还需要 JSP 技术呢?
从哪里可以获得最新版本的 JSP 规范?
JSP 规范与 Java 2 Platform, Enterprise Edition 的关系如何?
有哪些web服务器支持JSP 技术?
Sun 公司是否提供 JSP 规范的参考实现?
JSP 技术与其他产品技术相比有什么不同?
从那里可获得关于 JSP 技术的更多信息?

技术常见问题

JSP 页面是什么?
JSP 页面如何工作?
JSP 技术需要使用其他 Java 平台 API 吗?
JSP 页面如何进行调用和编译?
JSP 技术的语法是怎样的?
能否使用 JSP 技术来生成 XML 页面?
能否使用 XML 工具来生成和处理 JSP 页面?
在 JSP 页面中怎样使用 Javabeans 组件(bean)?

一般常见问题

什么是 JSP 技术?
JavaServer Pages(JSP) 技术提供了一种简单快速的方法来创建显示动态生成内容的 Web 页面。由业界处于领先地位的 Sun 公司制定了相关的 JSP 技术规范,该规范定义了如何在服务器和 JSP 页面间进行交互,还描述了页面的格式和语法。
JSP 技术的工作原理?

JSP 页面使用 XML 标签和 scriptlets(一种使用 Java 语言编写的脚本代码),封装了生成页面内容的逻辑。它将各种格式的标签(HTML 或者 XML)直接传递回响应页面。通过这种方式,JSP 页面实现了页面逻辑与其设计和显示的分离。

JSP 技术是 Java 系列技术的一部分。JSP 页面被编译成 servlets,并可能调用 JavaBeans 组件(beans) 或 Enterprise JavaBeans 组件(企业 beans),以便在服务器端处理。因此,JSP 技术在构建可升级的基于 web 的应用程序时扮演了重要角色。

JSP 页面并不局限于任何特定的平台或 web 服务器上。JSP 规范在业界有着广泛的适应性。
什么是 servlet?

相对于浏览器上运行的 applets 而言,servlet 是在服务器上运行的,用 Java 语言编写的程序。详细信息可访问 http://java.sun.com/products/servlet .
我已经采用了servlets,为何还需要 JSP 技术呢?

既然 JSP 页面也要被编译成 servlets,那么理论上,您可以直接写 servlets 来支持您的基于 web 的应用程序。然而,JSP 技术通过将页面内容和显示逻辑分开,简化了创建网页的过程。在许多应用程序中,需将模板内容和动态生成的数据一块发送到客户端。基于此考虑,使用 JSP 页面技术将比全部用 servlets 来写要方便得多。
从哪里可以获得最新版本的JSP 规范?

最新的 JavaServer Pages 2.0 规范可以 从此 下载。
JSP 规范与 Java 2 Platform, Enterprise Edition 的关系如何?

JSP 2.0 规范是 Java 2 Platform, Enterprise Edition 1.4 的重要组成部分。 在构建基于 web 前端显示的分布式企业应用程序方面,JSP 和 EJB 技术的结合显示出强大的力量。
有哪些 web 服务器支持 JSP 技术?

有许多 JSP 技术实现可用于不同的 web 服务器。要获取最新已被官方支持的 web 服务器信息 ,请访问 http://java.sun.com/products/jsp/industry.html
Sun 公司是否提供对 JSP 规范的参考实现?

J2EE SDK 是 JavaTM 2 Platform, Enterprise Edition 的参考实现。Sun 在 J2EE SDK 中改装并集成了 Tomcat JSP 和 Java Servlet 实现。在应用程序部署和发布之前,可将J2EE SDK作为开发环境。

Tomcat 是免费和开放源代码的 Java Servlet 和 JSP 技术的实现,它由 Apache Software Foundation 的Jakarta 项目组开发。可从 http://jakarta.apache.org 下载。Tomcat 的商业应用需要有 Apache Software Foundation(ASF)的许可,并且可在 Apache 的网站上获取二进制和源代码的版本。JSP 技术的实现是 J2EE SDK 的一部分。
JSP 技术与其他产品技术相比有什么不同?

JSP 技术是行业协作的结果,它的设计是开放的,符合行业标准的,并支持绝大多数的服务器、浏览器和相关工具。由于使用可重用的组件和标签取代了对页面本身脚本 语言的严重依赖,JSP 技术大大加快了开发的速度。所有 JSP 的实现均支持以 Java 编程语言为基础的脚本语言,它有与生俱来的可适应性,支持复杂的操作。
从那里可获得关于 JSP 技术的更多信息?

获得关于 JSP 技术信息的最佳地方是 http://java.sun.com/products/jsp/ 。这里有大量的资源,还有 JSP 相关技术主题的邮件列表和讨论组等信息。


技术常见问题

JSP 页面是什么?

JSP 页面是 web 开发人员使用 JSP 内置标签和自定义标签,结合其他静态标签(HTML 或 XML 标签)生成的页面。JSP 页面的扩展名为 .jsp 或.jspx,web 服务器通过此扩展名通知 JSP 引擎处理该页面中的元素。通过部署描述文件 web.xml,也可使用其他扩展名和 JSP 引擎联系。

JSP 规范里描述了 JSP 页面的确切格式。
JSP 页面如何工作?

通过 JSP 引擎解释 JSP 页面中的标签,生成所需内容。例如,调用一个 bean 来访问一个使用JDBC API 的数据库或者是包含一个文件。然后 JSP 引擎把返回的结果以 HTML(或XML)页面的形式发送到浏览器。实质上是把生成内容的业务逻辑封装在服务器端处理的标签和 beans 中。
JSP 技术需要使用其他 Java 平台 API 吗?

JSP 页面通常被编译成 Java 平台 servlet 类。因此,JSP 页面的运行需要有能支持 Java 平台 servlet 规范的 Java 虚拟机。
JSP 页面如何进行调用和编译?

JSP 页面实际上只是在第一次被调用的时候被编译一次。页面被编译成 Java Servlet 类 ,并驻留在服务器内存中,这样以后调用该页面时将很快。
JSP 技术的语法是怎样的?

有关 JSP 的 语法和参考 可以到我们的网站上浏览和下载。
能否使用 JSP 技术来生成 XML 页面?

当然,JSP 规范支持 XML 文档的创建。对于简单的 XML 文档生成,XML 标签将以静态的部分包含在 JSP 页面中。动态的 XML 生成则需要使用 bean 组件或者自定义标签来实现。参阅白皮书 Developing XML Solutions with JavaServer Pages Technology (PDF)可以获得更多的细节。
能否使用 XML 工具来生成和处理 JSP 页面?

JSP 2.0 规范描述了 JSP 页面和 XML 文档之间的映射。通过该映射可以使用 XML 工具来生成和处理 JSP 页面。
在 JSP 页面中怎样使用 Javabeans 组件(bean)?

JSP 规范包括了标准的标签,用于使用和处理 bean。使用 useBean 标签生成一个特定 JavaBeans 的实例。如果这个类的实例已经存在,则直接使用。否则,创建一个新的实例。setProperty 和 getProperty 标签允许您操作给定对象的属性。这些标签在 JSP 规范和指南中有详细描述。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics