首页 > 其他分享 >servlet

servlet

时间:2024-08-31 13:23:30浏览次数:12  
标签:servlet Override import Servlet public out

Servlet

Servlet是Java web 开发的基石,与平台无关的服务器组件(操作系统),它运行在Servlet容器/web应用服务器/Tomcat中,负责与客户端通信

Servlet的功能

1.创建并返回基于客户请求的动态 HTML 页面

2.可以与数据库进行通信

Servlet的使用

Servlet本身是一种接口,存在与Javax.servlet,自定义一个类,实现servlet接口

这个类就具备了接受客户端请求以及做出响应的功能

servlet不能直接访问,但是index.jsp可以直接访问

是因为在编辑配置后编译时,生成一个out文件;out文件将编译的文件提供给Tomcat加载运行,而设置工件时,会给tomcat提供一个目录,而index.jsp文件就在这个目录之下,而servlet文件在下级目录,所以不能直接访问。

当在浏览器输入url时填写out文件下servlet文件路径还是不能直接访问,是因为权限不够。

解决方法:

1.通过映射,在web.WEB-INF.web.xml文件中进行配置

   <servlet>
         <servlet-name>MyServlet</servlet-name>
         <servlet-class>com.southwind.servlet.MyServlet</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>MyServlet</servlet-name>
         <url-pattern>/myservlet</url-pattern>
     </servlet-mapping>

通过name进行关联,

2.基于注解的方式

直接在servlet文件中写

 package com.southwind.servlet;
 ​
 import javax.jws.WebService;
 import javax.servlet.*;
 import javax.servlet.annotation.WebServlet;
 import javax.swing.text.html.HTML;
 import java.io.IOException;
 @WebServlet("/demo1")
 public class MyServlet implements Servlet {
     @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 //初始化
     }
 ​
     @Override
     public ServletConfig getServletConfig() {
 //        反映一个对象 用来获取servlet本身信息的
         return null;
     }
 ​
     @Override
     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
 //  处理客户端信息的
         System.out.println("lllll");
 //       通过url请求传参(?key-values)
 //        接收信息
       String id =  servletRequest.getParameter("id");
 ​
 //        设置响应类型
         servletResponse.setContentType("text/html;charset=utf-8");
 //        响应返回一句话
         servletResponse.getWriter().write("hello");
 ​
         servletResponse.getWriter().write("你好");
 ​
     }
 ​
     @Override
     public String getServletInfo() {
 //        返回字符串信息
         return null;
     }
 ​
     @Override
     public void destroy() {
 //    卸载销毁
     }
 }
 ​

互联网简单通信

 import javax.servlet.*;
 import javax.swing.text.html.HTML;
 import java.io.IOException;
 ​
 public class MyServlet implements Servlet {
     @Override
     public void init(ServletConfig servletConfig) throws ServletException {
 //初始化
     }
 ​
     @Override
     public ServletConfig getServletConfig() {
 //        反映一个对象 用来获取servlet本身信息的
         return null;
     }
 ​
     @Override
     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
 //  处理客户端信息的
         System.out.println("lllll");
 //       通过url请求传参(?key-values)
 //        接收信息
       String id =  servletRequest.getParameter("id");
       
 //        设置响应类型
     servletResponse.setContentType("text/html;charset=utf-8");
 //        响应返回一句话
         servletResponse.getWriter().write("hello");
 ​
         servletResponse.getWriter().write("你好");
 ​
     }
 ​
     @Override
     public String getServletInfo() {
 //        返回字符串信息
         return null;
     }
 ​
     @Override
     public void destroy() {
 //    卸载销毁
     }
 }
 ​

Servlet的生命周期

有垃圾回收机制

init创建,service服务,destroy 销毁

只创建一个对象反复调用(减少开销)

当程序关闭时执行destory,销毁对象

非静态方法调用方法必须创建对象,而上述代码没有创建对象

上述代码的对象是由Tomcat容器完成,并且是通过反射机制完成。

所以在配置web.xml时使用全类名

反射创建对象一般是调用无参构造器,

 package com.southwind.servlet;
 ​
 import javax.servlet.*;
 import javax.servlet.annotation.WebServlet;
 import java.io.IOException;
 @WebServlet("/demo2")
 public class HelloServleet implements Servlet {
     public HelloServleet () {
         //无参构造器
         System.out.println("创建Servlet");
     }
     @Override
     public void init(ServletConfig servletConfig) throws ServletException {
         System.out.println("初始化");
     }
 ​
     @Override
     public ServletConfig getServletConfig() {
         return null;
     }
 ​
     @Override
     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
         System.out.println("实现方法");
     }
 ​
     @Override
     public String getServletInfo() {
         return null;
     }
 ​
     @Override
     public void destroy() {
         System.out.println("释放方法");
     }
 }
 ​

因为java是面向对象的,所以使用方法时必须有对象,当自己不需要创建对象时,一定是程序自己创建一个对象

反射机制创建对象

 package com.southwind.servlet;
 ​
 import java.lang.reflect.Constructor;
 ​
 public class TomcatTest {
     public static void main(String[] args) {//shrows ClassCastException抛出异常
 //                                            不建议抛出,因为异常是抛出给上一级或者虚拟机
 //                                            会造成上述机制压力过大
         String str = "com.southwind.servlet.HelloServleet";
 //        通过反射机制创建对象
 //        通过运行实类,
 //        程序启动,对象的创建都是动态的,类都是来自于静态文件的,虚拟机内存结构
 //        class就是运行实类
         try {
             //因为class类可能不存在,所以要处理异常
             Class clazz = Class.forName(str);
 //          因为它是运行实类,所以可以拿到类的信息
 //            获取构造函数
             Constructor constructor = clazz.getConstructor();
             System.out.println(constructor);
             Object o = constructor.newInstance();
             System.out.println(o);
 //            getconstructor获取构造器,()里不填内容获取无参,
 //            这里抛出异常可能不存在这个方法 constructor构造器
         } catch (Exception e) {//实际上是多态的体现
             e.printStackTrace();//print stack trace 打印跟踪信息
         }
 //        可以简化写法,直接使用父类
 //        catch (ClassNotFoundException e) {
 //            e.printStackTrace();
 //        } catch (NoSuchMethodException e){
 //            e.printStackTrace();
 //        }
         //捕获异常
     }
 }
 ​

ServletConfig

该接口使用来描述Servlert的基本信息的

getServletName 返回Servlet名称,全类名包含包名

getInitParameter 获取init参数的值 (web.xml)

getInitParameterNames 以集合的形式返回所有的intparameter值

通过遍历的方式

getservletcontext 返回servletcontext的上下文,整个servletcontext的管理者信息

使用方法getcontextpath 获取当前应用的名称

方法getserverinfo获取服务器信息

servletconfig与servletcontext的区别

servletconfig作用于某个servlet实例,每个对象都有一个servletconfig

servletcontext作用于整个web应用,一个web对应一个servletcontext,

servlet的层次结构

1.servlet是最顶端的接口

2.GenericServlet

3.HttpServlet

只需要继承httpservlet在开发过程中

HTTP 请求有很多类型

常用的有四种:1.get 读取2.post 保存 3.put 修改 4.delete 删除

RESTful架构会用这四种,

  • GenericServlet 实现 Servlet 接口,同时为它的子类屏蔽了不常用的方法,子类只需要重写 service 方法即可。

  • HttpServlet 继承 GenericServlet,根据请求类型进行分发处理,GET 请求进入 doGet 方法,POST 请求进入 doPost 方法。

  • 开发者自定义的 Servlet 类只需要继承 HttpServlet 即可,重新实现 doGetdoPost 方法。

标签:servlet,Override,import,Servlet,public,out
From: https://blog.csdn.net/y123916/article/details/141649268

相关文章

  • 记Spring HTTP Invoker远程调用的使用(二)基于Servlet方式,配置servlet映射url-pattern实
    目录前言一、概念二、代码实现1.服务端实现2.客户端实现前言本篇接上一篇记SpringHTTPInvoker远程调用的使用(一)基于Url映射方式,DispatcherServlet统一处理实现-CSDN博客https://blog.csdn.net/u011529483/article/details/141678510?spm=1001.2014.3001.5501之......
  • Servlet技术详解
    JavaEE简介什么是JavaEEJavaEE(JavaEnterpriseEdition),Java企业版,是一个用于企业级web开发平台,它是一组Specification。最早由Sun公司定制并发布,后由Oracle负责维护。在JavaEE平台规范了在开发企业级web应用中的技术标准。在JavaEE平台共包含了13个技术规范(随着JavaEE版......
  • JSP基于servlet技术实现游戏娱乐平台55c2v
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoot,Spring技术主数据库使用MySQL开题报告内容一、项目背景随着互联网技术的飞速......
  • 基于jsp+servlet的部门管理系统
    基于jsp+servlet的部门管理系统1、项目介绍部门管理系统分位部门管理和岗位管理两个模块,管理员可以对部门和岗位进行新增,修改,删除等操作。该项目简单易懂,非常适合初学者。2、项目技术后端:JavaServlet数据库:MySQL前端:jsp、JavaScript、css、jQuery、ajax3、......
  • Servlet总结
    Serevlet一、概念Servlet(ServerApplet)是JavaServlet的简称,称为小服务程序或服务连接器,泛指用 Java编写的服务器端程序。在编程过程中也指一切 实现了Servlet接口的类(约定以Servlet结尾命名)。二、使用在src.com.qf.servlet包中创建Servlet01类extendHttpServlet,重写......
  • ServletContextListener监听常用场景
    ServletContextListener是JavaEE中的一个接口,用于监听ServletContext生命周期的变化。通过实现这个接口,你可以在Web应用启动或关闭时执行一些初始化或清理操作。ServletContextListener是JavaWeb开发中一种重要的监听器,它用于监听ServletContext对象的创建和......
  • DispatcherServlet
    DispatcherServlet是SpringMVC框架中的核心组件之一,它扮演着前端控制器的角色。在SpringMVC架构中,所有的HTTP请求都会首先到达DispatcherServlet,然后由它分发到合适的处理器进行处理。下面是一些关于DispatcherServlet的关键点:入口点:每当一个HTTP请求到达Web应......
  • HttpServletResponse response和HttpServletRequest request什么区别作用是什么
    HttpServletRequest和HttpServletResponse是JavaServletAPI中的两个核心接口,它们分别代表HTTP请求和HTTP响应。这两个对象在处理Web请求时扮演着不同但互补的角色:HttpServletRequest作用:表示客户端发送到服务器的HTTP请求。提供了访问请求参数、headers、cookies......
  • JavaWeb中的Tomcat,Servlet详解
    JavaWebJavaWeb技术主要包括服务器技术(后端),如Tomcat,Servlet,JSP等待,以及客户端技术(前端)如HTML,CSS,JavaScript等等Web服务器Web服务器主要负责处理客户端发出的HTTP请求,并做出相应回应Web服务器:安装了服务器软件的计算机,只用于复杂处理请求,发出相应Web服务器......
  • JavaWeb中Servlet过滤器的应用即防跳墙的添加
    原理:在Servlet和mybatis的基础环境上使用过滤器(对上篇学生管理系统的进一步完善)也是使用session进行判断和控制页面的跳转一、过滤器的基本概念: Servlet过滤器:  从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求......