标题@servlet
Servlet
Servlet是Java语言编写的运行在服务器端的小应用程序,用来完成B/S架构下,客户端请求的响应处理
沿用了Java语言特点,平台独立,性能优良,能以线程方式运行
Servlet API 为Servlet提供了统一的编程接口
Servlet一般在容器终于运行,Servlet容器负责Servlet和客户通信以及调用Servlet方法
Servlet和客户通信采用“请求/响应”的模式,通常通过HTTP协议工作
Servlet与Jsp
所有jsp程序在执行时都被编译转变为Servlet
Servlet与jsp配合开发大型Web应用程序,Servlet处理业务逻辑,jsp页面展现
Servlet多线程机制,可同时处理多个请求,不必每个请求都启动一个进程
Servlet处理基本流程
- 客户端通过HTTP提出请求
- WEB服务器接收该请求,将其发送给Servlet容器,若此Servlet尚未被加载,WEB服务器将它加载到Java虚拟机并且执行它
- Servlet程序将接收该HTTP请求并执行某种处理
- Servlet会几个处理后的结果向WEB服务器返回应答
- WEB服务器将从Servlet收到的应答发回给客户端
Servlet容器为JavaWeb应用提供运行时环境,它负责管理Servlet和jsp的生命周期,以及管理它们的共享数据
Servlet容器也称为JavaWeb应用容器或者Servlet/jsp容器,目前流行的包括tomcat、J2EE服务器
Servlet程序实现
Servlet程序编写
JCreator中编写Servlet程序
package com.org;
import java.io.*;
import javax.servlet.*;//属于JavaEE扩展包
import javax.servlet.http.*;//属于JavaEE扩展包
//JavaEE扩展包Tomcat中自带,二者可在配置中JDK配置文件选中编辑添加存档Tomcat中自带的lib目录下sevlet-api.jar包
public class HelloServlet extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
PrintWriter out=resp.getWriter();
out.println("<html><head><title>FristServlet</title><head>");
out.println("<body><h1>Hello World<h1></body><html>");
out.close();
}
}
//生成程序所对应的class文件,需部署在Tomcat服务器中,web.xml配置
//用户输入地址对于servlet程序,等于get请求
//HttpServlet中除doGet()还有其他方法如:doPost(),doPut(),doDelete(),init and destory(),getServletInfo()
Tomcat中webapps中新建HelloServlet,在其中新建WEB-INF(classes和web.xml)
web.xml中配置
hello
com.org.HelloServlet
hello
/helloServlet //访问路径
eclipse中
Servlet2.x版本中Servlet配置在web.xml中完成
Servlet3.x版本中Servlet配置在程序中通过注解来完成
Servlet与表单
Servlet响应
通过response对象用户进行响应
创建输出流对象 PrintWriter out=response getWriter();
使用out对象响应用户 out.printer(“这是通过Servlet响应用户的信息”);
Servlet获取客户端参数
通过request对象获取请求信息
String getParameter(String name)
String[] getParameterValues(String name)
package com.org;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InputServlet extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException{
String info=req.getParameter("info");//获取客户端参数
PrintWriter out=resp.getWriter();
out.println("<html>");
out.println("<head><title>接收表单输入</title></head>");
out.println("<body>");
out.println("<h1>"+info+"</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}
}
仍需在web.xml配置
input
com.org.InputServlet
input
/inputServlet //访问路径
客户端请求方式
GET(数据量少,安全性不高,速度快)
- 以查询字符串方式附在统一资源地址后面
- 查询串可在客户浏览器上显示
- 默认表单请求方式
POST(数据量大,安全性要求高) - 通过单独套接字李连杰发送包数据
- 完整的事务对客户不可见
- 与get方法相比较慢
input.html文件
Servlet生命周期
生命周期受到Web容器的控制,生命周期包括:
加载程序、初始化、服务、销毁、卸载五部分
package com.org.servlet;
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
public class LifeCycleServlet extends HttpServlet{
public LifeCycleServlet(){
System.out.println("1、 servle实例化---构造方法调用");
}
public void init() throws ServletException{
System.out.println("2、初始化servlet---init()");
}
/*public void service(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
System.out.println("3、服务方法 servlet---service()");
}*/
public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
System.out.println("3、服务方法 servlet---doGet()");
}
public void destroy(){
System.out.println("4、 销毁 servlet destroy()");
try{
Thread.sleep(3000);
}catch(InterruptedException e){
}
}
}
当用户第一次请求一个Servlet,会调用对应的init方法进行初始化,调用提供服务的service服务doGet或doPost
刷新页面,init不在调用(只调用一次),直接调用service(刷新一次,调用一次)
容器关闭自动调用destroy方法
若在类内重写了service方法则不再调用doGet或doPost
当客户端第一次请求某个Servlet时,Servlet容器会根据web.xml配置文件实例化这个Servlet类。当有新客户端请求该Servlet时,不会再实例化该Servlet类,也就是说多个线程在使用这个实例