Java Web通用的servlet 的创建,服务的向客户端发送,服务端处理请求的几种方式以及,创建一个通用的Servlet,减少Servlet的数量

throws ServletException, IOException {

// 获取客户端提交服务端的method对应的值

String md = request.getParameter(“method”);

System.out.println(md);

//定义,功能执行完毕之后要转发的路径

String path = null;

// 通过判断md当中不同的内容来决定本次的功能

if (“addStu”.equals(md)) {

path = addStu(request, response);

} else if (“delStu”.equals(md)) {

path = delStu(request, response);

} else if (“checkStu”.equals(md)) {

path = checkStu(request, response);

} else if (“”.equals(md)) {

}

if (null != path) {

//服务端的一个转发

request.getRequestDispatcher(path).forward(request, response);

}

}

protected String addStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端添加学生”);

// 转发

return “/test.html”;

}

protected String delStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端删除学生”);

// 转发

return “/test.html”;

}

protected String checkStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端检查学生”);

// 转发

response.getWriter().println(“DDDDDDD”);//将DDDD发送到客户端

return null;

}

}

演示Servlet第二种获取到客户端的数据并对其进处理

再次新建一个index2.html

Insert title here

用户:

提交


删除学生

按钮

再次新建一个ServletDemo02

在这里插入图片描述

采用反射的方式获取到不同的方法简化Servlet的复杂度

package cn.itzheng.servlet;

import java.io.IOException;

//引入method反射下面的包

import java.lang.reflect.Method;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class ServletDemo02

*/

public class ServletDemo02 extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

// 获取客户端提交服务端的method对应的值

String md = request.getParameter(“method”);

System.out.println(md);

// 定义,功能执行完毕之后要转发的路径

String path = null;

// 通过判断md当中不同的内容来决定本次的功能

// 获取到当前字节码对象(ServletDemo02.class在内存当中形成对象)

Class clazz = this.getClass();

try {

// 获取clazz上名称为md的方法(由传入的md来决定获取到那个方法)

Method method = clazz.getMethod(md, HttpServletRequest.class, HttpServletResponse.class);

if (null != method) {

//调用找到的方法

path = (String) method.invoke(this, request, response);// 执行当前(this)对象的方法

}

if (null != path) {

// 服务端的一个转发

request.getRequestDispatcher(path).forward(request, response);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public String addStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端添加学生”);

// 转发

return “/test.html”;

}

public String delStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端删除学生”);

// 转发

return “/test.html”;

}

public String checkStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端检查学生”);

// 转发

response.getWriter().println(“DDDDDDD”);// 将DDDD发送到客户端

return null;

}

}

如果需要增加功能还需要该动代码所以需要抽取一个公共类

需要新建一个Servlet的公共类

BaseServlet

在这里插入图片描述

package cn.itzheng.servlet;

import java.io.IOException;

import java.lang.reflect.Method;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class BaseServlet extends HttpServlet {

// 重写HttpServletservice方法

@Override

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取客户端提交服务端的method对应的值

String md = request.getParameter(“method”);

System.out.println(md);

// 定义,功能执行完毕之后要转发的路径

String path = null;

// 通过判断md当中不同的内容来决定本次的功能

// 获取到当前字节码对象(ServletDemo02.class在内存当中形成对象)

Class clazz = this.getClass();

try {

// 获取clazz上名称为md的方法(由传入的md来决定获取到那个方法)

Method method = clazz.getMethod(md, HttpServletRequest.class, HttpServletResponse.class);

if (null != method) {

// 调用找到的方法

path = (String) method.invoke(this, request, response);// 执行当前(this)对象的方法

}

if (null != path) {

// 服务端的一个转发

request.getRequestDispatcher(path).forward(request, response);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

新建一个ServletDemo03用来继承BaseDemo

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁

一旦请求发往ServletDemo03之后ServletDemo03会被初始化然后调用init方法-----》然后运行service

ServletDemo03会自动向上的父类找对应的init方法和service方法

package cn.itzheng.servlet;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class ServletDemo03

*/

public class ServletDemo03 extends BaseServlet {

//当请求进入到这里时会调用其无参构造函数

/*

  • Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁

*/

public ServletDemo03() {

System.out.println(“无参构造函数”);

//会调用父类的init方法,来初始化子类的

//然后会调用父类的service方法

}

public String addStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端添加学生”);

// 转发

return “/test.html”;

}

public String delStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端删除学生”);

// 转发

return “/test.html”;

}

public String checkStu(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

System.out.println(“向服务端检查学生”);

// 转发

response.getWriter().println(“DDDDDDD”);// 将DDDD发送到客户端

return null;

}

}

新建一个index.html

向ServletDemo03发送请求,Servlet的执行过程ServletDemo03的构造方法—>init方法初始化该类,然后执行service方法(如果子类没有则会一层一层的向上找对应的方法)

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!*

[外链图片转存中…(img-AGDu9WXB-1711670867390)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。不过光是看完而不去付出行动,或者直接进入你的收藏夹里吃灰,那么我写这篇文章就没多大意义了。所以看完之后,还是多多行动起来吧!

可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。

资料领取方式:戳这里前往获取

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值