<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ChenTaoqian&#039;s Blog &#187; JSP</title>
	<atom:link href="http://www.chentaoqian.com/archives/tag/jsp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.chentaoqian.com</link>
	<description>主机,企业邮箱,域名,空间,服务器,Java,Oracle,PHP,Linux,JS,MySQL,Apache</description>
	<lastBuildDate>Wed, 30 Nov 2011 14:35:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>JSP实现URL中文编码</title>
		<link>http://www.chentaoqian.com/archives/775</link>
		<comments>http://www.chentaoqian.com/archives/775#comments</comments>
		<pubDate>Sun, 08 Aug 2010 10:48:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=775</guid>
		<description><![CDATA[URL中传中文字符是件头疼事，本身URL不支持中文字符，但有些情况下又不得不传中文字当参数，若直接把中文字加上去，获取后势必会是乱码，这该怎么办呢？幸好JAVA提供一个URL中字符编码转换的API&#8211;URLEncoder，下面给段使用范例：
public class Common{
public static String encode(String s) {
try {
return URLEncoder.encode(s,JspRunConfig.CHARSET);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return s;
}
public static String decode(String s) {
try {
return URLDecoder.decode(s,JspRunConfig.CHARSET);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return s;
}
}
使用时，如果不做任何处理就直接传递，中文也许没有问题（但不保证），但空格肯定会有问题，到接收页面无法识别。
解决办法1：Common.encode(sContent,&#8221;utf-8&#8243;); 然后再传递。比如url是&#8221;accept.jsp?content=&#8221;+sContent;
读取时，使用
String sc = request.getParameter(&#8220;content&#8221;);
sc = new String(sc.getBytes(&#8220;iso-8859-1&#8243;),&#8221;utf-8&#8243;);
]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/775/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关注wap用户-删除JSP编译后的空行</title>
		<link>http://www.chentaoqian.com/archives/772</link>
		<comments>http://www.chentaoqian.com/archives/772#comments</comments>
		<pubDate>Sun, 08 Aug 2010 07:54:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[wap]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=772</guid>
		<description><![CDATA[wap用户不同于HTTP用户，对于他们小小的屏幕来说，每一行都是很宝贵的，任何一行无效的空行都会导致用户体验差。对于这种情况该如何呢？
方案1.在Tomcat安装目录/conf/web.xml中找到名叫&#8221;jsp&#8221;的servlet，添加下面一段代码：
&#60;init-param&#62;
&#60;param-name&#62;trimSpaces&#60;/param-name&#62;
&#60;param-value&#62;true&#60;/param-value&#62;
&#60;/init-param&#62;
添加代码后删除work缓存
方案2.&#60;%@ page trimDirectiveWhitespaces=&#8221;true&#8221; %&#62;每个页面加上,此方法最有效,但是比较麻烦
]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/772/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>request.getAttribute和request.getParameter有什么区别？</title>
		<link>http://www.chentaoqian.com/archives/366</link>
		<comments>http://www.chentaoqian.com/archives/366#comments</comments>
		<pubDate>Tue, 23 Jun 2009 13:50:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[getAttribute]]></category>
		<category><![CDATA[getParameter]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[区别]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=366</guid>
		<description><![CDATA[HttpServletRequest类既有getAttribute()方法，也由getParameter()方法，这两个方法有以下区别：
（1）HttpServletRequest类有setAttribute()方法，而没有setParameter()方法
（2）当两个Web组件之间为链接关系时，被链接的组件通过getParameter()方法来获得请求参数，例如假定welcome.jsp和authenticate.jsp之间为链接关系，welcome.jsp中有以下代码：
&#60;a href=&#8221;authenticate.jsp?username=abcd&#8221;&#62;authenticate.jsp &#60;/a&#62;
或者：
&#60;form name=&#8221;form1&#8243; method=&#8221;post&#8221; action=&#8221;authenticate.jsp&#8221;&#62;
  请输入用户姓名：&#60;input type=&#8221;text&#8221; name=&#8221;username&#8221;&#62;
  &#60;input type=&#8221;submit&#8221; name=&#8221;Submit&#8221; value=&#8221;提交&#8221;&#62;
&#60;/form&#62;
在authenticate.jsp中通过request.getParameter(&#8220;username&#8221;)方法来获得请求参数username:
&#60;% String username=request.getParameter(&#8220;username&#8221;); %&#62;
（3）当两个Web组件之间为转发关系时，转发目标组件通过getAttribute()方法来和转发源组件共享request范围内的数据。假定authenticate.jsp和hello.jsp之间为转发关系。authenticate.jsp希望向hello.jsp传递当前的用户名字，如何传递这一数据呢？先在authenticate.jsp中调用setAttribute()方法：
&#60;%
String username=request.getParameter(&#8220;username&#8221;);
request.setAttribute(&#8220;username&#8221;，username);
%&#62;
&#60;jsp:forward page=&#8221;hello.jsp&#8221; /&#62;
在hello.jsp中通过getAttribute()方法获得用户名字:
&#60;% String username=(String)request.getAttribute(&#8220;username&#8221;); %&#62;
Hello: &#60;%=username %&#62;
从更深的层次考虑，request.getParameter()方法传递的数据，会从Web客户端传到Web服务器端，代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
request.setAttribute()和getAttribute()方法传递的数据只会存在于Web容器内部，在具有转发关系的Web组件之间共享。这两个方法能够设置Object类型的共享数据。
]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/366/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Servlet基础知识</title>
		<link>http://www.chentaoqian.com/archives/340</link>
		<comments>http://www.chentaoqian.com/archives/340#comments</comments>
		<pubDate>Fri, 19 Jun 2009 12:26:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[基础]]></category>
		<category><![CDATA[知识]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=340</guid>
		<description><![CDATA[1、说一说Servlet的生命周期?
答:servlet有良好的生存期的定义，包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
2、JAVA  SERVLET  API中forward() 与redirect()的区别？
答:前者仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址；后者则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前者可以满足需要时，尽量使用forward()方法，并且，这样也有助于隐藏实际的链接。在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用sendRedirect()方法。
3、Servlet的基本架构
public class ServletName extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException  {
      }
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws
      ServletException, IOException  {
      }
}
]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/340/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSP基础知识</title>
		<link>http://www.chentaoqian.com/archives/338</link>
		<comments>http://www.chentaoqian.com/archives/338#comments</comments>
		<pubDate>Fri, 19 Jun 2009 12:24:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[基础]]></category>
		<category><![CDATA[知识]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=338</guid>
		<description><![CDATA[1、jsp有哪些内置对象?作用分别是什么?
答:JSP共有以下9种基本内置组件（可与ASP的6种内部组件相对应）：
　request 用户端请求，此请求会包含来自GET/POST请求的参数
   response 网页传回用户端的回应
   pageContext 网页的属性是在这里管理
   session 与请求有关的会话期
   application servlet 正在执行的内容
   out 用来传送回应的输出
   config servlet的构架部件
   page JSP网页本身
   exception 针对错误网页，未捕捉的例外 
2、jsp有哪些动作?作用分别是什么?
答:JSP共有以下6种基本动作
   jsp:include：在页面被请求的时候引入一个文件。
   jsp:useBean：寻找或者实例化一个JavaBean。
   jsp:setProperty：设置JavaBean的属性。
   jsp:getProperty：输出某个JavaBean的属性。
   jsp:forward：把请求转到一个新的页面。
   jsp:plugin：根据浏览器类型为Java插件生成OBJECT或EMBED标记
3、JSP中动态INCLUDE与静态INCLUDE的区别？
答：动态INCLUDE用jsp:include动作实现
   &#60;jsp:include page=&#8221;included.jsp&#8221; flush=&#8221;true&#8221; /&#62;它总是会检查所含文件中的变化，适合用于包含动态页面，并且可以带参数
   静态INCLUDE用include伪码实现,定不会检查所含文件的变化，适用于包含静态页面
   &#60;%@ include file=&#8221;included.htm&#8221; %&#62;
4、两种跳转方式分别是什么?有什么区别?
答：有两种，分别为：
  &#60;jsp:include page=&#8221;included.jsp&#8221; flush=&#8221;true&#8221;&#62;
  &#60;jsp:forward page= &#8220;nextpage.jsp&#8221;/&#62;
  前者页面不会转向include所指的页面，只是显示该页的结果，主页面还是原来的页面。执行完后还会回来，相当于函数调用。并且可以带参数.后者完全转向新页面，不会再回来。相当于go to 语句。
]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/338/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(转)利用Java生成静态HMTL页面</title>
		<link>http://www.chentaoqian.com/archives/175</link>
		<comments>http://www.chentaoqian.com/archives/175#comments</comments>
		<pubDate>Sat, 06 Jun 2009 10:07:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[静态页面]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=175</guid>
		<description><![CDATA[这篇文章包含了目前常见的JSP生成静态页面的几种方法。总结的清晰易懂。
生成静态页面技术解决方案之一
转载者前言：这是一个全面的jsp动态页面静态化方案，本站的帖子静态化方案将借鉴这篇帖子中方法。向http://www.agilejava.org的single的共享精神致敬。
转帖正文： 
       相信很多人都希望自己的页面越快越好，最好是能静态的，提高客户访问速度。也便于搜索引擎搜索。所以，就希望我们的动态读取数据库的页面，尽可能的生成静态页面。一下系列文章，介绍一下个人的解决方案。
      本系列将介绍个人的一种方法，在不改变原来jsp文件的基础上，只需要加入少量的代码，就让你的新闻发布系统，很容易就完全变成静态的页面。
            本文假设你是用java开发的web动态页面。
           第一步，加入servlet.代码如下。
      public class ToHtml extends HttpServlet {
       public void service(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
        String url = &#8220;&#8221;;
        String name = &#8220;&#8221;;
        ServletContext sc = getServletContext();
        String file_name = request.getParameter(&#8220;file_name&#8221;);// 你要访问的jsp文件名,如index，不包括扩展名
        // 则你访问这个servlet时加参数.如http://localhost/test/toHtml?file_name=index
        url = &#8220;/&#8221; + file_name + &#8220;.jsf&#8221;;// 你要生成的页面的文件名。我的扩展名为jsf .
        name = ConfConstants.CONTEXT_PATH+&#8221;\\&#8221;+ file_name + &#8220;.htm&#8221;;// [...]]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jsp生成静态页面乱码解决法</title>
		<link>http://www.chentaoqian.com/archives/171</link>
		<comments>http://www.chentaoqian.com/archives/171#comments</comments>
		<pubDate>Sat, 06 Jun 2009 09:56:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[乱码]]></category>
		<category><![CDATA[静态页面]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=171</guid>
		<description><![CDATA[JSP乱码问题是很让人头疼的事情，在把JSP生成静态页面的时候也容易发生，这时就要对request和response进行编码设置了。
将方法中的request和response的编码都设置，而且一定要在输出之前设置，比如：
    request.setCharacterEncoding(&#8220;utf-8&#8243;);
    response.setContentType(&#8220;text/html; charset=utf-8&#8243;);
    PrintWriter out=response.getWriter();
    out.print(&#8220;&#60;p align=center&#62;&#60;font size=3 color=red&#62;首页已经成功生成！Andrew&#60;/font&#62;&#60;/p&#62;&#8221;);
就能在页面中正确显示中文了！
]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/171/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>JSP生成静态页面-方法二</title>
		<link>http://www.chentaoqian.com/archives/169</link>
		<comments>http://www.chentaoqian.com/archives/169#comments</comments>
		<pubDate>Sat, 06 Jun 2009 09:51:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[静态页面]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=169</guid>
		<description><![CDATA[又一个JSP生成静态页面的方法，这方法原理是：使用Servlet获得JSP页面的源码，再将源码转成静态文件。
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class toHtml extends HttpServlet
{
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    String url=&#8221;";
    String name=&#8221;";
   
        ServletContext sc = getServletContext();
       
        String file_name=request.getParameter(&#8220;file_name&#8221;);//你要访问的jsp文件,如index.html
  //则你访问这个servlet时加参数.如http://localhost/toHtml?file_name=index
        url = &#8220;/&#8221;+file_name+&#8221;.jsp&#8221;;//这是你要生成HTML的jsp文件,如
                                   //http://localhost/index.html的执行结果.
        name=&#8221;/home/resin/resin-2.1.6/doc/&#8221;+file_name+&#8221;.htm&#8221;;//这是生成的html文件名,如index.htm.
               
        RequestDispatcher rd = sc.getRequestDispatcher(url);
       
        final ByteArrayOutputStream os = new ByteArrayOutputStream();
       
        final ServletOutputStream [...]]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/169/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jsp生成静态页面方法一</title>
		<link>http://www.chentaoqian.com/archives/167</link>
		<comments>http://www.chentaoqian.com/archives/167#comments</comments>
		<pubDate>Sat, 06 Jun 2009 09:50:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[静态页面]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=167</guid>
		<description><![CDATA[１、在生成页面后更新数据库中链接地址，或做一个标记，使得主页上各篇文章的链接地址指向静态页面。
２、在第一次访问文章时创建静态页面，或在服务器定时查询新增纪录并生成静态页面
３、访问主业时也可生成静态网页，通过查询数据库中一个记录，获取最新文章的录入时间，比较并更新主业的静态网页
为了减轻服务器压力，将原来的文章管理系统由JSP文件的从数据库中取数据显示改为由jsp生成静态html文件后直接访问html文件。下面是一个简单的示例
1.buildhtml.jsp
&#60;%@ page contentType=&#8221;text/html; charset=gb2312&#8243; import=&#8221;java.util.*,java.io.*&#8221;%&#62;
&#60;%
try{
 String title=&#8221;This is Title&#8221;;
 String content=&#8221;This is Content Area&#8221;;
 String editer=&#8221;LaoMao&#8221;;
 String filePath = &#8220;&#8221;;
 filePath = request.getRealPath(&#8220;/&#8221;)+&#8221;test/template.htm&#8221;;
 //out.print(filePath+&#8221;&#60;br&#62;&#8221;);
 String templateContent=&#8221;";
 FileInputStream fileinputstream = new FileInputStream(filePath);//读取模块文件
 int lenght = fileinputstream.available();
 byte bytes[] = new byte[lenght];
 fileinputstream.read(bytes);
 fileinputstream.close();
 templateContent = new String(bytes);
 //out.print(templateContent);
 templateContent=templateContent.replaceAll(&#8220;###title###&#8221;,title);
 templateContent=templateContent.replaceAll(&#8220;###content###&#8221;,content);
 templateContent=templateContent.replaceAll(&#8220;###author###&#8221;,editer);//替换掉模块中相应的地方
 //out.print(templateContent);
 // 根据时间得文件名
 Calendar calendar = Calendar.getInstance();
 String fileame = String.valueOf(calendar.getTimeInMillis()) +&#8221;.html&#8221;;
 fileame = request.getRealPath(&#8220;/&#8221;)+fileame;//生成的html文件保存路径
 FileOutputStream fileoutputstream = new FileOutputStream(fileame);//建立文件输出流
 byte tag_bytes[] = templateContent.getBytes();
 fileoutputstream.write(tag_bytes);
 fileoutputstream.close();
}
catch(Exception e){
 out.print(e.toString());
}
%&#62;
2. template.htm
&#60;html&#62;
&#60;head&#62;
&#60;title&#62;###title###&#60;/title&#62;
&#60;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=gb2312&#8243;&#62;
&#60;LINK [...]]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/167/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jsp彩色验证码及getOutputStream()异常解决方法</title>
		<link>http://www.chentaoqian.com/archives/164</link>
		<comments>http://www.chentaoqian.com/archives/164#comments</comments>
		<pubDate>Sat, 06 Jun 2009 09:33:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JSP]]></category>
		<category><![CDATA[验证码]]></category>

		<guid isPermaLink="false">http://www.chentaoqian.com/?p=164</guid>
		<description><![CDATA[jsp产生彩色验证码的代码，能正确产生验证码，但会产生getOutputStream()异常的代码，如下：
&#60;%@ page language=&#8221;java&#8221; contentType=&#8221;text/html; charset=GBK&#8221;
 pageEncoding=&#8221;GBK&#8221;%&#62;
&#60;%@ page import=&#8221;java.awt.Color,java.util.Random,java.awt.image.BufferedImage,
 java.awt.Graphics,java.awt.Font,javax.imageio.ImageIO,javax.servlet.ServletOutputStream&#8221; %&#62;
&#60;!DOCTYPE html PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221; &#8220;http://www.w3.org/TR/html4/loose.dtd&#8220;&#62;
&#60;html&#62;
 &#60;head&#62;
  &#60;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=GBK&#8221;&#62;
  &#60;title&#62;Insert title here&#60;/title&#62;
 &#60;/head&#62;
 &#60;body&#62;
  &#60;%!Color getRandColor(int fc, int bc) { //给定范围获得随机颜色
  Random random = new Random();
  if (fc &#62; 255)
   fc = 255;
  if (bc &#62; 255)
   bc = 255;
  int r = fc + random.nextInt(bc &#8211; fc);
  int g = fc + random.nextInt(bc &#8211; fc);
  int b [...]]]></description>
		<wfw:commentRss>http://www.chentaoqian.com/archives/164/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

