首页 > 系统相关 >Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程

时间:2022-10-11 18:38:31浏览次数:59  
标签:java Servlet void System 线程 内存 进程 open public


大家可分享关于Java微服务相关知识,包括但不限于Java微服务开发经验、架构组成、技术交流、中间件等内容,我们鼓励springcloud架构为基础发散出击,从而达到技术积累的目的,快来沉淀自己的技术,一起来分享吧!
你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解进行创作,参考如下:

Servlet Servlet生命周期


Servlet是一种规范,即为接口。

Servlet是Javaweb三大组件之一(Servlet程序、Filter过滤器、Listener监听器)

是小型java程序,通常通过HTTP(超文本传输协议)接收和响应来自Web客户端的请求。3、相对路径和绝对路径

相对路径:

. 表示当前目录

… 表示上一级的目录

资源名 表示当前的目录/资源名

绝对路径

​http://ip:port/工程路径/资源路径​

4、请求重定向的方案

1、

设置响应状态码302,表示重定向

resp.serStatus(302)

设置响应头,说明新的地址在那里

resp.serHeader(“Location”,“http://localhost:8080”);

2、方案

resp.sensRedirect(“http://localhost:8080”);

2.update与alter区别

update 是修改记录 alter 是修改表结构,添加字段

3、url---->Servlet访问

4、Servlet生命周期

(1 执行Servlet构造方法)

2 执行init()

3 service()

4 destroy()


java用swith取代多个if else

swith取代多个if else

@ApiModelProperty("类型 1:省份宏观 2竞争分析 3区域分析 4位置推荐 5:城市宏观")
private int type;
log.info("processReportInstanceByOperatorLog reportOperatorLog = {}", reportOperatorLog);
switch (reportOperatorLog.getType()) {
case ReportConstant.REPORT_TYPE_PROVINCE:
doProvinceReportInstance(reportOperatorLog);
break;
case ReportConstant.REPORT_TYPE_COMPETE:
doCompeteReportInstance(reportOperatorLog, user);
break;
case ReportConstant.REPORT_TYPE_REGION_ANALYSIS:
doRegionAnalysisReportInstance(reportOperatorLog);
break;
case ReportConstant.REPORT_TYPE_SELECTION:
doSelectionReportInstance(reportOperatorLog);
break;
case ReportConstant.REPORT_TYPE_CITY:
doCityReportInstance(reportOperatorLog);
break;
default:
log.warn("do not have this work reportOperatorLog = {}", reportOperatorLog);
break;
}

重载与重写

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_ajax

package polymorphic;

public class Test {
public static void main(String[] args) {
show(new Cat());
show(new Dog());
System.out.println("-------------");
Animal a = new Cat();
a.eat();
a.eat(3);
//a.work();
Cat b = (Cat)a;
b.sport();

Animal a2 = new Dog();
a2.eat();
//a.work();
Dog b2 = (Dog)a2;
b2.sport();

Work d = new Work();
d.work();

Work f = new Cat2();
f.work();
}

public static void show(Animal a) {
a.eat();
if(a instanceof Cat) {
Cat c = (Cat)a;
c.sport();
}else if (a instanceof Dog) {
Dog c = (Dog)a;
c.sport();
}
}

}
class Work{
public void work() {
System.out.println("Catch mice");
}
}
abstract class Animal{
public abstract void eat() ;

public void eat(int num) {
System.out.println("[重载1eat rice]");
for(int i = 0; i < num; i++)
System.out.println("[重载1eat rice]");
}
}
class Cat2 extends Work{
public void way() {
System.out.println("重写");
}

public void work() {
System.out.println("[重写 again]");
}
}
class Cat extends Animal{
//int num = 2;
//System.out.println("Hi, I am a Cat.");
public void eat() {
System.out.println("1eat fish");
}
public void sport() {
System.out.println("1can flow");
}

}
class Dog extends Animal{
//System.out.println("Hi, I am a Dog.");
public void eat() {
System.out.println("2eat beef");
}
public void sport() {
System.out.println("2can run");
}
}

AJAX定义、应用、open()等


简单的说:在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示

1、在学习了html css JavaScript之后的概念,ajax不是语言

Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)

最大的优点:

在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。

2、利用Ajax可以做

1 注册时,输入用户名自动检测用户是否存在

2 登录时,提示用户名密码错误

3 删除数据行,将行id发送到后台,后台在数据库删除,数据库删除成功后,在页面DOM将数据也删除。

3、AJAX 应用

注意:AJAX与Flash、Silverlight和Java Applet等RIA技术是有区分的。

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_java_02

Google Suggest 使用 AJAX 创造出动态性极强的 web 界面:当您在谷歌的搜索框输入关键字时,JavaScript 会把这些字符发送到服务器,然后服务器会返回一个搜索建议的列表。

Tomact服务器访问浏览器原理–》看出request与response的区别

request对象是用来获取请求消息的,而response对象是设置响应消息的

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_服务器_03

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_服务器_04

4、Ajax的open()方法有3个参数:1、method;2、url;3、boolean;

参数1有get和post两个取值

参数2表示什么就不用说了

重点说下第3个参数:boolean的取值

当该boolean值为true时,服务器请求是异步进行的,也就是脚本执行send()方法后不等待

服务器的执行结果,而是继续执行脚本代码;

当该boolean值为false时,服务器请求是同步进行的,也就是脚本执行send()方法后等待

服务器的执行结果的返回,若在等待过程中超时,则不再等待,继续执行后面的脚本代码!


进程与线程

进程与线程

定义

进程更像是我们打开支付宝,微信软件,就是一个进程
而用微信聊天,刷朋友圈,看公众号,使用微信支付就是一个个线程

百度定义

== 进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。==

== 线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。==

图解

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_ajax_05


Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_servlet_06


进程=线程+内存+文件+其他

Servlet Servlet生命周期、java用swith取代多个if else、重载与重写、AJAX定义、应用、open()等、进程与线程_ajax_07

线程=栈+PC+TLS

2.1 进程(线程+内存+文件/网络句柄)
我们通过上面的图片进行进一步理解:

“内存”:
我们通常所理解的内存是我们所见到的(2G/4G/8G/16G)物理内存,它为什么会在进程之中呢?
实际上,这里的内存是逻辑内存。指的是内存的寻址空间。每个进程的内存是相互独立的。
否则的话会出现一个问题:我们把指针的值改一改就指向其他进程的内存了,通过这样我们岂不是就可以看到其他进程中"微信"或者是"网上银行"的信息,
这样的话,那我们的微信聊天记录或者是银行账户的信息就都被别人找到了,这是一个很危险的信号!显然这样是不可能的。

“文件/网络句柄”:
它们是所有的进程所共有的,例如打开同一个文件,去抢同一个网络的端口这样的操作是被允许的。

“线程”:
接下来,我们就要介绍一下我们的“线程”有关知识

线程

2.2 线程(栈+PC+TLS)
2.2.1 栈:
我们通常都是说调用堆栈,其实这里的堆是没有含义的,调用堆栈就是调用栈的意思。
那么我们的栈里面有什么呢?
我们从主线程的入口main函数,会不断的进行函数调用,
每次调用的时候,会把所有的参数和返回地址压入到栈中。

2.2.2 PC:
Program Counter 程序计数器,操作系统真正运行的是一个个的线程,
而我们的进程只是它的一个容器。PC就是指向当前的指令,而这个指令是放在内存中。
每个线程都有一串自己的指针,去指向自己当前所在内存的指针。
计算机绝大部分是存储程序性的,说的就是我们的数据和程序是存储在同一片内存里的
这个内存中既有我们的数据变量又有我们的程序。所以我们的PC指针就是指向我们的内存的。

2.2.2.1 缓冲区溢出
例如我们经常听到一个漏洞:缓冲区溢出
这是什么意思呢?
例如:我们有个地方要输入用户名,本来是用来存数据的地方。
然后黑客把数据输入的特别长。这个长度超出了我们给数据存储的内存区,这时候跑到了
我们给程序分配的一部分内存中。黑客就可以通过这种办法将他所要运行的代码
写入到用户名框中,来植入进来。我们的解决方法就是,用用户名的长度来限制不要超过
用户名的缓冲区的大小来解决。

2.3 TLS:
全称:thread local storage
之前我们看到每个进程都有自己独立的内存,这时候我们想,我们的线程有没有一块独立的内存呢?答案是有的,就是TLS。
可以用来存储我们线程所独有的数据。
可以看到:线程才是我们操作系统所真正去运行的,而进程呢,则是像容器一样他把需要的一些东西放在了一起,而把不需要的东西做了一层隔离,进行隔离开来。

  1. 进程之间的是怎么进行交互的呢?
    通过TCP/IP的端口来实现

在后续的文章中我们将一一详细介绍!

  1. 线程之间又是怎样进行交互?
    线程的通信就比较简单,有一大块共享的内存,只要大家的指针是同一个就可以看到各自的内存。

在后续的文章中我们将一一详细介绍!

5.小结:
1.进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了.
2.一个程序至少有一个进程,一个进程至少有一个线程.
3.进程是资源分配的最小单位,线程是程序执行的最小单位。
4.一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.

最后附上启动线程代码

class MyThread extends Thread{
public void run(){
for (int i = 0;i<10;i++){
System.out.print(i+" ");
}
}

}
public class test{
public static void main(String args[]){
MyThread t = new MyThread();
t.start();
}
}

标签:java,Servlet,void,System,线程,内存,进程,open,public
From: https://blog.51cto.com/u_14604401/5747606

相关文章