读书人

java 基础拾掇收集 有空多看看

发布时间: 2012-10-25 10:58:57 作者: rapoo

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 )来取用它的方法和属性。


<@ include ... -- Page translation time.

Servlets/JSP Container(Engine)有几种运行方式?

?

Standalone
Tomcat standalone mode
In-process
Tomcat running inside Apache Web Server.
Out-of-process
Apache + mod_jk + Tomcat

?

Servlet,Servlet开发人员,Servlet API, Servlet Container的关系是什么?
Servlet,Servlet开发人员 --->Servlet API --> Servlet Container
The parts of an HTTP message
 ServetRequest中为什么要定义:getContentType(),getContentLength()方法。 
根据HTTP协议规范,Request 和 Response一样也有这些必不可少的内容!
所以需要首先了解 HTTP Message的概念和其内容的格式,这些东西对于Request和Reponse是一样的。
对于GET方式发送的请求,其内容类型为:null
对于POST方式发送的请求,其内容类型为:application/x-www-form-urlencoded

POST方式发送请求的内容类似于:username=xuejava.
RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的区别是什么?
RequestDispatcher.forward()是在服务器端运行;HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成。
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是。
另外,还要注意RequestDispatcher.forward()在调用的时候Response不能已经Commit了(Response.isCommitted())。
ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的区别是什么?为什么?
ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。
因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
如何把请求转移到另外一个Web App中的某个地址?
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是可改变的

?

读书人网 >编程

热点推荐