多线程两种:继承thread类和实现runnable接口
同步两种:synchronized,wait与notify
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie、header、session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(比如cookies、头信息等)
out对象是javax.jsp.JspWriter的一个实例,并且提供了几个方法用于向李兰器回送输出结果
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的命名空间、servlet相关的对象的api,并且包装了通用的servlet相关功能的方法。
session表示是一个请求的javax.servlet.http.HttpSession对象。Session可以存储用户的状态信息。
application表示一个javax.servlet.ServletContext对象,这有助于查找有关servlet引擎和servlet环境的信息。
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例。
线程指的是在程序执行过程中能够执行程序代码的一个执行单位,每个程序至少都有一个线程。
java中的线程有四种状态分别是运行、就绪、挂起、结束
Jsp包含三个编译指令和七个动作指令
三个编译指令为:page、include、taglib
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty
page指令通常位于jsp页面的顶端,同一个页面可以有多个page指令。
语法格式如下:
〈% @page
language=”Java” 一般情况就是java,代表jsp页面使用的脚本语言
extends=”package.class” 确定 JSP 程序编译时所产生的 Java 类,需要继承的父类,或者需要实现的接口的全限定类名
import= “package. class I package. },…”用来导入包,有几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang. 、javax.servlet.、javax.servlet.jsp. 、javax.servlet.http.*
session=”true I false” 设定这个 JSP 页面是否需要 HTIP session
buffer=”none I 8kb I size kb” 指定输出缓冲区的大小,输出缓冲区的 JSP 内部对象:out 用于缓存 JSP页面对客户浏览器的输出,默认值为 8kb,可以设置为 none ,也可以设置为其他值,单位为kb
autoFlush=”true I false”当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true 时为正常输出;如果设置为 false ,会在 buffer 溢出时产生一个异常。
isThreadSafe=”true I false”
info=”text” 设置该 JSP 程序的信息,也可以看做其说明,可以通过 Servlet. getServletInfo()方法获取该值。如果在 JSP 页面中,可直接调用 getServletInfo()方法获取该值 。
errorPage=”relativeURL”指定错误处理页面。如果本程序产生了异常或者错误,而该 JSP 页面没有对应的处理代码,则会自动调用该指令所指定的 JSP 页面
contentType=”mimeType[ ;charset=characterSet]” I”text/html;charset= “808859-1” 用于设定生成网页的文件格式和编码方式,即 MIME 类型和页面字符集类型,默认的 MIME 类型是 text/html; 默认的字符集为 ISO-8859-1
isErrorPage=” true I false” 设置本 JSP 页面是否为错误处理程序。如果该页面本身己是错误处理页面,则无须使用 errorPage 属性。
%〉
使用 include 指令,可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句(如果有的话)。这是个静态的 include 语旬,不会检查所包含 JSP 页面的变化。
include 既可以包含静态的文本,也可以包含动态的 JSP 页面。静态的编译指令include ,是将被包含的页面加入进来,生成一个完整的页面。
include 编译指令的语法:
〈% @include file=”relativeURLSpec” %〉
如果被嵌入的文件经常需要改变,建议使用< jsp:include>操作指令,因为它是动态的 include 语句。
包含include指令的jsp页面在部署后,经过访问编译生成java文件,在tomcat的 work\Catalina\localhost\project\org\apache\jsp目录下会生成对应的java文件,这些文件与jsp的名字相同,他包含了编译后的代码,甚至include包含的另外一个jsp的代码也被相应的加入了进来。
forward 指令用于将页面响应控制转发给另外的页面。既可以转发给静态的 HTML页面,也可以转发到动态的 JSP 页面,或者转发到容器中的 Servlet。
JSP 的 forward 指令的格式如下:
对于 JSP 1.0 ,使用如下语法:
< jsp:forward page=”{relativeURL |<%=expression%>}” />
可使用如下语法:
< jsp:forward page=”{relativeURL |<%=expression%>}”>
{< jsp:param…/>}
< /jsp:forward>
第二种语法用于在转发时增加额外的请求参数。增加的请求参数的值可以通过HttpServletRequest 类的 getParameter方法获取。
它是一个动态的指令,可以用于导入某个页面。它的导入会每次检查被导入页面的改变。下面是include指令的使用格式:
< jsp:include page=”{relativeURL |<%=expression%>}” flush=”true” />
或者:
< jsp:include page=”{relativeURL |<%=expression%>}” flush=”true”>
< jsp:param name=”paramName” value=”paramValue”/>
< /jsp:include>
flush 属性用于指定输出缓存是否转移到被导入文件中。如果指定为剧。则包含在被导入文件中;如果指定为false,则包含在原文件中。对于JSP 1.1以下的旧版本,只能设置为false。
< include>和< jsp:include>分别为静态导入和动态导入。他们的的区别:静态导入是将被导入页面的代码完全插入,两个页面生成一个整体的 Servlet; 而动态导入则在 Servlet 中使用动态导入,从而将页面引入。
这三个指令都是与JavaBean相关的指令,其中useBean用于在jsp页面初始化一个java实例,setProperty用于修改JavaBean实例的属性,getProperty用于获取JavaBean实例的属性。
useBean的语法格式:
< jsp:useBean id=”” class=”” scope=”page | request |session | application” >
Id是JavaBean的实例名,class属性确定JavaBean的实现类。Scope属性确定生存范围【页面、请求、会话、应用】
setProperty的语法格式:
< jsp:setProperty name=”” property=”” value=”” />
name属性确定需要设定
plugin 指令用得少
param指令用于设置参数值,这个指令本身不能单独使用,因为单独使用没有意义。它可以和以下几个指令合起来使用
jsp:include
jsp:forward
jsp:plugin
web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service方法实现,根据请求的不同调用不同的do方法。
最后web容器调用servlet的destroy()方法
< %@ page isThreadSafe=”false” % >
request session application cookie等
JSP是Servlet技术的扩展,本质上是Servlet的简易模式。
Servlet和JSP最主要的不同点在于Servlet的应用逻辑实在Java文件中,并且完全从表示层中的html中分离出来,而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图而Servlet用于控制逻辑
page:代表与一个页面相关的对象和属性。一个页面由一个编译好的JavaServlet类表示。这既包括Servlet又包括被编译成Servlet的JSP页面
request是代表与web客户端发出的请求相关的对象和属性。一个请求可能跨域多个页面,涉及多个web组件(由于forward指令和include动作的关系)
session是代表与某个web客户端的一个用户体验相关的对象和属性。一个web会话可以跨越多个客户机请求。
application是代表与整个web应用程序相关的对象和属性。这实质上是跨越整个web应用程序、包括多个页面、请求和会话的一个全局作用域。
setAttribute(String name,Object) 设置名字为那么的request的参数值
J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术
public String translate(String str){
String temp="";
try{
temp=new String(str.getBytes("ISO-8859-1"),"GBK");
temp=temp.trim()
}catch(Exception e){
System.err.println(e.getMessage())
}
return temp;
}
条件操作只能操作布尔类型的,而逻辑操作不仅可以操作布尔类型,同时可以操作数值型(此时叫位操作)
逻辑操作不会产生短路,而条件操作会产生短路。
使用操作符时,我们会遇到一种“短路”现象。即一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分了。因此,整个逻辑表达式靠后的部分有可能不会被运算。
主要相同点:lock能完成synchronized所实现的所有功能
不同点:lock有比synchronized更加精确的线程语义和更好的性能。synchronized会自动释放锁,而lock要求程序员手动释放,并且在finally中释放
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destory()
web容器:
EJB容器:
JNDI:
JMS:
JTA:
JAF:
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是throwable类或者其他子类的实例。
当一个方法出现异常后变抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理通过5个关键词来实现的:throws,throw,try,catch,finally
throws和finally一般情况下是用try来执行一段程序,如果出现异常,系统会抛出throw一个异常,这时候可以通过它的类型来catch它,或者在finally语句块中由缺省处理器来处理。
throw用来明确地抛出一个异常
throws用来标明一个成员函数可能抛出的各种异常
finally为了确保一段代码不管发生什么异常都会被执行一段代码
可以包括多个类。但必须只有一个类名与文件名相同
Model-view-controller。
model:JavaBean
view:JSP、velocity、freemarker等
controller:servlet(基本不用)在controllerl类名上加@Controller,方法名上加@RequestMapping确定访问的uri
字节流:InputStream、OutputStream
字符流:InputStreamReader、OutputStreamWriter
java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。
如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。
overload和override