Servlet进阶(链接传值、XML配置

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);

}

}

1.5 运行结果


点击form表单结果

在这里插入图片描述

在这里插入图片描述

点击连接传值结果

在这里插入图片描述

在这里插入图片描述

1.6 小结


通过上述代码运行可以得出:

  1. 点击提交后生成
http://localhost:8080/JavaWeb\_2020\_07\_16/demo?id=1&name=kaka链接;
符合URL的格式:
协议+ ://+ip+:+端口+/资源地址?key1=value1&key2=value2
  1. 连接传值为GET提交的方式;
  1. 两种方式都可以传值成功区别是利用表单后台id、name有值,利用连接传没有值;
  1. 使用链接传值时一定要保证KEY值与被传页面保持一致;

2. Get提交与Post提交的区别

======================================================================================

2.1 配置web.xml


Servlets

com.kaka.controller.StuServlet

Servlets

/stu

2.2 编写addStudent.html页面


Insert title here

ID:

NAME:

ID:

NAME:

2.3 编写StuServlet.java代码


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);

}

}

运行结果:

在这里插入图片描述

2.4 小结


通过上述代码运行可以得出:

  1. 当form表单method=get时 ,默认提交后执行servlet的doGet方法;
  1. 当form表单method=post时 ,默认提交后执行servlet的doPOST方法;
  1. servlet在创建时会创建父类的对象,先执行父类HttpServlet的service方法,根据请求的method取值调用不同的处理方法模型为 :doGet、doPost、doDelete、doPut;
  1. 在自定义的servlet中重写这些方法对应做不同的请求处理;
  1. 当servlet重写service方法时,do*系列方法将不再执行;
  1. 最终版本的当执行了Post时执行doPost请求又转向doGet;

3. Servlet的生命周期

===================================================================================

3.1 生命周期


一个事物从开始到存活再到结束也就是需要看Servlet的初始化、存活以及销毁;

3.2 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占用的资源;

4. 解决中文乱码问题

===============================================================================

4.1 配置xml文件


stuServlet

com.kaka.controller.StuServlet

encoding

UTF-8

stuServlet

/stu

4.2 编写index.html文件


Insert title here

ID:

NAME:

4.3 编写stuServlet.java文件


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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**[外链图片转存中…(img-DdphZjvq-1712725415489)]

[外链图片转存中…(img-R5f53HfO-1712725415489)]

[外链图片转存中…(img-k3uDuacM-1712725415490)]

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

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

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

文章中涉及到的知识点我都已经整理成了资料,录制了视频供大家下载学习,诚意满满,希望可以帮助在这个行业发展的朋友,在论坛博客等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我把这些资料,分享出来。相信对于已经工作和遇到技术瓶颈的朋友们,在这份资料中一定都有你需要的内容。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值