欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > servlet

servlet

2025/12/30 17:34:17 来源:https://blog.csdn.net/y123916/article/details/141649268  浏览:    关键词:servlet

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 {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {//初始化}​@Overridepublic ServletConfig getServletConfig() {//        反映一个对象 用来获取servlet本身信息的return null;}​@Overridepublic 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("你好");​}​@Overridepublic String getServletInfo() {//        返回字符串信息return null;}​@Overridepublic void destroy() {//    卸载销毁}}​

互联网简单通信

 import javax.servlet.*;import javax.swing.text.html.HTML;import java.io.IOException;​public class MyServlet implements Servlet {@Overridepublic void init(ServletConfig servletConfig) throws ServletException {//初始化}​@Overridepublic ServletConfig getServletConfig() {//        反映一个对象 用来获取servlet本身信息的return null;}​@Overridepublic 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("你好");​}​@Overridepublic String getServletInfo() {//        返回字符串信息return null;}​@Overridepublic 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");}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("初始化");}​@Overridepublic ServletConfig getServletConfig() {return null;}​@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("实现方法");}​@Overridepublic String getServletInfo() {return null;}​@Overridepublic 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 方法。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词