protected void doGet(HttpServletRequest request, HttpServletResponse response)
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
用户:
提交
按钮
再次新建一个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”;
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-P9JhgxUl-1715462795739)]
[外链图片转存中…(img-gmvpvvxt-1715462795740)]
[外链图片转存中…(img-mBdEABfE-1715462795740)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!