(1) HttpServletRequest类的Request对象
作用:代表请求对象,主要用于接受客户端通过HTTP协议连接传输到服务器端的数据。
(2) HttpServletResponse类的Respone对象
作用:代表响应对象,主要用于向客户端发送数据
(3) JspWriter类的out对象
作用:主要用于向客户端输出数据;
Out的基类是JspWriter
(4) HttpSession类的session对象
作用:主要用于来分别保存每个用户信息,与请求关联的会话;
会话状态维持是Web应用开发者必须面对的问题。
(5) ServletContex类的application对象
作用:主要用于保存用户信息,代码片段的运行环境;
它是一个共享的内置对象,即一个容器中的多个用户共享一个application对象,故其保存的信息被所有用户所共享.
(6) PageContext类的PageContext对象
作用:管理网页属性,为JSP页面包装页面的上下文,管理对属于JSP中特殊可见部分中已命名对象的访问,它的创建和初始化都是由容器来完成的。
(7) ServletConfig类的Config对象
作用:代码片段配置对象,表示Servlet的配置。
(8) Object类的Page(相当于this)对象
作用:处理JSP网页,是Object类的一个实例,指的是JSP实现类的实例,即它也是JSP本身,只有在JSP页面范围之内才是合法的。
(9)Exception
作用:处理JSP文件执行时发生的错误和异常
--------------------------------------------------
2、描述一下servlet的生命周期和基本架构。
1, 在服务器启动时,当servlet被客户首次请求或被配置好,这时由服务器加载servlet.
Servlet的加载可以通过合用一个自定义的Java类加载工具(可允许自动Servlet重载)从本地或远程地址来实现。这一步等同于
Class c = Class.forName(“com.sourceStream.MyServlet”);
这里用的术语加载指同时加载和初始化servlet的过程。
2.服务器创建一个servlet类实例来为所有请求服务。利用多线程,可以由单个servlet实例来服务于并行的请求。惟五的例外是,因为实现SingleThreadModel接口的servlet,这样,服务器会创建一个实例池并从中选择一个来服务于每一新的请求。此步相当于以下java代码:
Servlet s = (Servlet)c.newInstance();
3. 服务器调用Servlet的init()方法。它用来保证完成在首次请求servlet处理以前的执行过程。如果servlet创建了多个servlet实例,则为每个实例调用一次init()方法。
4.服务器从包括在客户请求中的数据里构造一个ServletRequest或HttpServletRequest对象,还构造一个ServletResponse或HttpServletResponse对象来返回响应提供方法。其参数类型依赖于servlet是否分别扩展GenericServlet或HttpServlet.(注意:如果服务器没有收到对这一servlet的请求,此步骤与以下5---7步骤将不会发生。)
5.服务器调用servlet的service()方法(对于Httpservlet,service()将调用更为具体的方法:如:doGet() 或doPost()),在此步骤中作为参数传递结构化对象。当并行的请求到来时,多个service()方法能够同时运行在独立的线程中。(除非servlet实现了SingleThreadModel接口)
6通过分析ServletReuest或HttpServletRequest对象。Service()方法处理客户的请求.并调用ServletResponse或HttpServletResponse对象来响应。
7.如果服务器收到另一胩对该servlet的请求,这个处理过程从5步骤重复。
8.一旦servlet容器检测到一个servlet要被卸载,这可能是因为要回收资源或因为它正在被关闭,服务器会在所有servlet的service()线程完成之后(或在服务器规定时间后)调用servlet的destroy()方法。然后servlet就可以进行无用存储单元收集清理。Servlet容器不需要为保留一个servlet而指定时间。
以上8个步骤就是servlet的生命周期。
-------------------------------------------------------------3、多线程有几种实现方法,都是什么?
同步有几种实现方法,都是什么?
(1)通过继承class Thread或实现Runnable接口,我们可以实现多线程
(2)通过synchronized实现资源同步
2.1 锁标志
2.1.1 每个对象都有一个标志锁。当对象的一个线程访问了对象的某个synchronized数据(包括函数)时,这个对象就将被“上锁”,所以被声明为synchronized的数据(包括函数)都不能被调用(因为当前线程取走了对象的“锁标志”)。只有当前线程访问完它要访问的synchronized数据,释放“锁标志”后,同一个对象的其它线程才能访问synchronized数据。
2.1.2 每个class也有一个“锁标志”。对于synchronized static数据(包括函数)可以在整个class下进行锁定,避免static数据的同时访问。
2.2 non-static的synchronized数据只能在同一个对象的纯种实现同步访问,不同对象的线程仍可同时访问。
2.3 对象的“锁标志”和class的“锁标志”是相互独立的
(3)同步的优化
1) synchronized block
语法为:synchronized(reference){ do this }
reference用来指定“以某个对象的锁标志”对“大括号内的代码”实施同步控制。
参考:http://www.yesky.com/SoftChannel/72342371961929728/20031122/1747065.shtml
--------------------------------------------------------------------------------------
4、public private protected以及不写时的区别?
private 、 protected 、 public 是类成员(成员变量、成员方法)的访问权限修饰符
访问权限指本类中的成员可以被哪些类访问
比如,被private修饰的成员不允许被其他类访问,只允许被本类访问;而被public所修饰的成员允许则能被所有类访问
表7-1 类成员的访问权限
| 被本类访问 | 被子类访问 | 被同一包中的其他类访问 | 被所有类访问 |
Private | 允许 | 不允许 | 不允许 | 不允许 |
Protected | 允许 | 允许 | 允许 | 允许 |
Public | 允许 | 允许 | 允许 | 不允许 |
friendly | 允许 | 不允许 | 允许 | 不允许 |
------------------------------------------------------------------
5、用JAVA实现数据库查询(写一段完整的程序)。
class .forName(drive class);
Connection conn = DriverManger.getConnection(URL,username,password);
Statement stmt = conn.createStatement(sqk);
ResultSet rs = stmt.executeQuery();
while(rs.next)
{
rs.getString();
.......
}
呵~~~
我自己看的!