java 基础整理收集 有空多看看
String DIGEST_AUTH = "DIGEST"?????????? -
String FORM_AUTH = "FORM"?????????????? -
③ response - javax.servlet.http.HttpServletResponse
?? response对象主要将JSP容器处理后的结果传回到客户端。
方法:
1. void addCookie( Cookie cookie ) ;
?? 添加一个Cookie对象,保存客户端信息。
2. void addDateHeader( String name, long value ) ;
?? 添加一个日期类型的HTTP头信息,覆盖同名的HTTP头信息。
3. void addHeader( String name, String value ) ;
?? 添加一个HTTP头,覆盖同名的旧HTTP头。
4. void addIntHeader( String name, int value ) ;
?? 添加一个整型的HTTP头,覆盖同名的旧HTTP头。
5. boolean containsHeader( String name ) ;
?? 判断指定的HTTP头是否存在。
6. String encodeRedirectURL( String url ) ;
?? 对sendRedirect()方法使用的URL进行编码。
7. String encodeURL( String url ) ;
?? 将URL予以编码,回传包含session ID的URL。
??
8. void flushBuffer() ;
?? 强制把当前缓冲区的内容发送到客户端。
9. int getBufferSize() ;
?? 取得以kb为单位的缓冲区大小。
10. String getCharacterEncoding() ;
??? 获取响应的字符编码格式。
11. String getContentType() ;
??? 获取响应的类型。
12. Locale getLocale() ;
??? 获取响应的Locale对象。
13. ServletOutputStream getOutputStream() ;
??? 返回客户端的输出流对象。
14. PrintWriter getWriter() ;
??? 获取输出流对应的writer对象。
15. boolean isCommitted() ;
??? 判断服务器端是否已经将数据输出到客户端。
16. void reset() ;
??? 清空buffer中的所有内容。
17. void resetBuffer() ;
??? 情况buffer中所有的内容,但是保留HTTP头和状态信息。
18. void sendError( int xc, String msg ) ;
??? void sendError( int xc ) ;
??? 发送错误,包括状态码和错误信息。
19. void sendRedirect( String locationg ) ;
??? 把响应发送到另外一个位置进行处理。
20. void setBufferSize( int size ) ;
??? 设置以kb为单位的缓冲区大小。
21. void setCharacterEncoding( String charset ) ;
??? 设置响应使用的字符编码格式。
22. void setContentLength( int length ) ;
??? 设置响应的BODY长度。
23. void setContentType( String type ) ;
??? 设置响应的类型。
24. void setDateHeader( String name, long value ) ;
??? 设置指定名称的Data类型的HTTP头的值。
25. void setHeader( String name, String value ) ;
??? 设置指定名称的HTTP头的值。
26. void setIntHeader( String name, int value ) ;
??? 设置指定名称的int类型的HTTP头的值。
27. void setStatus( int xc ) ;
??? 设置响应状态码,新值会覆盖当前值。
成员(HTTP状态码):
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对象表示目前个别用户的会话状态,用来识别每个用户。
方法:
1. Object getAttribute( String name ) ;
?? 获取与指定名字相关联的session属性值。
2. Enumeration getAttributeNames() ;
?? 取得session内所有属性的集合。
3. long getCreationTime() ;
?? 返回session的创建时间,最小单位千分之一秒。
4. String getId() ;
?? 取得session标识。
5. long getLastAccessedTime() ;
?? 返回与当前session相关的客户端最后一次访问的时间,由1970-01-01算起,单位毫秒。
6. int getMaxInactiveInterval( int interval ) ;
?? 返回总时间,以秒为单位,表示session的有效时间(session不活动时间)。-1为永不过期。
7. ServletContext getServletContext() ;
?? 返回一个该JSP页面对应的ServletContext对象实例。
8. HttpSessionContext getSessionContext() ;
??
9. Object getValue( String name ) ;
?? 取得指定名称的session变量值,不推荐使用。
10. String[] getValueNames() ;
??? 取得所有session变量的名称的集合,不推荐使用。
11. void invalidate() ;
??? 销毁这个session对象。
12. boolean isNew() ;
??? 判断一个session是否由服务器产生,但是客户端并没有使用。
13. void pubValue( String name, Object value ) ;
??? 添加一个session变量,不推荐使用。
14. void removeValue( String name ) ;
??? 移除一个session变量的值,不推荐使用。
15. void setAttribute( String name, String value ) ;
??? 设置指定名称的session属性值。
16. void setMaxInactiveInterval( int interval ) ;
??? 设置session的有效期。
17. void removeAttribute( String name ) ;
??? 移除指定名称的session属性。
⑤ pageContext - javax.servlet.jsp.PageContext
?? pageContext对象存储本JSP页面相关信息,如属性、内建对象等。
方法:
1. void setAttribute( String name, Object value, int scope ) ;
?? void setAttribute( String name, Object value ) ;
?? 在指定的共享范围内设置属性。
2. Object getAttribute( String name, int scope ) ;
?? Object getAttribute( String name ) ;
?? 取得指定共享范围内以name为名字的属性值。
3. Object findAttribute( String name ) ;
?? 按页面、请求、会话和应用程序共享范围搜索已命名的属性。
4. void removeAttribute( String name, int scope ) ;
?? void removeAttribute( String name ) ;
?? 移除指定名称和共享范围的属性。
5. void forward( String url ) ;
?? 将页面导航到指定的URL。
6. Enumeration getAttributeNamesScope( int scope ) ;
?? 取得指定共享范围内的所有属性名称的集合。
7. int getAttributeScope( String name ) ;
?? 取得指定属性的共享范围。
8. ErrorData getErrorDate() ;
?? 取得页面的errorData对象。
9. Exception getException() ;
?? 取得页面的exception对象。
10. ExpressionEvaluator getExpressionEvaluator() ;
??? 取得页面的expressionEvaluator对象。
11. JspWriter getOut() ;
??? 取得页面的out对象。
12. Object getPage() ;
??? 取得页面的page对象。
13. ServletRequest getRequest() ;
??? 取得页面的request对象。
14. ServletResponse getResponse() ;
??? 取得页面的response对象。
15. ServletConfig getConfig() ;
??? 取得页面的config对象。
16. ServletContext getServletContext() ;
??? 取得页面的servletContext对象。
17. HttpSession getSession() ;
??? 取得页面的session对象。
18. VariableResolver getVariableResolver() ;
??? 取得页面的variableResolver对象。
19. void include( String url, boolean flush ) ;
??? void include( String url ) ;
??? 包含其他的资源,并指定是否自动刷新。
20. void release() ;
??? 重置pageContext内部状态,释放所有内部引用。
21. void initialize( Servlet servlet, ServletRequest request, ServletResponse response,
???????????????????? String errorPageURL, boolean needSession, int bufferSize, boolean autoFlush ) ;
??? 初始化未经初始化的pageContext对象。
22. BodyContext pushBody() ;
??? BodyContext pushBody( Writer writer ) ;
??? 保存当前的out对象,并更新pageContext中page范围内的out对象。
23. JspWrite popBody() ;
??? 取出由pushBody()方法保存的out对象。
24. void handlePageException( Exception e ) ;
??? void handlePageException( Thrwoable t ) ;
???
成员:
int PAGE_SCOPE = 1??????? - 页面共享范围
int REQUEST_SCOPE = 2???? - 请求共享范围
int SESSION_SCOPE = 3???? - 会话共享范围
int APPLICATION_SCOPE = 4 - 应用程序共享范围
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的设定。
方法:
1. Object getAttribute( String name ) ;
?? 返回由name指定的application属性。
2. Enumeration getAttributes() ;
?? 返回所有的application属性。
3. ServletContext getContext( String uripath ) ;
?? 取得当前应用的ServletContext对象。
4. String getInitParameter( String name ) ;
?? 返回由name指定的application属性的初始值。
5. Enumeration getInitParameters() ;
?? 返回所有的application属性的初始值的集合。
6. int getMajorVersion() ;
?? 返回servlet容器支持的Servlet API的版本号。
7. String getMimeType( String file ) ;
?? 返回指定文件的类型,未知类型返回null。一般为"text/html"和"image/gif"。
8. int getMinorVersion() ;
?? 返回servlet容器支持的Servlet API的副版本号。
9. String getRealPath( String path ) ;
?? 返回给定虚拟路径所对应物理路径。
10. RequestDispatcher getNamedDispatcher( String name ) ;
??? 为指定名字的Servlet对象返回一个RequestDispatcher对象的实例。
11. RequestDispatcher getRequestDispatcher( String path ) ;
??? 返回一个RequestDispatcher对象的实例。
12. URL getResource( String path ) ;
??? 返回指定的资源路径对应的一个URL对象实例,参数要以"/"开头。
13. InputStream getResourceAsStream( String path ) ;
??? 返回一个由path指定位置的资源的InputStream对象实例。
14. Set getResourcePaths( String path ) ;
??? 返回存储在web-app中所有资源路径的集合。
15. String getServerInfo() ;
??? 取得应用服务器版本信息。
16. Servlet getServlet( String name ) ;
??? 在ServletContext中检索指定名称的servlet。
17. Enumeration getServlets() ;
??? 返回ServletContext中所有servlet的集合。
18. String getServletContextName() ;
??? 返回本web应用的名称。
19. Enumeration getServletContextNames() ;
??? 返回ServletContext中所有servlet的名称集合。
20. void log( Exception ex, String msg ) ;
??? void log( String msg, Throwable t ) ;
??? void log( String msg ) ;
??? 把指定的信息写入servlet log文件。
21. void removeAttribute( String name ) ;
??? 移除指定名称的application属性。
22. void setAttribute( String name, Object value ) ;
??? 设定指定的application属性的值。
⑦ config - javax.servlet.ServletConfig
?? config对象用来存放Servlet初始的数据结构。
方法:
1. String getInitParameter( String name ) ;
?? 返回名称为name的促使参数的值。
2. Enumeration getInitParameters() ;
?? 返回这个JSP所有的促使参数的名称集合。
3. ServletContext getContext() ;
?? 返回执行者的servlet上下文。
4. String getServletName() ;
?? 返回servlet的名称。
⑧ exception - java.lang.Throwable
?? 错误对象,只有在JSP页面的page指令中指定isErrorPage="true"后,才可以在本页面使用exception对象。
方法:
1. Throwable fillInStackTrace() ;
?? 将当前stack信息记录到exception对象中。
2. String getLocalizedMessage() ;
?? 取得本地语系的错误提示信息。
3. String getMessage()
?? 取得错误提示信息。
4. StackTrackElement[] getStackTrace() ;
?? 返回对象中记录的call stack track信息。
5. Throwable initCause( Throwable cause ) ;
?? 将另外一个异常对象嵌套进当前异常对象中。
??
6. Throwable getCause() ;
?? 取出嵌套在当前异常对象中的异常。
7. void printStackTrace() ;
?? void printStackTrace( printStream s ) ;
?? void printStackTrace( printWriter s ) ;
?? 打印出Throwable及其call stack trace信息。
8. void setStackTrace( StackTraceElement[] stackTrace )
?? 设置对象的call stack trace信息。
⑨ page - javax.servlet.jsp.HttpJspPage
?? page对象代表JSP对象本身,或者说代表编译后的servlet对象,
?? 可以用( (javax.servlet.jsp.HttpJspPage)page )来取用它的方法和属性。
Servlets/JSP Container(Engine)有几种运行方式?<@ include ... -- Page translation time.
Servlet,Servlet开发人员,Servlet API, Servlet Container的关系是什么??
StandaloneTomcat standalone modeIn-processTomcat running inside Apache Web Server.Out-of-processApache + mod_jk + Tomcat?
Servlet,Servlet开发人员 --->Servlet API --> Servlet ContainerThe parts of an HTTP message
ServetRequest中为什么要定义:getContentType(),getContentLength()方法。
根据HTTP协议规范,Request 和 Response一样也有这些必不可少的内容!RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的区别是什么?
所以需要首先了解 HTTP Message的概念和其内容的格式,这些东西对于Request和Reponse是一样的。
对于GET方式发送的请求,其内容类型为:null
对于POST方式发送的请求,其内容类型为:application/x-www-form-urlencodedPOST方式发送请求的内容类似于:username=xuejava.
RequestDispatcher.forward()是在服务器端运行;HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成。ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的区别是什么?为什么?
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是。
另外,还要注意RequestDispatcher.forward()在调用的时候Response不能已经Commit了(Response.isCommitted())。
ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。如何把请求转移到另外一个Web App中的某个地址?
因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)只能把请求转移到同一个Web App中的地址。
如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).
2. 调用ServletContext.getRequestDispatcher(String url)方法。
1.????? 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;
?
但它又是一种特殊的对象,有其它对象没有的一些特性。
?
String str=new String (“kvill”);的区别:
?
在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。
?
常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。
?
看例1:
?
??????? String s0=”kvill”;
?
??????? String s1=”kvill”;
?
??????? String s2=”kv” + “ill”;
?
??????? System.out.println( s0==s1 );
?
System.out.println( s0==s2 );
?
??????? 结果为:
?
true
?
true
?
?????? 首先,我们要知道Java会确保一个字符串常量只有一个拷贝。
?
因为例子中的s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为true;而”kv”和”ill”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中”kvill”的一个引用。
?
所以我们得出s0==s1==s2;
?
用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
?
看例2:
?
??????? String s0=”kvill”;
?
??????? String s1=new String(”kvill”);
?
??????? String s2=”kv” + new String(“ill”);
?
??????? System.out.println( s0==s1 );
?
System.out.println( s0==s2 );
?
System.out.println( s1==s2 );
?
??????? 结果为:
?
false
?
false
?
false
?
?????? 例2中s0还是常量池中”kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分new String(“ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果了。
?
?
?
再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法;当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用;看例3就清楚了
?
例3:
?
??????? String s0= “kvill”;
?
??????? String s1=new String(”kvill”);
?
??????? String s2=new String(“kvill”);
?
??????? System.out.println( s0==s1 );
?
??????? System.out.println( “**********” );
?
?????? s1.intern();
?
??????? s2=s2.intern();???????????? //把常量池中“kvill”的引用赋给s2
?
??????? System.out.println( s0==s1);
?
System.out.println( s0==s1.intern() );
?
System.out.println( s0==s2 );
?
??????? 结果为:
?
false??????
?
**********
?
false?????? //虽然执行了s1.intern(),但它的返回值没有赋给s1
?
true ?? //说明s1.intern()返回的是常量池中”kvill”的引用
?
true
?
??????
?
?????? 最后我再破除一个错误的理解:
?
有人说,“使用String.intern()方法则可以将一个String类的保存到一个全局String表中
?
如果具有相同值的Unicode字符串已经在这个表中,那么该方法返回表中已有字符串的地址
?
如果在表中没有相同值的字符串,则将自己的地址注册到表中“
?
如果我把他说的这个全局的String表理解为常量池的话,他的最后一句话,“如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的:
?
看例4:
?
??????? String s1=new String("kvill");
?
??????? String s2=s1.intern();
?
System.out.println( s1==s1.intern() );
?
System.out.println( s1+"? "+s2 );
?
System.out.println( s2==s1.intern() );
?
结果:
?
false
?
kvill? kvill
?
true
?
在这个类中我们没有声名一个”kvill”常量,所以常量池中一开始是没有”kvill”的
?
当我们调用s1.intern()后就在常量池中新添加了一个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。
?
?????? s1==s1.intern()为false说明原来的“kvill”仍然存在;
?
?????? s2现在为常量池中“kvill”的地址,所以有s2==s1.intern()为true。
?
这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true;而==是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。
?
这一说又要说很多,大家只要知道String的实例一旦生成就不会再改变了,
?
比如说:String str=”kv”+”ill”+”? “+”ans”;
?
就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然后”kvill”又和”? “ 生成 ”kvill? “存在内存中,最后又和生成了”kvill? ans”;并把这个字符串的地址赋给了str,就是因为String的“不可变”产生了很多临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的
?