servlet服务开发

一. Servlet基础概念
ServletAPI是SUN用于生成动态Web内容的一组API;可以通过创建一个Servlet对象用于在Servlet容器上创建Web内容。在创建一个 Java servlet 时,一般需要子类 HttpServlet。该类中的方法允许您访问请求和响应包装器(wrapper),您可以用这个包装器来处理请求和创建响应。
当然,HTTP 协议不是特定于 Java 的。它只是一个规范,定义服务请求和响应的大致式样。Java servlet 类将那些低层的结构包装在 Java 类中,这些类所包含的便利方法使其在 Java 语言环境中更易于处理。正如您正使用的特定 servlet 容器的配置文件中所定义的,当用户通过 URL 发出一个请求时,这些 Java servlet 类就将之转换成一个 HttpServletRequest,并发送给 URL 所指向的目标。当服务器端完成其工作时,Java 运行时环境(Java Runtime Environment)就将结果包装在一个 httpServletResponse 中,然后将原 HTTP 响应送回给发出该请求的客户机。在与 Web 应用程序进行交互时,通常会发出多个请求并获得多个响应。所有这些都是在一个会话语境中,Java 语言将之包装在一个 HttpSession 对象中。在处理响应时,您可以访问该对象,并在创建响应时向其添加事件。它提供了一些跨请求的语境。
Serlvet不能独立运行,它必须在一个符合JavaEE规范的Servlet容器中能过容器的调用处理业务。常用的商业容器有websphere、webLogic;开源的如Tomcat是最为常用的,以后我们的应用皆以Tomcat为例。在开发Servlet应用前,首先需要安装配置Tomcat服务器。
二.下载安装Tomcat服务器,登陆http://www.apache.org 下载Tomcat,解压后即可使用
三 Servlet开发与配置
1.在MyEclipse中创建javaWeb项目
首先,我们在EC中创建一个javaWeb项目配置项目名字和Web应用名字
2.创建Servlet类:
3.编写Servlet代码
4.打包布署到Tomcat上
5.使用命令行打包web应用
6.配置MyEclipse与Tomcat的集成环境
7.Servlet路径配置详解
当我们创建Servlet完成后,会在webRoot/web-inf目录下的Web.xml文件中自动生成这个servlet的配置:
这个web.xml称为web布署描述文件,它是固定在web-inf目录下,每一个web项目中都必须有这样一个文件;我们创建的一个web项目,又称做web应用程序,这个应用程序在ec中默认布署到tomcat中的名字就是项目名字,要请求这个webApp中任何一个资源,URL路径都必须是以http://Hostname:port/netjavaWeb/开头。
Web.xml中<servlet>和<servlet-mapping>元素说明了客户端(页面)请求的servlet的路径
其中<servlet>元素中的名字和<servlet-mapping>中的名字必须一一对应,即其中的<servlet-name>必须相同,这样,请求<usr-pattern>中配置的url时,才会找到这个servlet;<description>和<display-name>元素不是必须的。<url-pattern>元素限定的名字定义了客户端请求的地址,我们可以将它改成应用需要的格式
Servlet配置非常重要的一个特性就是支持模糊配置:<usr-pattern>中的值可以用*做模糊配置,注意的是,一但加了*号,就不能加上/,否则webApp就无法成功布署!
四.Servlet与客户端交互
1.接收客户端请求参数
客户端发送请求时,可以是一个form提交时的参数,也可以是一个链结发送上来的参数,servlet 容器把请求参数作为一组“名-值”对存储。HttpServletResponse可以获取的参数有三种:
public String getParameter(String name);
public java.lang.String[] getParameterValues(String name);
public java.util.Enumeration getParameterNames();
getParameter(String name) 方法返回指定参数的单值。对于有多个值的参数,要使用 getParameterValues() 方法。当参数值未知时,getParameterNames() 方法是有用的;它把所有参数名作为 Enumeration 对象返回,可通过佚代这个对象,得到所有参数名字,再通过getParameter(String name) 方法得到参数值。
2.获取客户端请求HTTP头
HTTP 请求头可以使用 HttpServletRequest 接口的下面方法获取:
public String getHeader(String name);
public java.util.Enumeration getHeaders(String name);
public java.util.Enumeration getHeaderNames();
3.在web.xml中配置Servlet运行时参数
servlet可以直接访问其在web.xml中配置的参数,这些参数也是以名值对的方式出现;getInitParameter(String name)传入参数名,得到配置的值;这个方法是从servlet父类继承而来的,可以在我们的servlet中直接调用。
配置好后,就可以在对应的Servlet中取得这些初始化配置参数:
4.设置Servlet的响应属性
ServletResponse 接口的下面方法可用于设置发送回客户机的响应。
public void setContentType(String type);
该方法设置发送回客户机的响应的内容类型。默认值是“text/html”,我们还应加上charset=GBK表示输出为中文格式编码。
getWriter() 方法返回一个 PrintWriter 对象,该对象可以把字符文本发送给客户机。getOutputStream() 方法返回一个 ServletOutputStream ,它适合于在响应中写入二进制数据。这两个方法中的任何一个可用于写响应,但二者都使用是不可以的。
设置响应头
响应头向浏览器提供了有关接收到的响应的附加信息。头信息是作为“名-值”对存储的。HttpServletResponse 接口的下面方法可用于设置头信息。
public void setHeader(String name, String value);
public void setIntHeader(String name, int value);
public void setDateHeader(String name, long value);
重定向请求
可以发送临时重定向消息给浏览器,该消息会把浏览器引导到另一个 URL。HttpServletResponse 接口提供了这个方法。
public void sendRedirect( String location );
该方法可以接受一个 URL地址串,调用后,客户端浏览器将会重新发起一次请求,指向所传入的这个URL地址;这个方法不能在Servlet输出流调用后调用,否则就抛出 IllegalStateException。
5.HttpServlet中接收客户端请求的方法
当客户机将请求发送到服务器时,服务器将请求包装为一个Request和一个Response对象,并调用对应的 servlet中的方法,如果客户机是get方法请求,就会调用Servlet的doGet方法,依此类推。
6.servlet的请求转发详解
Servlet可以将发送给自己的某个请求转发给另外一个URL地址,这个地址可以是html、jsp、Servlet或是其它http地址。Servlet中的请求转发有三种方式,主要是通过HttpServletRequest对象和HttpServletResponse对象实现,如下代码片段说明:
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
1. request.getRequestDispatcher("/url").include(request, response);
2. request.getRequestDispatcher("/url").forward(request, response);
3. response.sendRedirect("/url");
}
7.会话管理
①servlet 可以在三个不同的作用域存储数据:Request对象、Session对象和getServletContext()方法返回的servletContext对象中保存,数据是作为键值对存储的,其中键是一个 String 对象,值是任何对象。这些数据对象称为属性。 这三者都提供了对于属性操作相同的方法:
public java.lang.Object getAttribute(String name)

public void setAttribute(String name, Object object)
public void removeAttribute(String name)

这三者对象中保存的键值的区别是做用域不同
对象 说明
ServletRequest 保存的键值仅在下一个request对象中可以得到,常用做在转发请求时共享数据;
Session 做用域是一个用户会话范围,从session第一次创建直到Session因超时或客户端关闭之前,数据会一直存在;Session常用做存入某个用户相关的数据对象。
servletContext 代表了servlet环境的上下文,只要某个web应用在启动中,这个对象就一直有效,所以它是数据存活范围(时间)最大的一个;常用存放Web应用程序全局性的数据,例如登记服务器在线人数的数据,可以保存到这个对象中。
②.session深入理解
HTTP 作为无状态协议,具有自己的缺点。每个客户机请求被当成独立的事务。在 Web 应用程序中,让服务器跨多个请求记住客户机状态变得有必要。通过维护客户机服务器交互,使这变为可能。当用户首先向站点发出请求时,会创建一个新会话对 象,并分配一个惟一会话 ID 给它。然后会话 ID 作为每个请求的一部分传递,它把用户与会话对象匹配起来。servlet 可以在会话对象中添加属性,或者读取存储的属性值。
会话跟踪让 servlet 能够跨多个请求维护状态和用户信息。servlet 容器使用 HttpSession 接口,在 HTTP 客户机和服务器之间创建会话。
要获取会话,可以使用 HttpServletRequest 接口的 getSession() 方法:
session 对象也可以储存或取得用户相关的数据
③.在session中存储和获取会话对象
Session 对象类似与一个Map对象,其中存放的数据是名值对,所有的名字都是String类型,值是Object类型,它有如下方法用于添加、获取和删除 Java 对象:
//在sesson放入关联指定名字的对象
public void setAttribute(String name, Object value);
//取得指定名字的对象
public Object getAttribute(String name);
//移除指定名字的对象
public void removeAttribute(String name);
④.会话超时与无效
会话可能由于在服务器端超时而自动无效---例如客户机过了在半小时里没发送任何请求;也可以调用其invalidate()显式地结束会话。当会话终止时,会话对象及存储在它当中的信息永久丢失。
会话的超时设置可以在得到的session对象上调用setMaxInactiveInterval(int seconds)方法传入一个以秒为单位的值设置超时时间,如果传入的是0或负值,只要服务器启动,会话就不会消失。
也可以在web.xml中设置会话的时间周期,在<session-timeout> 元素为 Web 应用程序中创建的所有会话,定义了默认会话超时间隔(以分种为单位)。负值或零值导致会话从不过期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值