servlet是服务器端的java小程序,用于响应客户机的请求。在默认情况下,servlet采用一种无状态的请求——响应处理方式,主要作用是为了增强java服务器端的功能。
?
servlet是一个标准的java类,符合java类的一般规则。和一般的java类不同的是servlet可以处理Http请求。把这些java类的字节码文件放到servlet容器(如tomcat)的相应目录下时,他们就可以接受客户端响应了。
?
在Web应用程序中,一个Servlet在一个时刻可能被多个用户同时访问。这时Web容器将为每个用户创建一个线程来执行Servlet。如果Servlet不涉及共享资源的问题,不必关心多线程问题。但如果Servlet需要共享资源,需要保证Servlet是线程安全的。
下面是编写线程安全的Servlet的一些建议:
(1)用方法的局部变量保存请求中的专有数据。对方法中定义的局部变量,进入方法的每个线程都有自己的一份方法变量拷贝。任何线程都不会修改其他线程的局部变量。如果要在不同的请求之间共享数据,应该使用会话来共享这类数据。
(2)只用Servlet的成员变量来存放那些不会改变的数据。有些数据在Servlet生命周期中不发生任何变化,通常是在初始时确定的,这些数据可以使用成员变量保存,如数据库连接名称、其他资源的路径等。
(3)对可能被请求修改的成员变量同步。有时数据成员变量或者环境属性可能被请求修改。当访问这些数据时应该对它们同步,以避免多个线程同时修改这些数据。
(4)如果Servlet访问外部资源,那么需要同步访问这些资源。例如,假设Servlet要从文件中读写数据。当一个线程读写一个文件时,其他线程也可能正在读写这个文件。文件访问本身不是线程安全的,所以必须编写同步访问这些资源的代码。在编写线程安全的Servlet时,下面两种方法是不应该使用的:
(1)在Servlet API中提供了一个SingleThreadModel接口,实现这个接口的Servlet在被多个客户请求时一个时刻只有一个线程运行。这个接口已被标记不推荐使用。
(2)对doGet()或doPost()方法同步。如果必须在Servlet中使用同步代码,应尽量在最小的代码块范围上进行同步。同步代码越小,Servlet执行得才越好。
?
两种跳转方式分别是什么?有什么区别?
1.forward跳转:<jsp:forward page="跳转页面地址" />
2.response跳转:response.sendRedirect("跳转页面地址");
?
forward跳转:\\服务器端跳转,地址栏不改变;
response跳转:\\客户端跳转,地址栏改变;
?
response.sendRedirect("跳转页面地址");
request.getRequestDispatcher("/message.jsp").forward(request, response);
?
JSP 9种内置对象:
?
内置对象特点:
1. 由JSP规范提供,不用编写者实例化。
2. 通过Web容器实现和管理
3. 所有JSP页面均可使用
4. 只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)
?
?常用内置对象:
1. 输出输入对象:request对象、response对象、out对象
2. 通信控制对象:pageContext对象、session对象、application对象
3. Servlet对象:page对象、config对象
4. 错误处理对象:exception对象
?
?
Request(Javax.servlet.ServletRequest)它包含了有关浏览器请求的信息.通过该对象可以获得请求中的头信息、Cookie和请求参数。
?
Response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,头信息等)
?
Out(Javax.servlet.jsp.JspWriter)out对象是JspWriter类的实例,是向客户端输出内容常用的对象
?
pageContext(Javax.servlet.jsp.PageContext)pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
?
Session(javax.servlet.http.HttpSession)session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。
?
Application(javax.servle.ServletContext)application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的