protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//获取参数的方法
String id = arg0.getParameter(“id”);
String name = arg0.getParameter(“name”);
System.out.println(id + “\t” + name);
//获取URL
StringBuffer url = arg0.getRequestURL();
System.out.println(url);
//获取方法
String method = arg0.getMethod();
System.out.println(method);
//获取键值对
Map<String, String[]> parameterMap = arg0.getParameterMap();
//获取键
Set keySet = parameterMap.keySet();
Iterator it = keySet.iterator();
while(it.hasNext()){
String key = it.next();
String[] value = (String[])parameterMap.get(key);
System.out.println(“key:”+key+“value:”+Arrays.toString(value));
}
arg0.getRequestDispatcher(“success.jsp?name=admin&score=90”).forward(arg0, arg1);
}
}
点击form表单结果
点击连接传值结果
通过上述代码运行可以得出:
- 点击提交后生成
http://localhost:8080/JavaWeb\_2020\_07\_16/demo?id=1&name=kaka链接;
符合URL的格式:
协议+ ://+ip+:+端口+/资源地址?key1=value1&key2=value2
- 连接传值为GET提交的方式;
- 两种方式都可以传值成功区别是利用表单后台id、name有值,利用连接传没有值;
- 使用链接传值时一定要保证KEY值与被传页面保持一致;
======================================================================================
Servlets
com.kaka.controller.StuServlet
Servlets
/stu
ID:
NAME:
ID:
NAME:
2.3.1 doGet和doPost
package com.kaka.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuServlet extends HttpServlet {
public StuServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
System.out.println(id+“\t”+name+“\t”+“method:GET”);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
System.out.println(id+“\t”+name+“\t”+“method:POST”);
}
}
运行结果:
2.3.2 service、doGet和doPost的优先级
package com.kaka.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuServlet extends HttpServlet {
public StuServlet() {
}
protected void service(HttpServletRequest request, HttpServletResponse respone) throws ServletException, IOException {
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
System.out.println(id+“\t”+name+“\t”+“method:Service”);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
System.out.println(id+“\t”+name+“\t”+“method:GET”);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
System.out.println(id+“\t”+name+“\t”+“method:POST”);
}
}
运行结果:
2.3.3 常用版Servlet代码
package com.kaka.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuServlet extends HttpServlet {
public StuServlet() {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter(“id”);
String name = request.getParameter(“name”);
System.out.println(id+“\t”+name);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
运行结果:
通过上述代码运行可以得出:
- 当form表单method=get时 ,默认提交后执行servlet的doGet方法;
- 当form表单method=post时 ,默认提交后执行servlet的doPOST方法;
- servlet在创建时会创建父类的对象,先执行父类HttpServlet的service方法,根据请求的method取值调用不同的处理方法模型为 :doGet、doPost、doDelete、doPut;
- 在自定义的servlet中重写这些方法对应做不同的请求处理;
- 当servlet重写service方法时,do*系列方法将不再执行;
- 最终版本的当执行了Post时执行doPost请求又转向doGet;
===================================================================================
一个事物从开始到存活再到结束也就是需要看Servlet的初始化、存活以及销毁;
-
servlet初始化:Servlet默认不是随着服务器的启动而初始化,当第一次访问Servlet时才初始化,后面访问就执行处理请求,不会初始化了;
-
servlet销毁:服务器关闭的时候会销毁Servlet;
-
Servlet在服务器中是一个单例(不会占用过多的内存);
package com.kaka.controller;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
//只启动一次
public StuServlet() {
System.out.println(“constructor…构造函数”);
}
//可执行多次
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
String id = arg0.getParameter(“id”);
String name = arg0.getParameter(“name”);
System.out.println(“service…服务”+id+“\t”+name);
}
//执行一次
public void destroy() {
System.out.println(“destroy…销毁”);
super.destroy();
}
//执行一次
public void init(ServletConfig config) throws ServletException {
System.out.println(“init…初始化”);
}
}
运行结果:
注意:
-
当servlet含有load-on-startup配置时,该servlet会在容器(servlet引擎)启动自动创建对象,并初始化,等待请求到来;
-
当没有load-on-startup时,容器启动时,不创建servlet对象,当第一个请求到来时根据反射创建该servlet对象,并初始化,再执行服务;当下一次请求到来时,直接执行service方法提供服务
-
当服务器正常关闭时,容器会调用destroy方法回收servlet占用的资源;
===============================================================================
stuServlet
com.kaka.controller.StuServlet
encoding
UTF-8
stuServlet
/stu
ID:
NAME:
package com.kaka.controller;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class StuServlet extends HttpServlet {
private final static String oldEncoding = “ISO-8859-1”;
private static String newEncoding = null;
//只启动一次
public StuServlet() {
System.out.println(“constructor…构造函数”);
}
//执行一次
public void init(ServletConfig config) throws ServletException {
newEncoding = config.getInitParameter(“encoding”);
System.out.println(“init…初始化”);
}
//可执行多次
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
String id = arg0.getParameter(“id”);
String name = arg0.getParameter(“name”);
//转码
String newName = new String(name.getBytes(oldEncoding),newEncoding);
System.out.println(“service…服务”+id+“\t”+newName);
}
//执行一次
public void destroy() {
System.out.println(“destroy…销毁”);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/a1e76990a1f5f2185e8a56fd903a7613.jpeg)
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-DdphZjvq-1712725415489)]
[外链图片转存中…(img-R5f53HfO-1712725415489)]
[外链图片转存中…(img-k3uDuacM-1712725415490)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/a1e76990a1f5f2185e8a56fd903a7613.jpeg)
最后
文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!