一、ServerLet是什么?什么是CGI程序?
答:ServerLet是运用在web服务器或运用服务器上的程序作为一种请求(来自web浏览器或HTTP客户端)和数据(HTTP服务器)之间的中间层,可以代替CGI程序公共网关接口(Common Gateway Interface,CGI)
二、为什么要使用servlet?
1、servlet具有持久性(相对于什么?CGI(一次连接传输完成就释放连接)),一次加载完成后,可以完成多次请求的处理,直到该web应用服务器端关闭
2、由于servlet是用java语言编写的,所以具有:平台无关性,健壮性,易扩展性
三、ServerLet的作用?
1.读取客户端发送的数据,包括:HTML表单,cookies,媒体类型(接受请求)
2.处理数据并生成结果(处理接收到的请求)
3.发送数据到客户端(浏览器)(返回响应)总的来说就是将客户端发送的请求处理以后将结果返回客户端
四、servlet的创建
答:使用javax.servlet和javax.servlet.http包创建。
五、ServerLet的生命周期?
答:servlet从创建到销毁的过程叫做servlet的生命周期,分为四个步骤
1、Servlet容器接收到客户端的request,查看是否已存在该Servlet实例,如果存在,直接调用service方法
2、不存在则调用init()方法创建一个servlet实例
3、为每个servlet对象调用service()方法
4、服务器关闭,调用destory()方法;
servlet解析客户端http请求流程:
1. web客户向Servlet容器发出HTTP请求;
2. Servlet容器解析web的HTTP请求.
3. Servlet容器创建一个HttpRequest对象,在这个对象中封装了http请求信息;
4. Servlet容器创建一个HttpResponse对象;
5. Servlet容器(如果访问的该servlet不是在服务器启动时创建的,则先创建servlet实例并调用init()方法初始化对象)调用HttpServlet的service()方法,把HttpRequest和HttpResponse对象为service方法的参数传给HttpServlet对象;
6. HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7. HttpServlet调用HttpResponse的有关方法,生成响应数据;
8. Servlet容器把HttpServlet的响应结果传给web客户.
六、servlet 部署
默认情况下,servlet运用程序位于apache-tomcat-7.0.0\webapps\ROOT下,而class文件位于apache-tomcat-7.0.0\webapps\ROOT\WEB-INF下然后在web.cml文件里添加
七、HttpServlet
HttpServlet在实现Servlet接口的时候,重写了Service()方法,该方法内部会自动判断请求方式,如果为Get则自动调用doGet(),如果为Post则自动调用doPost(),因此我们在创建Servlet时只要重写doGet(),doPost()方法,而不需要重写Service()。
八、Servlet开发细节
1.注册Servlet,主要通过servlet节点
2.映射Servlet,主要通过servlet-mapping节点
3.同一个Servlet可以被映射到多个URL上去,通过多个< servlet-name >相同的来实现
4.中可以使用通配符,一种格式是*.扩展名,另一种格式是/开头,/*结尾
5.调用servlet的java程序叫做servlet引擎。
6.如果在中配置了元素则服务器会在启动时就加载并创建Servlet对象。
7.如果某个Servlet的映射路径是’/’则该Servlet是缺省Servlet,他处理所有其他Servlet都不处理的请求。(所有的请求都是访问Servlet的,访问网页资源的时候正是通过缺省Servlet来实现的)?
九、Servlet的线程安全问题
当多个客户并发访问同一个Servlet时,web服务器会为每个请求创建一个线程调用Service方法,如果Service方法中访问了同一个资源就会引发线城安全问题。如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将会以单线程的模式调用Service方法serverletconfig?
十、ServletConfig对象?
在Servlet的配置文件中可以使用一个或多个标签为Servlet配置初始化参数,web服务器会在创建Servlet对象时,将这些参数封装在ServletConfig对象中,因此我们可以通过ServletConfig对象来获取一个Servlet的初始化参数。通常将Servlet运行时要读取的配置文件写在这里
十二、ServletContext对象?
1.ServletContext对象代表了一个应用,他是一个Context域对象,它里面的方法主要是一些全局性的方法, 可以用来存储各个Servlet之间的共享数据。
2.ServletContext对象的应用场景,主要用于Servlet之间数据共享(可以用来做聊天室), 获取web应用的初始化参数,实现Servlet转发,读取资源文件。
3.配置web应用的初始化参数,在web.xml文件中使用标签,通常在这里配置数据库连接,
4.Servlet的转发和重定向,转发(你来请求我,我将请求转给他),通常转发给jsp用来美化输出,重定向(你来请求我,我让你重新请求他)
十三、获得资源路径的三种方法?
ServletContext context = getServletContext();
/**第一种方式
String path = context.getRealPath("/WEB-INF/classes/db.properties");
Properties pro = new Properties();
pro.load(new FileInputStream(path));
System.out.println(pro.getProperty("url"));
*/
/**第二种方式
InputStream in = context.getResourceAsStream("/WEB-INF/classes/db.properties");
Properties pro = new Properties();
pro.load(in);
System.out.println(pro.getProperty("url"));
*/
/**
* 前两种方式的缺陷:必须使用ServletContext对象 只能在Servlet中用
* DBConfig.java 没有ServletContext对象
* 解决方法:方式一传参
* 方式二:ClassLoader
* 第三种方式 在任意类中都可以使用
*/
InputStream in = TServlet.class.getClassLoader().getResourceAsStream("/db.properties");
Properties pro = new Properties();
pro.load(in);
System.out.println(pro.getProperty("url"));
------------------------------------------------------------------------------
十四、serverlet request?
1 Cookie[] getCookies()
返回一个数组,包含客户端发送该请求的所有的 Cookie 对象。
2 Enumeration getAttributeNames()
返回一个枚举,包含提供给该请求可用的属性名称。
3 Enumeration getHeaderNames()
返回一个枚举,包含在该请求中包含的所有的头名。
4 Enumeration getParameterNames()
返回一个 String 对象的枚举,包含在该请求中包含的参数的名称。
5 HttpSession getSession()
返回与该请求关联的当前 session 会话,或者如果请求没有 session 会话,则创建一个。
6 HttpSession getSession(boolean create)
返回与该请求关联的当前 HttpSession,或者如果没有当前会话,且创建是真的,则返回一个新的 session 会话。
7 Locale getLocale()
基于 Accept-Language 头,返回客户端接受内容的首选的区域设置。
8 Object getAttribute(String name)
以对象形式返回已命名属性的值,如果没有给定名称的属性存在,则返回 null。
9 ServletInputStream getInputStream()
使用 ServletInputStream,以二进制数据形式检索请求的主体。
10 String getAuthType()
返回用于保护 Servlet 的身份验证方案的名称,例如,"BASIC" 或 "SSL",如果JSP没有受到保护则返回 null。
11 String getCharacterEncoding()
返回请求主体中使用的字符编码的名称。
12 String getContentType()
返回请求主体的 MIME 类型,如果不知道类型则返回 null。
13 String getContextPath()
返回指示请求上下文的请求 URI 部分。
14 String getHeader(String name)
以字符串形式返回指定的请求头的值。
15 String getMethod()
返回请求的 HTTP 方法的名称,例如,GET、POST 或 PUT。
16 String getParameter(String name)
以字符串形式返回请求参数的值,或者如果参数不存在则返回 null。
17 String getPathInfo()
当请求发出时,返回与客户端发送的 URL 相关的任何额外的路径信息。
18 String getProtocol()
返回请求协议的名称和版本。
19 String getQueryString()
返回包含在路径后的请求 URL 中的查询字符串。
20 String getRemoteAddr()
返回发送请求的客户端的互联网协议(IP)地址。
21 String getRemoteHost()
返回发送请求的客户端的完全限定名称。
22 String getRemoteUser()
如果用户已通过身份验证,则返回发出请求的登录用户,或者如果用户未通过身份验证,则返回 null。
23 String getRequestURI()
从协议名称直到 HTTP 请求的第一行的查询字符串中,返回该请求的 URL 的一部分。
24 String getRequestedSessionId()
返回由客户端指定的 session 会话 ID。
25 String getServletPath()
返回调用 JSP 的请求的 URL 的一部分。
26 String[] getParameterValues(String name)
返回一个字符串对象的数组,包含所有给定的请求参数的值,如果参数不存在则返回 null。
27 boolean isSecure()
返回一个布尔值,指示请求是否使用安全通道,如 HTTPS。
28 int getContentLength()
以字节为单位返回请求主体的长度,并提供输入流,或者如果长度未知则返回 -1。
29 int getIntHeader(String name)
返回指定的请求头的值为一个 int 值。
30 int getServerPort()
返回接收到这个请求的端口号。
十五、serverlet response?
响应通常包括一个状态行、一些响应报头、一个空行和文档。
----------------------------------------------------------------------
头信息 描述
1、Allow
这个头信息指定服务器支持的请求方法(GET、POST 等)。
2、Cache-Control
这个头信息指定响应文档在何种情况下可以安全地缓存。可能的值有:public、private 或 no-cache 等。
Public 意味着文档是可缓存,
Private 意味着文档是单个用户私用文档,且只能存储在私有(非共享)缓存中,
no-cache 意味着文档不应被缓存。
3、Connection
这个头信息指示浏览器是否使用持久 HTTP 连接。
值 close 指示浏览器不使用持久 HTTP 连接,值 keep-alive 意味着使用持久连接。
4、Content-Disposition
这个头信息可以让您请求浏览器要求用户以给定名称的文件把响应保存到磁盘。
5、Content-Encoding
在传输过程中,这个头信息指定页面的编码方式。
6、Content-Language
这个头信息表示文档编写所使用的语言。例如,en、en-us、ru 等。
7、Content-Length
这个头信息指示响应中的字节数。只有当浏览器使用持久(keep-alive)HTTP 连接时才需要这些信息。
8、Content-Type
这个头信息提供了响应文档的 MIME(Multipurpose Internet Mail Extension)类型。
9、Expires
这个头信息指定内容过期的时间,在这之后内容不再被缓存。
10、Last-Modified
这个头信息指示文档的最后修改时间。然后,客户端可以缓存文件,并在以后的请求中通过 If-Modified-Since 请求头信息提供一个日期。
11、Location
这个头信息应被包含在所有的带有状态码的响应中。在 300s 内,这会通知浏览器文档的地址。浏览器会自动重新连接到这个位置,并获取新的文档。
1、2Refresh 这个头信息指定浏览器应该如何尽快请求更新的页面。您可以指定页面刷新的秒数。
13、Retry-After
这个头信息可以与 503(Service Unavailable 服务不可用)响应配合使用,这会告诉客户端多久就可以重复它的请求。
14、Set-Cookie
这个头信息指定一个与页面关联的 cookie。
--------------------------------------------------------
设置 HTTP 响应报头的方法
下面的方法可用于在 Servlet 程序中设置 HTTP 响应报头。这些方法通过 HttpServletResponse 对象可用。
序号 方法 & 描述
1 String encodeRedirectURL(String url)
为 sendRedirect 方法中使用的指定的 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
2 String encodeURL(String url)
对包含 session 会话 ID 的指定 URL 进行编码,或者如果编码不是必需的,则返回 URL 未改变。
3 boolean containsHeader(String name)
返回一个布尔值,指示是否已经设置已命名的响应报头。
4 boolean isCommitted()
返回一个布尔值,指示响应是否已经提交。
5 void addCookie(Cookie cookie)
把指定的 cookie 添加到响应。
6 void addDateHeader(String name, long date)
添加一个带有给定的名称和日期值的响应报头。
7 void addHeader(String name, String value)
添加一个带有给定的名称和值的响应报头。
8 void addIntHeader(String name, int value)
添加一个带有给定的名称和整数值的响应报头。
9 void flushBuffer()
强制任何在缓冲区中的内容被写入到客户端。
10 void reset()
清除缓冲区中存在的任何数据,包括状态码和头。
11 void resetBuffer()
清除响应中基础缓冲区的内容,不清除状态码和头。
12 void sendError(int sc)
使用指定的状态码发送错误响应到客户端,并清除缓冲区。
13 void sendError(int sc, String msg)
使用指定的状态发送错误响应到客户端。
14 void sendRedirect(String location)
使用指定的重定向位置 URL 发送临时重定向响应到客户端。
15 void setBufferSize(int size)
为响应主体设置首选的缓冲区大小。
16 void setCharacterEncoding(String charset)
设置被发送到客户端的响应的字符编码(MIME 字符集)例如,UTF-8。
17 void setContentLength(int len)
设置在 HTTP Servlet 响应中的内容主体的长度,该方法设置 HTTP Content-Length 头。
18 void setContentType(String type)
如果响应还未被提交,设置被发送到客户端的响应的内容类型。
19 void setDateHeader(String name, long date)
设置一个带有给定的名称和日期值的响应报头。
20 void setHeader(String name, String value)
设置一个带有给定的名称和值的响应报头。
21 void setIntHeader(String name, int value)
设置一个带有给定的名称和整数值的响应报头。
22 void setLocale(Locale loc)
如果响应还未被提交,设置响应的区域。
23 void setStatus(int sc)
为该响应设置状态码。
网友评论