??xml version="1.0" encoding="utf-8" standalone="yes"?> 解决办法Q?br />办法一Q?br />目标Q实现多标签中登录多个用戯互不媄响?br />思\Q将用户d信息Q比如用L受登录ip{封装到一个对象,然后以一个唯一|比如d旉Qؓkey攑օHashMapQ再HashMap攑օsession?br />首先action中attribute的名字不能重复?/p>
当登录成功,q入main.jsp面Ӟ首先ҎsessionId获得checkValq存入一个页面的变量。下面就开始判断了Q每ơ标{N获得焦点Ӟwindow.onfocusQ就页面中的变量与后台ҎsessionId从checkMap中得到的checkValq行比较Q如果不惛_Q说明该面已经失效Q提CZ息ƈ关闭该页面?br />但是仍有一个问题,window.onfocus不知道ؓ什么在面获得焦点时会执行很多? W一步:~辑好word模版Q然后另存ؓ*.htmQ比如:liukun.htm?br />技巧:在需要填写数据的地方最好预填入一些易识别的数据,q样方便后面填写jsp代码?br />W二步:把htm后缀改ؓjspQ比如:liukun.jsp?br />W三步:djsp的头Q比如: 只需要在jsp的最上面加上一句话 可以将|页的内容导ZؓExcel?br />目前l出的例子ؓ了方便v见,是使用了纯_的静态页面,一个table其中有一行是标题Q一行是内容Q但是实际用中不可能这么简单,都是保持静态的内容Q如果需要保存的内容是从数据库中取出Q则只需要@环遍历取出的内容Q添加行p了,假如从数据库中取出的数据存入UserList中,可以使用struts标签q行遍历如下Q?/p>
下面是完整的例子Q新Z个index.jspQ里面只需要一个超链接<a href = 'DownLoadExcel.jsp'>导出Excel</a> Counter.jsp文g 注意Q在|站根目录下建立一个count.txt文gQ初始数字ؓ0 ?/p>
修改之后重新启动服务器,pd到该文g了?
<%
SmartUpload mySmartUpload =new SmartUpload();
long file_size_max=4000000;
String fileName2="",ext="",testvar="";
String url="uploadfile/images/"; //应保证在根目录中有此目录的存?br />//初始?/span>
mySmartUpload.initialize(pageContext);
//只允怸载此cL?/span>
try {
mySmartUpload.setAllowedFilesList("jpg,gif");
//上蝲文g
mySmartUpload.upload();
} catch (Exception e){
%>
<SCRIPT language=javascript>
alert("只允怸?jpg?gifcd囄文g");
window.location='upfile.jsp';
</script>
<%
}
try{
com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(0);
if (myFile.isMissing()){%>
<SCRIPT language=javascript>
alert("请先选择要上传的文g");
window.location='upfile.jsp';
</script>
<%}
else{
//String myFileName=myFile.getFileName(); //取得上蝲的文件的文g?/span>
ext= myFile.getFileExt(); //取得后缀?/span>
int file_size=myFile.getSize(); //取得文g的大?nbsp;
String saveurl="";
if(file_size<file_size_max){
//更改文g名,取得当前上传旉的毫U数?/span>
Calendar calendar = Calendar.getInstance();
String filename = String.valueOf(calendar.getTimeInMillis());
saveurl=request.getRealPath("/")+url;
saveurl+=filename+"."+ext; //保存路径
myFile.saveAs(saveurl,mySmartUpload.SAVE_PHYSICAL);
//out.print(filename);
//-----------------------上传完成Q开始生成羃略图-------------------------
java.io.File file = new java.io.File(saveurl); //d刚才上传的文?/span>
String newurl=request.getRealPath("/")+url+filename+"_min."+ext; //新的~略图保存地址
Image src = javax.imageio.ImageIO.read(file); //构造Image对象
float tagsize=200;
int old_w=src.getWidth(null); //得到源图?/span>
int old_h=src.getHeight(null);
int new_w=0;
int new_h=0; //得到源图?/span>
int tempsize;
float tempdouble;
if(old_w>old_h){
tempdouble=old_w/tagsize;
}else{
tempdouble=old_h/tagsize;
}
new_w=Math.round(old_w/tempdouble);
new_h=Math.round(old_h/tempdouble);//计算新图长宽
BufferedImage tag = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(src,0,0,new_w,new_h,null); //l制~小后的?/span>
FileOutputStream newimage=new FileOutputStream(newurl); //输出到文件流
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
encoder.encode(tag); //qJPEG~码
newimage.close();
}
else{
out.print("<SCRIPT language='javascript'>");
out.print("alert('上传文g大小不能过"+(file_size_max/1000)+"K');");
out.print("window.location='upfile.jsp;'");
out.print("</SCRIPT>");
}
}
}catch (Exception e){
e.toString();
}
%> 2、upload.htm
<head>
<title>请选择上传的图?/span></title>
</head>
<body>
<table border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="45" align="center" valign="middle"><form action="uploadimage.jsp" method="post" enctype="multipart/form-data" name="form1">
请选择上传的图?br /> <input type="file" name="file">
<input type="submit" name="Submit" value="上传">
</form></td>
</tr>
</table>
</body>
</html>
]]>
]]>
]]>
Random random = new Random();
StringBuffer sid = new StringBuffer();
sid = sid.append(System.currentTimeMillis()); // 取系l时?br />// 加上10?-9随机数确保sid不重?/span>
for (int i = 0; i < 10; i++) {
sid = sid.append(random.nextInt(10));
}
// 把所有需要放qsession的attribute放进一个Mapbar<String, Object>
// 一是便于el中取倹{二是便于统一理
Map sessionMap = new HashMap();
sessionMap.put("session_urname", urname);
session.setAttribute(sid.toString(), sessionMap);
String rd = "detail.jsp?sid=" + sid.toString();
request.getRequestDispatcher(rd).forward(request, response);
session.setAttribute("pwd" + sid.toString(), urpassword);
目标Q退而求其次Q打开新标{Nq行dQ再切换到旧标签|Q提C页面已失效。如果打开新标{NQ地址栏中直接输入主页面地址Q则以同一用户q行d?个标{N的内定w有效?br />思\Q服务器在创建session时会为每个session分配一个唯一的sessionIdQ因此我们可以根据它来想办法。首先定义一个public static cd的HashMap:checkMap。假设我的登录页面ؓlogin.jspQ主面为main.jsp。后台执行登录检查的Ҏ为checkLogin()。当执行d查的时候:
String sessionId = session.getId;
//标示面是否有效的?/span>
int checkVal;
if(checkMap.containsKey(sessionId)) {
checkVal = (Integer)checkMap.get(sessionId) + 1;
} else {
checkVal = 1;
}
checkMap.put(sessionId,checkVal);
]]>
<%@page contentType="application/msword;charset=GBK"%>
如果有importQ也要在q里导入?br />技巧:application/msword;q个参数很重要,有了q个参数Q调用这个页面时Q就会把面内容存ؓword。当Ӟ本地必须安装office?br />
导出Excel文
<%
response.reset();
response.setContentType("application/vnd.ms-excel;charset=GBK");
%>
<tr>
<td class=formtitle colspan="4"><CENTER> 清单</CENTER> </td>
</tr>
<tr>
<td class=formtitle align="center" nowrap style="width:13%">姓名</td>
<td class=formtitle align="center" nowrap style="width:13%">q龄</td>
<td class=formtitle align="center" nowrap style="width:13%">性别</td>
<td class=formtitle align="center" nowrap style="width:13%">住址</td>
</tr>
<logic:present name="UserList">
<logic:iterate id="user" name="UserList">
<tr>
<td align="center" nowrap style="width:13%">
<bean:write name = "user",property="name"/>
</td>
<td align="center" nowrap style="width:13%">
<bean:write name = "user",property="age"/>
</td>
<td align="center" nowrap style="width:13%">
<bean:write name = "user",property="sex"/>
</td>
<td align="center" nowrap style="width:13%">
<bean:write name = "user",property="address"/>
</td>
</tr>
</logic:iterate>
</logic:present>
</table>
再新Z个DownLoadExcel.jspQ内容如下:
response.reset();
response.setContentType("application/vnd.ms-excel;charset=GBK");
%>
<html>
<head>
<title>刷卡消费情况</title>
<style type="text/css">
table.common1 {
width: 100%;
font-size: 9pt;
style-align: center;
background-color: #ffffff;
}
td.formtitle {
font-size: 9pt;
background:#a480b2;
color:#ffffff;
height:30px;
text-align: center;
}
</style>
</head>
<body>
<form name="fm" method="post" >
<table class="common1" cellpadding="5" cellspacing="1" align="center" >
<tr>
<td class=formtitle colspan="4"><CENTER> 清单</CENTER> </td>
</tr>
<tr>
<td class=formtitle align="center" nowrap style="width:13%">姓名</td>
<td class=formtitle align="center" nowrap style="width:13%">q龄</td>
<td class=formtitle align="center" nowrap style="width:13%">性别</td>
<td class=formtitle align="center" nowrap style="width:13%">家庭住址</td>
</tr>
<tr>
<td align="center" nowrap style="width:13%">张三</td>
<td align="center" nowrap style="width:13%">25</td>
<td align="center" nowrap style="width:13%">?/span></td>
<td align="center" nowrap style="width:13%">北京中关?/span></td>
</tr>
</table>
</form>
</body>
</html>
]]>
import java.io.*;
public class Counter extends Object {
private String currentRecord = null;// 保存文本的变?/span>
private BufferedReader file; // BufferedReader对象Q用于读取文件数?/span>
private String path;// 文g完整路径?/span>
public Counter() {
}
// ReadFileҎ用来d文gfilePath中的数据Qƈq回q个数据
public String ReadFile(String filePath) throws FileNotFoundException {
path = filePath;
// 创徏新的BufferedReader对象
file = new BufferedReader(new FileReader(path));
String returnStr = null;
try {
// d一行数据ƈ保存到currentRecord变量?/span>
currentRecord = file.readLine();
} catch (IOException e) {// 错误处理
System.out.println("d数据错误.");
}
if (currentRecord == null)
// 如果文g为空
returnStr = "没有M记录";
else {// 文g不ؓI?/span>
returnStr = currentRecord;
}
// q回d文g的数?/span>
return returnStr;
}
// ReadFileҎ用来数据counter+1后写入到文本文gfilePath?br /> // 以实现计数增长的功能
public void WriteFile(String filePath, String counter)
throws FileNotFoundException {
path = filePath;
// counter转换为intcdq加一
int Writestr = Integer.parseInt(counter) + 1;
try {
// 创徏PrintWriter对象Q用于写入数据到文g?/span>
PrintWriter pw = new PrintWriter(new FileOutputStream(filePath));
// 用文本格式打印整数Writestr
pw.println(Writestr);
// 清除PrintWriter对象
pw.close();
} catch (IOException e) {
//错误处理
System.out.println("写入文g错误" + e.getMessage());
}
}
}
<%
//调用counter对象的ReadFileҎ来读取文件count.txt中的计数
String url = request.getRealPath("count.txt");
String count = counter.ReadFile(url);
//调用counter对象的ReadFileҎ来将计数器加一后写入到文gcount.txt?/span>
if (session.isNew())
counter.WriteFile(url, count);
%>
您是W?/span><font color="red"> <%=count%> </font>位访问?br />
]]>
解决Ҏ如下Q?br />Q?Q如果采用jdbc-odbc驱动Q那么就必须按照查询序来一ơ读取(不论有没有image或textcdQ?br />Q?Q如果采用微软提供的ms sql server jdbc driverQ如果查询语句中Q不存在image或textcd字段Q那么可以按照无序获取?br />Q?Q如果采用微软提供的ms sql server jdbc driverQ如果查询语句中Q存在image或textcd字段Q那么就必须按照序dQ否则就会报告Driver]ResultSet can not re-read row data for column之类的错误?br />Q?Q如果想不查询语句中有没有image或textcd字段Q都可以不按照顺序获取,或重复获取。那么就必须更换驱动Q改用第三方的?
SQL Server 2000 :Underlying input stream returned zero bytes
解决办法Q?br />1、将Textcd的字D增加默认?"
2、在JavaBean中增加处理,保在Textcd的字D中不会保存Null?
如何能够讉KWEB-INF文g夹下的页?br />在WEB-INF下会有一个web.xml文gQ此文g是属于整个web站点的配|文Ӟ只需要在此配|就可以了?br />WEB-INF里面需要访问的文g为login.jspQ打开web.xml ?lt;/web-app>上面加入一下代码:
<servlet-name>xyy</servlet-name> -->此行的xyy是用于标识的和下面的一?br /> <jsp-file>/WEB-INF/login.jsp</jsp-file> -->需要访问的面的\?br /></servlet>
<servlet-mapping>
<servlet-name>xyy</servlet-name> -->此行的xyy是用于标识的和上面的一?br /> <url-pattern>/login</url-pattern> ---->此行?login时是需要访问的面的映名U?br /></servlet-mapping>
d数据库完整日期时?/strong>
ClientAbortException 异常解决办法
ClientAbortException Caused by: java.net.SocketException: Connection reset by peer: socket write error 的原因是׃处理httpq接Ӟ正在输出内容Ӟ用户关闭了IEQ会出现一?ClientAbortException"Q属于I/O处理中出现的一个异常,应用服务器应该会捕捉?
Connection reset by peer的原因:
l常出现的Connection reset by peer: 原因可能是多斚w的,不过更常见的原因是:
①Q服务器的ƈ发连接数过了其承蝲量,服务器会其中一些连接Down掉;
②Q客户关掉了览器,而服务器q在l客L发送数据;
③Q浏览器端按了Stop
很多人都说是客户端造成的,没有办法控制Q而且后台会记录这个异常,日志也会疯狂爆满Q时间长?肯定会DOWN掉的?br />如果是原?#9312;Q而且该异常的日志U别为warnQ不影响正常q行Q只要提高服务器的日志别即可?
Character decoding failed. Parameter skipped.java.io.CharConversionException: isHexDigit.
escapse在中文编码时会出现的问题?br />解决ҎQ?br />客户端传?br />
url=encodeURI(url);
name = java.net.URLDecoder.decode(name,"UTF-8");
]]>
pageEncoding="UTF-8"%>?lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8">~码为UTF-8Q?/font>
二、post方式
配置字符qo?/p>
package com.util.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* 采用Filterl一讄处理字符?nbsp;
* @author songfeng
* @version 1.0
* Apr 1, 2010
*/
public class CharsetEncodingFilter implements Filter {
private String encoding = "UTF-8";
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding(this.encoding);
filterChain.doFilter(servletRequest, servletResponse);
}
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
}
}
配置web.xml
三、getҎ
1、配|tomcat中server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" disableUploadTimeout="true" URIEncoding="UTF-8"/>
2、在要传递参数的时候进行{码(如不转码奇数中文字符最后一个字Wؕ码)
Q?QJSP传值方式:
跌{:
<a href=info.jsp?info="<%= java.net.URLEncoder.encode("中文汉字","GBK") %>">跌{</a>
接收?br /><%
String info_str = new String(request.getParameter("info"),"ISO8859-1");
out.print(info_str); //输出接收?br />%>
Q?QJS传值方式:
先用encodeURI()q行~码
var p = "你好吗?";
var url = "aaa.jsp?param=" + encodeURI(p);
然后在服务器端要解码
<%
String param = request.getParameter("p");
param = new String(param.getBytes("ISO-8859-1"),"UTF-8");
%>
四、ajaxq
在要传递中文参数的js中{码:encodeURIComponent(“×××”)
ҎQ?br />
1. void clear() ;
清除输出~冲区的内容Q但是不输出到客L?/font>
2. void clearBuffer() ;
清除输出~冲区的内容Qƈ输出到客L?/font>
3. void close() ;
关闭输出,清除所有内宏V?/font>
4. void flush() ;
输出~冲区里面的数据?/font>
5. int getBufferSize() ;
获取以kb为单位的目前~冲区大?/font>
6. int getRemaining() ;
获取以kb为单位的~冲Z未被占用的空间大?/font>
7. boolean isAutoFlush() ;
是否自动h~冲区?/font>
8. void newLine() ;
输出一个换行字W?/font>
9. void print( boolean b ) ;
void print( char c ) ;
void print( char[] s ) ;
void print( double d ) ;
void print( float f ) ;
void print( int i ) ;
void print( long l ) ;
void print( Object obj ) ;
void print( String s ) ;
指定类型的数据输出到Http,不换行?/font>
10. void println( boolean b ) ;
void println( char c ) ;
void println( char[] s ) ;
void println( double d ) ;
void println( float f ) ;
void println( int i ) ;
void println( long l ) ;
void println( Object obj ) ;
void println( String s ) ;
指定类型的数据输出到Http,q输Z个换行符?br />
11. Appendable append( char c ) ;
Appendable append( CharSequence cxq, int start, int end ) ;
Appendable append( CharSequence cxq ) ;
一个字W或者实CCharSequence接口的对象添加到输出的后面?/font>
成员Q?br /> int DEFAULT_BUFFER = 0 - ~省~冲区大?br /> int NO_BUFFER = -1 - writer是否处于~冲输出状?br /> int UNBOUNDED_BUFFER = -2 - 是否限制~冲区大?/font>
?request - javax.servlet.http.HttpServletRequest
request对象包含所有请求的信息Q如h的来源、标头、cookies和请求相关的参数值等?/font>
ҎQ?br />
1. Object getAttribute( String name ) ;
q回由name指定的属性|该属性不存在时返回null?/font>
2. Enumeration getAttributeNames() ;
q回request对象的所有属性名U的集合?/font>
3. String getAuthType() ;
q回用来保护servlet的认证方法的名称Q未受保护时q回null?/font>
4. String getCharacterEncoding() ;
q回h中的字符~码ҎQ可以在response对象中设|?/font>
5. int getContentLength() ;
q回h的BODY的长度,不能定长度时返?1。可以在response中设|?/font>
6. String getContentType() ;
q回在response中定义的内容cd?/font>
7. String getContentPath() ;
q回h的\径?/font>
8. Cookie[] getCookies() ;
q回客户端所有的Cookie的数l?/font>
9. Enumeration getHeaderNames() ;
q回所有HTTP头的名称的集合?/font>
10. Enumeration getHeaders( String name ) ;
q回指定HTTP头的所有值的集合?/font>
11. String getHeader( String name ) ;
q回指定名称的HTTP头的信息?/font>
12. long getDateHeader( String name ) ;
q回指定名称的Datacd的HTTP头的信息?/font>
13. int getIntHeader( String name ) ;
q回指定名称的Intcd的HTTP头的信息?/font>
14. ServletInputStream getInputStream() ;
q回h的输入流?/font>
15. Locale getLocale() ;
q回当前늚Locale对象Q可以在response中设定?/font>
16. Enumeration getLocales() ;
q回h中所有的Locale对象的集合?/font>
17. String getLocalName() ;
获取响应h的服务器端主机名?/font>
18. String getLocalAddr() ;
获取响应h的服务器端地址?/font>
19. int getLocalPort() ;
获取响应h的服务器端端?/font>
20. String getMethod() ;
获取客户端向服务器端发送请求的Ҏ(GET、POST)?/font>
21. String getParameter( String name ) ;
获取客户端发送给服务器端的参数倹{?/font>
22. Map getParameterMap() ;
该方法返回包含请求中所有参数的一个Map对象?/font>
23. Enumeration getParameterNames() ;
q回h中所有参数的集合?/font>
24. String[] getParameterValues( String name ) ;
获得h中指定参数的所有倹{?/font>
25. String getQueryString() ;
q回getҎ传递的参数字符Ԍ该方法不分解出单独的参数?/font>
26. String getPathInfo() ;
取出h中处于ServletPath和QueryString之间的额外信息?/font>
27. String getPathTranslated() ;
q回用getPathInfo()Ҏ取得的\径信息的实际路径?/font>
28. String getProtocol() ;
q回h使用的协议。可以是HTTP1.1或者HTTP1.0?/font>
29. BufferedReader getReader() ;
q回h的输入流对应的Reader对象Q该Ҏ和getInputStream()Ҏ在一个页面中只能调用一个?/font>
30. String getRemoteAddr() ;
获取发出h的客LIP地址?/font>
31. String getRemoteHost() ;
获取发出h的客LL?/font>
32. String getRemoteUser() ;
q回l过客户端验证的用户名,未经验证q回null?/font>
33. int getRemotePort() ;
q回发出h的客LL端口?/font>
34. String getRealPath( String path ) ;
q回l定虚拟路径的物理\径?/font>
35. RequestDispatcher getRequestDispatcher( String path ) ;
按给定的路径生成资源转向处理适配器对象?/font>
36. String getRequestedSessionId() ;
q回h的session的标识?/font>
37. String RequestURI() ;
q回发出h的客L地址Q但是不包括h的参数字W串?/font>
38. StringBuffer getRequestURI() ;
q回响应h的服务器端地址
39. String getScheme() ;
获取协议名称Q缺省gؓHTTP协议?/font>
40. String getServerName() ;
q回响应h的服务器名称?/font>
41. String getServletPath() ;
获取客户端所h的脚本文件的文g路径?/font>
42. int getServerPort() ;
获取响应h的服务器端主机端口号?/font>
43. void removeAttribute( String name ) ;
在属性列表中删除指定名称的属性?/font>
44. void setAttribute( String name, Object value ) ;
在属性列表中d/删除指定的属性?/font>
45. void setCharacterEncoding( String name ) ;
讄h的字W编码格式?/font>
46. HttpSession getSession() ;
HttpSession getSession( boolean create ) ;
获取sessionQ如果create为trueQ在无session的情况下创徏一个?br />
47. boolean isRequestedSessionIdFromCookie() ;
查请求的会话ID是否为通过Cookie传入?/font>
48. boolean isRequestedSessionIdFromURL() ;
查请求的会话ID是否为通过URL传入?/font>
49. boolean isRequestedSessionIdValid() ;
查请求的会话ID是否仍然有效?/font>
50. boolean isSecure() ;
查请求是否用安全链接,如果HTTPS{?/font>
51. boolean isUserInRole( String role ) ;
查已l通过验证的用h否在是role所指定的角艌Ӏ?/font>
52. Principal getUserPrincipal() ;
q回包含用户登陆名的一个java.security.Principal对象?/font>
成员Q?br />
String BASIC_AUTH = "BASIC" -
String CLIENT_CERT_AUTH = "CLIENT_CERT" -
String DIGEST_AUTH = "DIGEST" -
String FORM_AUTH = "FORM" -
?response - javax.servlet.http.HttpServletResponse
response对象主要JSP容器处理后的l果传回到客L?/font>
ҎQ?br />
1. void addCookie( Cookie cookie ) ;
d一个Cookie对象Q保存客L信息?/font>
2. void addDateHeader( String name, long value ) ;
d一个日期类型的HTTP头信息,覆盖同名的HTTP头信息?/font>
3. void addHeader( String name, String value ) ;
d一个HTTP_覆盖同名的旧HTTP头?/font>
4. void addIntHeader( String name, int value ) ;
d一个整型的HTTP_覆盖同名的旧HTTP头?/font>
5. boolean containsHeader( String name ) ;
判断指定的HTTP头是否存在?/font>
6. String encodeRedirectURL( String url ) ;
对sendRedirect()Ҏ使用的URLq行~码?/font>
7. String encodeURL( String url ) ;
URL予以~码Q回传包含session ID的URL?br />
8. void flushBuffer() ;
强制把当前缓冲区的内容发送到客户端?/font>
9. int getBufferSize() ;
取得以kb为单位的~冲区大?/font>
10. String getCharacterEncoding() ;
获取响应的字W编码格式?/font>
11. String getContentType() ;
获取响应的类型?/font>
12. Locale getLocale() ;
获取响应的Locale对象?/font>
13. ServletOutputStream getOutputStream() ;
q回客户端的输出对象?/font>
14. PrintWriter getWriter() ;
获取输出对应的writer对象?/font>
15. boolean isCommitted() ;
判断服务器端是否已经数据输出到客户端?/font>
16. void reset() ;
清空buffer中的所有内宏V?/font>
17. void resetBuffer() ;
情况buffer中所有的内容Q但是保留HTTP头和状态信息?/font>
18. void sendError( int xc, String msg ) ;
void sendError( int xc ) ;
发送错误,包括状态码和错误信息?/font>
19. void sendRedirect( String locationg ) ;
把响应发送到另外一个位|进行处理?/font>
20. void setBufferSize( int size ) ;
讄以kb为单位的~冲区大?/font>
21. void setCharacterEncoding( String charset ) ;
讄响应使用的字W编码格式?/font>
22. void setContentLength( int length ) ;
讄响应的BODY长度?/font>
23. void setContentType( String type ) ;
讄响应的类型?/font>
24. void setDateHeader( String name, long value ) ;
讄指定名称的Datacd的HTTP头的倹{?/font>
25. void setHeader( String name, String value ) ;
讄指定名称的HTTP头的倹{?/font>
26. void setIntHeader( String name, int value ) ;
讄指定名称的intcd的HTTP头的倹{?/font>
27. void setStatus( int xc ) ;
讄响应状态码Q新g覆盖当前倹{?/font>
成员(HTTP状态码)Q?br />
int SC_CONTINUE = 100 int SC_SWITCHING_PROTOCOLS = 101
int SC_OK = 200 int SC_NON_AUTHORITATIVE_INFORMATION = 203
int SC_ACCEPTED = 202 int SC_CREATED = 201
int SC_NO_CONTENT = 204 int SC_RESET_CONTENT = 205
int SC_PARTIAL_CONTENT = 206 int SC_MULTIPLE_CHOICES = 300
int SC_MOVED_PERMANENTLY = 301 int SC_MOVED_TEMPORARILY = 302
int SC_FOUND = 302 int SC_SEE_OTHER = 303
int SC_NOT_MODIFIED = 304 int SC_USE_PROXY = 305
int SC_TEMPORARY_REDIRECT = 307 int SC_BAD_REQUEST = 400
int SC_UNAUTHORIZED = 401 int SC_PAYMENT_REQUIRED = 402
int SC_FORBIDDEN = 403 int SC_NOT_FOUND = 404
int SC_METHOD_NOT_ALLOWED = 405 int SC_NOT_ACCEPTABLE = 406
int SC_PROXY_AUTHENTICATION_REQUIRED = 407 int SC_REQUEST_TIMEOUT = 408
int SC_CONFLICT = 409 int SC_GONE = 410
int SC_LENGTH_REQUIRED = 411 int SC_PRECONDITION_FAILED = 412
int SC_REQUEST_ENTITY_TOO_LARGE = 413 int SC_REQUEST_URI_TOO_LONG = 414
int SC_UNSUPPORTED_MEDIA_TYPE = 415 int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416
int SC_EXPECTATION_FAILED = 417 int SC_INTERNAL_SERVER_ERROR = 500
int SC_NOT_IMPLEMENTED = 501 int SC_BAD_GATEWAY = 502
int SC_SERVICE_UNAVAILABLE = 503 int SC_GATEWAY_TIMEOUT = 504
int SC_HTTP_VERSION_NOT_SUPPORTED = 505
?session - javax.servlet.http.HttpSession
session对象表示目前个别用户的会话状态,用来识别每个用户?/font>
ҎQ?br />
1. Object getAttribute( String name ) ;
获取与指定名字相兌的session属性倹{?/font>
2. Enumeration getAttributeNames() ;
取得session内所有属性的集合?/font>
3. long getCreationTime() ;
q回session的创建时_最单位千分之一U?/font>
4. String getId() ;
取得session标识?/font>
5. long getLastAccessedTime() ;
q回与当前session相关的客L最后一ơ访问的旉Q由1970-01-01vQ单位毫U?/font>
6. int getMaxInactiveInterval( int interval ) ;
q回L_以秒为单位,表示session的有效时?session不活动时??1为永不过期?/font>
7. ServletContext getServletContext() ;
q回一个该JSP面对应的ServletContext对象实例?/font>
8. HttpSessionContext getSessionContext() ;
9. Object getValue( String name ) ;
取得指定名称的session变量|不推荐用?/font>
10. String[] getValueNames() ;
取得所有session变量的名U的集合Q不推荐使用?/font>
11. void invalidate() ;
销毁这个session对象?/font>
12. boolean isNew() ;
判断一个session是否由服务器产生Q但是客Lq没有用?/font>
13. void pubValue( String name, Object value ) ;
d一个session变量Q不推荐使用?/font>
14. void removeValue( String name ) ;
U除一个session变量的|不推荐用?/font>
15. void setAttribute( String name, String value ) ;
讄指定名称的session属性倹{?/font>
16. void setMaxInactiveInterval( int interval ) ;
讄session的有效期?/font>
17. void removeAttribute( String name ) ;
U除指定名称的session属性?/font>
?pageContext - javax.servlet.jsp.PageContext
pageContext对象存储本JSP面相关信息Q如属性、内建对象等?/font>
ҎQ?br />
1. void setAttribute( String name, Object value, int scope ) ;
void setAttribute( String name, Object value ) ;
在指定的׃n范围内设|属性?/font>
2. Object getAttribute( String name, int scope ) ;
Object getAttribute( String name ) ;
取得指定׃n范围内以name为名字的属性倹{?/font>
3. Object findAttribute( String name ) ;
按页面、请求、会话和应用E序׃n范围搜烦已命名的属性?/font>
4. void removeAttribute( String name, int scope ) ;
void removeAttribute( String name ) ;
U除指定名称和共享范围的属性?/font>
5. void forward( String url ) ;
页面导航到指定的URL?/font>
6. Enumeration getAttributeNamesScope( int scope ) ;
取得指定׃n范围内的所有属性名U的集合?/font>
7. int getAttributeScope( String name ) ;
取得指定属性的׃n范围?/font>
8. ErrorData getErrorDate() ;
取得面的errorData对象?/font>
9. Exception getException() ;
取得面的exception对象?/font>
10. ExpressionEvaluator getExpressionEvaluator() ;
取得面的expressionEvaluator对象?/font>
11. JspWriter getOut() ;
取得面的out对象?/font>
12. Object getPage() ;
取得面的page对象?/font>
13. ServletRequest getRequest() ;
取得面的request对象?/font>
14. ServletResponse getResponse() ;
取得面的response对象?/font>
15. ServletConfig getConfig() ;
取得面的config对象?/font>
16. ServletContext getServletContext() ;
取得面的servletContext对象?/font>
17. HttpSession getSession() ;
取得面的session对象?/font>
18. VariableResolver getVariableResolver() ;
取得面的variableResolver对象?/font>
19. void include( String url, boolean flush ) ;
void include( String url ) ;
包含其他的资源,q指定是否自动刷新?/font>
20. void release() ;
重置pageContext内部状态,释放所有内部引用?/font>
21. void initialize( Servlet servlet, ServletRequest request, ServletResponse response,
String errorPageURL, boolean needSession, int bufferSize, boolean autoFlush ) ;
初始化未l初始化的pageContext对象?/font>
22. BodyContext pushBody() ;
BodyContext pushBody( Writer writer ) ;
保存当前的out对象Qƈ更新pageContext中page范围内的out对象?/font>
23. JspWrite popBody() ;
取出由pushBody()Ҏ保存的out对象?/font>
24. void handlePageException( Exception e ) ;
void handlePageException( Thrwoable t ) ;
成员Q?br />
int PAGE_SCOPE = 1 - 面׃n范围
int REQUEST_SCOPE = 2 - h׃n范围
int SESSION_SCOPE = 3 - 会话׃n范围
int APPLICATION_SCOPE = 4 - 应用E序׃n范围
String PAGE = "javax.servlet.jsp.jspPage"
String PAGECONTEXT = "javax.servlet.jsp.jspPageContext"
String REQUEST = "javax.servlet.jsp.jspRequest"
String RESPONSE = "javax.servlet.jsp.jspResponse"
String CONFIG = "javax.servlet.jsp.jspConfig"
String SESSION = "javax.servlet.jsp.jspSession"
String OUT = "javax.servlet.jsp.jspOut"
String APPLICATION = "javax.servlet.jsp.jspApplication"
String EXCEPTION = "javax.servlet.jsp.jspException"
?application - javax.servlet.ServletContext
application主要功用在于取得或更改Servlet的设定?/font>
ҎQ?br />
1. Object getAttribute( String name ) ;
q回由name指定的application属性?/font>
2. Enumeration getAttributes() ;
q回所有的application属性?/font>
3. ServletContext getContext( String uripath ) ;
取得当前应用的ServletContext对象?/font>
4. String getInitParameter( String name ) ;
q回由name指定的application属性的初始倹{?/font>
5. Enumeration getInitParameters() ;
q回所有的application属性的初始值的集合?/font>
6. int getMajorVersion() ;
q回servlet容器支持的Servlet API的版本号?/font>
7. String getMimeType( String file ) ;
q回指定文g的类型,未知cdq回null。一般ؓ"text/html"?image/gif"?/font>
8. int getMinorVersion() ;
q回servlet容器支持的Servlet API的副版本受?/font>
9. String getRealPath( String path ) ;
q回l定虚拟路径所对应物理路径?/font>
10. RequestDispatcher getNamedDispatcher( String name ) ;
为指定名字的Servlet对象q回一个RequestDispatcher对象的实例?/font>
11. RequestDispatcher getRequestDispatcher( String path ) ;
q回一个RequestDispatcher对象的实例?/font>
12. URL getResource( String path ) ;
q回指定的资源\径对应的一个URL对象实例Q参数要?/"开头?/font>
13. InputStream getResourceAsStream( String path ) ;
q回一个由path指定位置的资源的InputStream对象实例?/font>
14. Set getResourcePaths( String path ) ;
q回存储在web-app中所有资源\径的集合?/font>
15. String getServerInfo() ;
取得应用服务器版本信息?/font>
16. Servlet getServlet( String name ) ;
在ServletContext中检索指定名U的servlet?/font>
17. Enumeration getServlets() ;
q回ServletContext中所有servlet的集合?/font>
18. String getServletContextName() ;
q回本web应用的名U?/font>
19. Enumeration getServletContextNames() ;
q回ServletContext中所有servlet的名U集合?/font>
20. void log( Exception ex, String msg ) ;
void log( String msg, Throwable t ) ;
void log( String msg ) ;
把指定的信息写入servlet log文g?/font>
21. void removeAttribute( String name ) ;
U除指定名称的application属性?/font>
22. void setAttribute( String name, Object value ) ;
讑֮指定的application属性的倹{?/font>
?config - javax.servlet.ServletConfig
config对象用来存放Servlet初始的数据结构?/font>
ҎQ?br />
1. String getInitParameter( String name ) ;
q回名称为name的促使参数的倹{?/font>
2. Enumeration getInitParameters() ;
q回q个JSP所有的促参数的名U集合?/font>
3. ServletContext getContext() ;
q回执行者的servlet上下文?/font>
4. String getServletName() ;
q回servlet的名U?/font>
?exception - java.lang.Throwable
错误对象Q只有在JSP面的page指o中指定isErrorPage="true"后,才可以在本页面用exception对象?/font>
ҎQ?br />
1. Throwable fillInStackTrace() ;
当前stack信息记录到exception对象中?/font>
2. String getLocalizedMessage() ;
取得本地语系的错误提CZ息?/font>
3. String getMessage()
取得错误提示信息?/font>
4. StackTrackElement[] getStackTrace() ;
q回对象中记录的call stack track信息?/font>
5. Throwable initCause( Throwable cause ) ;
另外一个异常对象嵌套进当前异常对象中?br />
6. Throwable getCause() ;
取出嵌套在当前异常对象中的异常?/font>
7. void printStackTrace() ;
void printStackTrace( printStream s ) ;
void printStackTrace( printWriter s ) ;
打印出Throwable及其call stack trace信息?/font>
8. void setStackTrace( StackTraceElement[] stackTrace )
讄对象的call stack trace信息?/font>
?page - javax.servlet.jsp.HttpJspPage
page对象代表JSP对象本nQ或者说代表~译后的servlet对象Q?br />
可以? (javax.servlet.jsp.HttpJspPage)page )来取用它的方法和属性?/font>
都实CҎ自己的条件实现的面得蟩转?/span>
2. 区别
cd |
概念 |
׃n数据 |
应用 |
Redirect |
URL重新定向Q可以是L?/span>URL |
不能׃nrequest里面的数?/span> |
一般用于用h销d时返回主面和蟩转到其它的网站等{?/span> |
Forward |
面的{发:只能是同一?/span>Web应用E序的其?/span>Weblg |
转发面和{发到的页面可以共?/span>request里面的数?/span> |
一般用于用L录的时候根据角色{发到相应的模块等{?/span> |
3. 例子Q?/span>
譬如Q?/span>client 通过XXX\index.jsp?name=gauss&pwd=123讉Kindex.jsp,?/span>index.jsp中有<jsp:forward page="login.jsp"/>,则在login.jsp中可以通过request.getParameter()得到name?/span>pwdQ?/span><%response.sendRedirect("login.jsp");%>得不到?/span>
4. 注意
一般在index.jsp面之前有个提交数据的页?/span>default.jspQ则defautl.jsp面提交的数据就可以?/span>login.jsp面得到Q而不是得?/span>index.jsp面提交的数据,index.jsp面只是执行的都是一个{发操作当然在里面可以增加也写业务操作Q他可以得到request的数据,?/span>XXX\index.jsp?name=gauss&pwd=123q种方式d是省略?/span>index.jsp前面的一个页面提交数据而已?/span>
finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
q里是在释放?/span>jsp中用的对象Q会调用response.getWriter(),因ؓq个Ҏ是和response.getOutputStream()相冲H的Q所以会出现以上q个异常。然后当然是要提决的办法Q其实挺单的Qƈ不是和某些朋友说的那?/span>--?/span>jsp内的所有空格和回RW号所有都删除掉)Q在使用完输出流以后调用以下两行代码卛_Q?/span>
out.clear();
out = pageContext.pushBody();
附:产生验证码图片的文gimage.jsp
?/span>html中用验证码囄Q?/p>
<img src="image.jsp" id="src" height="18" alt="看不清楚?Ld? onclick="this.src=this.src+'?'+Math.random();" />
]]>
response.setHeader("Refresh","2;URL=index.jsp");
我们?/span>Jbuilder 2006的内|浏览器q行该程序时Q即使输入的信息正确Q在check.jsp面也不会?/span>2U的延迟效果Q而在IE或其他浏览器中均可实现gq效果?/span>