java web 第三天笔记
来源:互联网 发布:透视数据复制出来 编辑:程序博客网 时间:2024/04/29 19:12
6、1.检索客户端有关信息
String getRemoteHost() 返回客户机的主机名
String getRemoteAddr() 返回客户端的IP地址
int getRemotePort() 返回客户端的IP地址的端口号
String getProtocol() 返回客户使用的请求协议名和版本。
String getContentType() 返回请求体的MIME类型
String getCharacterEncoding() 返回客户请求的编码方式
public Cookie[] getCookies() 返回客户与该请求一同发送的Cookie对象数组。
6、2检索HTTP请求头
HTTP请求头是针对HTTP协议的,因此处理头的方法属于HttpServletRequest接口。
下面是HttpServletRequest接口中提供的用于检索头信息的方法:
String getHeader(String name)
Enumeration getHeaders(String name)
Enumeration getHeaderNames()
常用的HTTP请求头
请求头名 内容
user-agent 关于浏览器和它的平台的信息
accept 客户能处理的页面的类型
accept-charset 客户可以接受的字符集
accept-encoding 客户能处理的页面编码的方法
accept–language 客户能处理的语言
host 服务器的DNS名字
authorization 客户的信任凭据的列表
cookie 将一个以前设置的cookie送回服务器
date 消息被发送的日期和时间
6、3下面是HttpServletRequest接口中提供的用于检索头信息的方法:
1、设置响应头。
public String getHeader(String name) 返回指定名称的请求头的值。
public Enumeration getHeaders(String name) 返回指定名称的请求头的Enumeration对象。
public Enumeration getHeaderNames() 返回一个Enumeration对象,它包含所有请求头名。
public int getIntHeader(String name) 返回指定名称的请求头的整数值。
public long getDateHeader(String name) 返回指定名称的请求头的日期值。
2、
3、通过设置refresh响应头实现每5秒钟刷新一次页面。
如:response.setHeader("refresh","5");
4、要告诉浏览器在5秒钟后跳转到http://host/path页面,可以使用下面语句:
response.setHeader("Refresh","5;URL=http://host/path/");
实际上,在HTML页面中通过在<head>标签内添加下面代码也可以实现这个功能:
<meta http-equiv="Refresh" content="5; URL= http://host/path/">
7响应重定向
1、Servlet可能决定不直接向浏览器发送响应,而是将响应重定向到其他资源。
public void sendRedirect(String location)
向客户发送一个重定向的响应,location为指定的新的资源的URL。该URL可以是绝对URL,也可以是相对URL。
2、关于sendRedirect()方法,记住下面两点。
(1)如果响应被提交,即响应头已经发送到浏览器,就不能调用该方法。此时如果调用该方法,方法将抛出异常。例如:
public void doGet(HttpServletRequest req,
HttpServletResponse res){
PrintWriter pw = res.getWriter();
pw.println("<html><body>Hello orld!</body></html>");
pw.flush();
res.sendRedirect("http://www.cnn.com");
}
解释:flush() 是把缓冲区的数据强行输出, 主要用在IO中,即清空缓冲区数据,一般在读写流(stream)的时候,数据是先被读到了内存中,再把数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先flush()。
(2)只有当浏览器从第一个资源收到重定向消息后,它才请求第二个资源。
8、重定向与请求响应的区别
1、请求转发
2、重定向
3、比较:
(1)RequestDispatcher对象是一个Web资源的包装器,可以用来把当前请求转发到该资源。
这种转发是在服务器端控制权的转向,客户端发来的请求将交由新的页面进行处理。
使用请求转发,在客户的浏览器地址栏中不会显示转发后的资源地址。
使用请求转发,可以将前一个页面的数据、状态等信息传到转发的页面。
2)sendRedirect()方法实际是服务器向浏览器发送一个特殊的响应头(Location,状态码302),它命令浏览器连接到新的位置。
因此,使用这种方法在浏览器的地址栏中可以看到地址的变化。
重定向是作为不同请求来看待的,因此,所有请求作用域的参数在重定向到下一个页面时都会失效。
使用sendRedirect()方法重定向时,资源不能位于WEB-INF目录中。
在调用sendRedirect()方法之前,主页面不能有内容输出。在调用sendRedirect()方法之后应该有一个return语句。
9、发送状态码和错误消息
1、Web服务器对请求的响应一般由状态行、响应头、空行和相应的文档构成。状态行由3部分组成:HTTP版本、状态码和状态码的描述信息。如下是一个典型的状态行:
HTTP/1.1 200 OK
由于HTTP的版本是由服务器决定的,而状态的消息是与状态码有关的,因此,在Servlet中一般只需要设置状态码。
状态码200是系统自动设置的,Servlet一般不需要指定该状态码。对于其他状态码,可以使用HttpServletResponse接口中定义的setStatus()方法设置,该方法的格式为:
public void setStaus (int sc)
可以设置任意的状态码。参数sc表示要设置的状态码
对于404状态码,其消息为Not Found,所以HttpServletResponse接口中为该状态码定义的常量名为SC_NOT_FOUND。
2、在HTTP协议1.1版中定义了若干状态码,这些状态码是由3位整数表示的,一般分为5类
关于其他状态码的含义可以参阅参考文献[1]或
直接到http://www.w2.org/Protocols上查阅相关文档。
3、HTTP为常见的错误状态定义了状态码,这些错误状态包括:资源没有找到、资源被永久移动以及非授权访问等。
所有这些代码都在接口HttpServletResponse中作为常量定义。HttpServletResponse也提供了sendError()方法用来向客户发送状态码,该方法有两个重载的形式,如下所示:
public void sendError (int sc)
public void sendError (int sc, String msg)
第一个方法使用一个状态码,第二个方法同时指定显示消息。服务器在默认情况下创建一个HTML格式的响应页面,其中包含指定的错误消息。
如果为Web应用程序声明了错误页面,将优先返回错误页面。
例如,如果Servlet发现客户不应访问其结果,它将调用
sendError(HttpServletResponse.SC_UNAUTHORIZED)
第三章:Servlet容器模型
1、web应用程序
所谓Web应用程序是一种可以通过Web访问的应用程序。
一个Web应用程序是由完成特定任务的各种Web组件构成的并通过Web将服务展示给外界。
多个Servlet
多个JSP页面
HTML文件
图像文件等
2、应用服务器
Web 应用程序驻留在应用服务器上。
应用服务器为 Web 应用程序提供一种简单的和可管理的对系统资源的访问机制。
它也提供低级的服务,
如 HTTP 协议的实现
数据库连接管理。
Servlet 容器仅仅是应用服务器的一部分。
市场上可以得到多种Servlet容器,其中包括:
Apache 的Tomcat 、
Caucho Technology 的Resin、
Macromedia 的JRun、
JBoss
BEA 的WebLogic、
IBM 的WebSphere等。
其中有些如WebLogic、WebSphere不仅仅是Servlet容器,它们也提供对EJB(Enterprise JavaBeans)、JMS(Java Message Service)以及其他Java EE(Enterprise Edition)技术的支持。
3、Web应用程序的目录结构
名为bookstore的Web应用程序
├ webapps
├ bookstore
├ html (包含所有的HTML文件)
├ images (包含所有的GIF、JPEG和BMP图象文件)
├ javascripts (包含所有的*.js文件)
├ jsp (包含所有的JSP文件)
├ index.html (默认的欢迎文件)
├WEB-INF
├ classes(应用程序的类文件)
├ com
├mycompany
├ MyClass.class
├ lib(驱动程序包和标签库包文件)
├ *.jar(jdbcdriver.jar,mytaglib.jar)
├ web.xml(部署描述文件)
3、1. 理解文档根目录
假设服务器主机名为www.myserver.com,如果要访问bookstore Web应用程序根目录下的index.html 文件,应该使用下面的URL:
http://www.myserver.com/bookstore/index.html
要访问html目录中的/hello.html 文件,使用下面的URL:
http://www.myserver.com/bookstore/html/hello.html
3、2. 理解WEB-INF目录
(1)classes目录
(2)lib目录
(3)web.xml文件
在创建Web应用程序时,可能需要阻止用户访问一些特定资源而允许Servlet容器访问它们。为了保护这些资源,应将它们存储在WEB-INF目录中。
3、3. Web归档文件
扩展名为.war的Web归档文件(web archive),一般称为WAR文件。
创建一个WAR文件:使用Java的jar工具将bookstore目录打包:
jar –cvf bookstore.war *
3、4. 默认的Web应用程序
Tomcat服务器维护一个默认的Web应用程序。
<CATALINA_HOME>\webapps\ROOT目录被设置为默认的Web应用程序的文档根目录。
访问它的资源不需要指定应用程序的名称。例如,访问默认Web应用程序的URL为:
http://localhost:8080/
4部署描述文件
Web.xml
<?xml version="1.0" encoding="UTF-8" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name> Webapp Test </display-name>
<context-param>
<param-name>email</param-name>
<param-value>hacker@163.com</param-value>
</context-param>
<servlet>
<servlet-name>loginServlet</servlet-name>
<servlet-class>com.abc.LoginServlet</servlet-class>
<init-param>
<param-name>greeting</param-name>
<param-value>Good Morning</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>loginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>20</session-timeout>
</session-config>
</web-app>
4、1
DD文件是一个XML文件。
第一行指定了XML的版本及所使用的字符集。
下面所有的内容都包含在<web-app>和</web-app>元素中,它是DD文件的根元素
DD文件的模式定义:
下面的代码展示了在部署描述文件中<servlet>元素的一个典型的使用:
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>
com.myserver.HelloServlet
</servlet-class>
<init-param>
<param-name>email</param-name>
<param-value>hacker@163.com</param-value>
</init-param>
<init-param>
<param-name>limit</param-name>
<param-value>200</param-value>
<init-param>
<load-on-startup>2</load-on-startup>
</servlet>
4、2使用<servlet-mapping>元素
<servlet-mapping>元素用来定义一个映射,它为Servlet分配一个URL,客户使用该URL访问Servlet。。
<servlet-name>元素应该是使用<servlet>元素定义的Servlet名,而<url-pattern>可以包含要与该Servlet关联的模式字符串。下面是在DD文件中使用<servlet-mapping>元素的例子:
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/helloServlet/hello/*</url-pattern>
</servlet-mapping>
下面的URL就与上面的URL模式匹配:
http://www.myserver.com/mywebapp/helloServlet/hello/abc.jsp
1. URL的组成
协议与主机名 上下文路径 Servlet路径 路径信息 查询串
http://www.myserver.com /mywebapp/helloServlet/hello/abc.jsp?userName=Hacker
请求URI
2. <url-pattern>的三种形式
目录匹配:以斜杠“/”开头,以“/*”结尾的形式。例如:
/helloServlet/hello/*
扩展名匹配:以星号“*.”开始,后接一个扩展名
<servlet-mapping>
<servlet-name>pdfGeneratorServlet</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
精确匹配:所有其他字符串都作为精确匹配。
<servlet-mapping>
<servlet-name>reportServlet</servlet-name>
<url-pattern>/report</url-pattern>
</servlet-mapping>
- java web 第三天笔记
- java 第三天笔记
- java学习笔记--第三天
- Java学习第三天笔记
- JAVA学习第三天笔记
- 第三天java学习笔记
- Java Web 第三天 Servlet处理响应
- Java学习第三天笔记-补充
- Java基础班第三天笔记
- java自学笔记之循环 第三天
- java零基础入门笔记第三天
- 中软Java学习笔记第三天
- java自学笔记(第三天)
- web入门第三天
- web学习第三天
- web前端第三天
- 第三天:听课笔记
- HTML第三天笔记
- jsp默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
- VB & SQLServer 存储过程
- 登陆验证码(Servlet实现)
- 同步和异步的区别(转)
- 通过jstat、jmap对java程序进行性能调优
- java web 第三天笔记
- 叶念琛的爱情三部曲——感触!
- Android屏幕密度(Density)和分辨率的关系
- uboot系列之-----新增命令
- Taking a screenshot in XNA 4.0
- cocos2d-x初探学习笔记(30)2.1新特性之CCClippingNode
- ios开发笔记 – 1 – 类的声明
- GDAL使用DEM数据计算地形指数
- Makefile工程管理