servlet

来源:互联网 发布:人工智能 图书 编辑:程序博客网 时间:2024/06/05 17:43

   java编写的服务端程序,主要运行在服务端,就是运行在服务器端的Java类
servlet是对CGI程序的实现,CGI多进程处理操作,servlet多线程处理方式
servlet处理的基本流程:
    1、客户端(或者web浏览器)通过http提出请求
    2、WEB服务器接受http请求并发送给servlet,如果这个servlet未被加载,web服务器就将他加载到Java虚拟机并执行他。
    3、servlet接受http请求并执行某种处理
    4、servlet将结果返回给web服务器
    5、web服务器将接受到的结果返回给客户端
servlet接口定义了一个genericservlet的子类,一般不直接继承此类,而是选择genericservlet的子类继承,当采用http处理协议时,就采用继承子类httpservlet

如果要处理一个http请求,就要写一个servlet程序,就必须继承httpservlet
还要重写doget()
servlet的实现:
1、编写servlet源程序
2、建立web应用结构
3、编写web.xml
4、部署web应用
5、启动web服务器,运行servlet
建立项目写代码
package com.zxy.hello;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
// 继承HttpServlet
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 覆写doGet()方法
PrintWriter out = resp.getWriter(); // 准备输出
out.println("<html>"); // 输出html元素
out.println("<head><title>MLDNJAVA</title></head>");// 输出html元素
out.println("<body>"); // 输出html元素
out.println("<h1>HELLO WORLD</h1>"); // 输出html元素
out.println("</body>"); // 输出html元素
out.println("</html>"); // 输出html元素
out.close() ; // 关闭输出
}
}
eg:web.xml
<servlet-name>test1</servlet-name>
<servlet-class>zxy.hello.helloServlet</servlet-class>
<servlet-mapping>
<servlet-name>test1</servlet-name>
<url-pattern>/hello</url-pattern>        //页面的映射路径
将项目部署在tomcat下的webapps下
运行servlet
http://127.0.0.1:8080/项目名/url-pattern里面的内容
注意servlet涉及到的包javax.servlet 和javax.servlet.http ,这两个包在tomcat下servlet-api.jar下
Servlet本身已经属于JAVA EE的应用范畴

servlet的生命周期:是运行在服务端的一段Java程序,受web容器控制,所以其生命周期:

加载:web容器负责加载servlet,web容器启动时或者servlet初次使用时,web容器负责创建servlet实例,加载发那个是遍历web.xml的servlet,找到servlet的位置,加载成功后,web容器会通过反射的方式对servlet进行实例化。
初始化:servlet被加载后web会调用init()进行初始化这个对象,初始化的目的是servlet处理客户端的请求前完成一些准备工作,如果初始化失败将直接被卸载。
服务:当有请求提交,servlet就会调用servlet()方法(常用doget()dopost()),在servlet的方法中可以用servletrequest接收客户请求,也可以用servletresponse()设置响应信息
销毁:当web容器关闭或者检测到servlet要被删除,就会调用destroy()进行销毁,释放所占资源
卸载:调用destroy()的servlet就等待垃圾回收了,如需再次调用就使用init()方法初始化

涉及到的方法

public void init() throws ServletException

普通

Servlet初始化时调用

public void init(ServletConfig config) throws ServletException

普通

Servlet初始化时调用,可以通过ServletConfig读取配置信息

public abstract void service(ServletRequest req,ServletResponse res) throws ServletException,IOException

普通

Servlet服务,一般不会直接覆写此方法,而是使用doGet()或doPost()方法

public void destroy()

普通

Servlet销毁时调用

客户端通过浏览器发送web请求有7中,常用两种,get和post
post是html通过表单进行发送的包含各种组件Input textInputpasswordInputradio Input checkboxSelect单选、Select多选、Textarea Submit按钮、Reset
servlet取得请求中包含的提交参数数据方法:
String getParameter(String name)取得指定名称的参数,nameform表单元素的name属性值
String[] getParameterValues(String name)取得指定参数名称的数据数组,用于多值参数的情况。如复选框和复选列表等。如下代码取得复选框的选择数据
Enumeration getParameterNames()取得所有请求参数的名称

注意servlet还可以获取客户端的其他信息:
String getRemoteHost()取得请求客户的主机名
String getRemoteAddr()获取请求客户的ip地址
int getRemotePort()取得请求客户端的端口号
String getProtocol()取得请求协议
获取服务器的信息
String getserverName()获取服务器的名
String getserverPort()获取服务器的接收端口

关于session和cookie
每一个用户与服务器交互的时候都会产生数据(用户的购买付款等行为),web开发中这类数据的保存通常在session或者cookie中
浏览器从打开到关闭的一系列过程叫会话 
cookie是什么?
是web服务器客户端上的文本文件,把每个用户的数据以cookie的形式写给用户各自的浏览器,再次访问服务器的web资源时就会带着各自的数据了。
cookie是解决浏览器用户与web服务端无状态通信的问题,即保存用户数据
关于cookie的用于创建一个cookie对象
对象cookie(String name,string value)
response定义了addcookie()用于将cookie发送到客户端
resquest定义了getcookies()获取客户端提交的cookie
cookie类的方法,getname()setvalue()getvalue()setmaxage()getmaxage()
”记住我/最近浏览的宝贝“就是用cookie实现的

关于cookie的生存周期
  浏览器一般只允许存放300个 cookie,每个限制4kb
  cookie在个人硬盘明文存储无加密
  cookie发送给浏览器是默认会话级别的(退出浏览器就会被删除)
若希望保存cookie,可以调用setMaxage()设置保存最大有效期,可将cookie保存在客户端硬盘

关于传值
   url重写:url地址直接附加请求参数,将客户端数据传递到服务端,web服务器通过httpservletRequest获取参数

<a href=“…/test/testServlet? userid=1& name=zhangsan“>用户管理</a>

 其中URL与参数之间用?分隔,参数名和参数值之间用=连接,多个参数之间用&分隔
 通过request.getParameter(“参数名”);来获得参数值
URL重写的缺点
 URL地址太长、长度有限制、安全性差
表单传值:
  <form action=“../test/testServlet” method=“post”>
 会话数据放在隐藏表单元素中,随着表单的提交而发送到web服务器,服务器使用请求对象的方法获得数据


关于session和servlet
    session是服务器端技术,服务器在运行时可以为每个浏览器用户创建独享的session对象,由于session独享,所以用户在访问浏览器的web资源时可以把各自的数据放在各自的session中,当用户再次访问其他web资源时,其他资源再从用户各自的session中取出数据为用户服务,为了数据共享
session和cookie的区别:
session是将数据存于服务器,cookie是将数据存于浏览器
session是服务器创建的可以调用request对象的getsession方法获取session对象
关于session的api
创建session:     
通过request对象创建session
public HttpSession getSession()
返回的是一个HttpSession对象
设置session的值:
       session.setAttribute("name“,”value“)//创建
       session.getattribute("name")//获取session
       session.getid()获取session的id
       public void invalidate() 使session失效
public boolean isNew()判断session是不是第一次创建
  session的生命周期:第一次创建网站执行getsession()时到默认30分钟的销毁时间结束(即使没有关闭浏览器也会销毁,但可设置失效时间)
session基于cookie
第一次访问服务器,session会将sessionid复制给cookie,还会把url重写加sessionid,第二次访问只要cookie没被禁用就可使用

servlet的配置对象:servletconfig

重写init(),init()执行,就可在里面获取servletconfig对象,所以一个servlet对应一个servletconfig,不同servlet之间不可共享

servletconfig相当于servlet的后备军:


servlet的配置文件中<init-param>标签中是servlet的初始化参数,web容器在建立servlet的时候会将初始化的参数封装在servletconfig对象中,
在执行init()方法时会将serletconfig对象传给servlet.所以通过servletconfig就可得到当前servlet的初始化信息。

取得指定servlet配置参数
public java.lang.StringgetInitParameter(java.lang.String name) 
获 取得所有servlet初始化参数

publicjava.util.EnumerationgetInitParameterNames() 

   获取servlet配置的名称  

publicjava.lang.String getServletName() 

取得ServletContext对象

public ServletContext getServletContext() 

web的应用对象servletContext

将web应用部署到服务器上,启动web服务器后,web容器为每个web应用创建一个表达web应用环境的对象也即ServletContext对象,并将web应用的基本信息存储在这个ServletContext对象中,所有web组件都可以访问此ServletContext对象,进而取得web应用的基本信息。
ServletContext对象还可以作为整个web应用的共享容器对象,可以被所有会话请求公用,保存web应用的共享信息。
Web应用对象的获取
方式一:ServletConfig对象中维护类ServletContext对象的引用,所以可以通过ServletConfig.getServletContext方法获取ServletContext对象;
Servletcontext contest=this.GetServletConfig().getServletContext();
方式二:调用servlet的getServletContext方法得到其对象
ServletContext context  =this.getServletContext();
ServletContext对象的生命周期比request、response、session的生命周期都长,它的生命周期与web应用的相同。
ServletContext对象的创建
 当web应用启动后,ServletContext对象被web容器自动创建,生命周期开始。
 在web应用运行期间,此对象一直保留在web服务器的内存中,所有web组件都可以随时访问此对象,进行数据的读取和存储
ServletContext对象的销毁。
停止服务器、从服务器中删除Web应用,web容器自动销毁ServletContext对象
操作Web级应用的内容
 将对象保存到ServletContext中

publicvoid setAttribute(java.lang.String name,java.lang.Object object) 

 从ServletContext中获取指定名称的属性对象

publicjava.lang.Object getAttribute(java.lang.String name) 

 将指定的属性从ServletContext中移除

publicvoid removeAttribute(java.lang.String name)

取得所有属性的名称列表

publicjava.util.Enumeration getServletNames() 

web.xml文件中web级应用的配置

 <context-param>

  <param-name>name</param-name>

    <param-value>root</param-value>

  </context-param>





     







3 0
原创粉丝点击