Servlet

标题@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处理基本流程

  1. 客户端通过HTTP提出请求
  2. WEB服务器接收该请求,将其发送给Servlet容器,若此Servlet尚未被加载,WEB服务器将它加载到Java虚拟机并且执行它
  3. Servlet程序将接收该HTTP请求并执行某种处理
  4. Servlet会几个处理后的结果向WEB服务器返回应答
  5. 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文件
input表单页面 请输入 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200414163635972.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpa2ViaWRpdQ==,size_16,color_FFFFFF,t_70)

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类,也就是说多个线程在使用这个实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值