Servlet------>servletDemo 及细节注意
原理图:

前提:我用的命令行都是mac系统下用的,非win

jsp实质是一个servlet,所以要先了解servlet,如上页面是一个servletdemo,下面是尝试的步骤
1.先写好Demo.java
(正常可以在eclipes里直接创建一个servlet,然后打成war包丢到tomcat的webapps里,运行tomcat就可以访问),为了了解本质,我用记事本写了如下:
Demo.java
package cn.itcaste; import java.io.IOException;
import java.io.OutputStream; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Demo extends HttpServlet {
public void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
OutputStream out=arg1.getOutputStream();
out.write("hello!".getBytes());
} }
写好放到tomcat中webappps下的----》2web应用下的---》classes里,在没编译前是是没有Demo.class的
tomcat里的结构:

2.编译Demo.java
命令行输入: javac -d . Demo.java(意思是引入jar,并在当前地址编译java文件)
然后显示编译失败,理由是:servlet的jar要单独引入

servlet的jar要单独引入:$export CLASSPATH=${CLASSPATH}:/Users/snowing/Downloads/apache-tomcat-9.0.0.M18/lib/servlet-api.jar
引入成功后重新编译: javac -d . Demo.java
编译成功如下

3.配置 web.xml
这里我犯了一个错误,就是我的<servlet-mapping>写错了,注意这里一定要配置mapping,不然无法访问
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <servlet>
<servlet-name>Demo</servlet-name>//类名
<servlet-class>cn.itcaste.Demo</servlet-class>//完整类名
</servlet> <servlet-mapping>
<servlet-name>Demo</servlet-name>//对应上面的类名
<url-pattern>/Demo</url-pattern>//对外访问路径
</servlet-mapping> </web-app>
启动tomcat:

结果:
servlet细节:
servlet细节-----》1影射到多个url上
同一个servlet可以被影射到多个url上
name一样,mapping不一样 -----------》


servlet细节------》2 通配符
在servlet影射的url上可以使用通配符,但只能用两种固定的格式:
一种是“*.扩展名”,另一种格式“/扩展名/*”

每个tomcat都会在conf里配置好了读取web.xml

servlet细节---》3 servlet响应关系
servlet在使用过通配符映射,很有可能会出现都可以响应的情况,所以会有优先级的安排
越像越会响应,而且*.do是匹配度最低的

servlet细节---》4 servlet实例对象生命的顽强
servlet引擎:就是调用servlet的web服务器的程序
对于客户端的多次请求只创建一次servlet实例对象,直到web容器退出才会销毁
servlet细节---》5 servlet生命周期(面试)
servlet生: 服务启动不生,访问servlet才生 . init只调用一次
@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
System.out.println("init");
}
servlet死:服务死才死
@Override
public void destroy() {
// TODO Auto-generated method stub System.out.println("destroy");
}
servlet细节---》6 servlet <load-on-startup> web项目启动即创建servlet实例对象
web.xml里修改 <load-on-startup>数字</load-on-startup> 数字越小优先级越高

servlet细节---》6 servlet 里的web.xml如果配置了缺损servlet则访问配置的,相当于复写了tomcat里配置好的servlet
tomcat里的web.xml写好了默认的缺损,可以找到对应名字webroot下的静态资源
注意:复写后访问缺损URL就会找你复写的servlet,而不是寻找webroot下的静态页面!
servlet细节---》6 servlet 线程安全问题(少使用static)
每个客户端访问会创建一个线程,并在线程上调用service方法,如果请求的是一个资源,就有可能会发生线程安全问题
6.1如下int i=0;这个写法是错误的,会造成安全问题, 放在doget方法里是没问题的!

6.2线程上调用的service方法里如果存在静态成员,一定要注意用完移除,不然会内存太多。尽量少使用static(方立勋老师的提示)

6.3线程安全问题之按访问顺序进行排队-------》web资源不能这样做,不可能一个在访问其他人排队等着访问,啊哈哈哈哈哈,看看就好

6.4线程安全问题之SingleThreadModel-------》认真你就输啦web资源不能这样做 淘汰做法,本质是创建多个servlet大象
Servlet------>servletDemo 及细节注意的更多相关文章
- Servlet的一些细节问题
Servlet的细节问题 1.一个已经注册的Servlet可以被多次映射即: <servlet> <!-- servlet的注册名 --> <servlet-name&g ...
- Servlet的一些细节(2)
1. Servlet的创建时间 Servlet是不能单独运行,调用它的叫做Servlet引擎,或者叫做web服务器 针对客户端的多长Servlet请求,通常情况下,服务器只会创建一个Servlet实例 ...
- Servlet的一些细节(1)
1. Servlet程序必须映射到一个URL地址 由于客户端是通过URL访问web服务器资源,所以Servlet程序必须映射到一个URL地址.这个工作在web.xml文件中使用<servlet ...
- servlet中的细节
Get方法有大小限制:1024个字符.这些信息使用 Query_String头传递,并通过Query_String环境变量访问.Post方法:请求体信息使用FromData头传递.读取所有表单参数:g ...
- [Java.Web] Servlet 的一些细节
本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工 ...
- Servlet的一些细节
由于客户端是通过URL地址访问web服务器的中的资源的,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet& ...
- 2016-2-1 Servlet细节
Servlet的一些细节(韩顺平老师视频讲解)(1)由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序想要被外界访问,必须把servlet程序映射到一个URL地址上.这个工作在 ...
- JavaWeb -- Servlet运行过程 和 细节
Servlet的运行过程 lServlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象.如果是,则 ...
- Servlet映射细节
Servlet的映射细节: 1):一个Servlet程序(Web组件),可以配置多个<url-pattern>,表示一个Servlet有多个资源名称. <servlet-mappin ...
- Servlet不再是烦恼
Servlet 一.什么是Servlet? Servlet是在服务器上运行的小程序,也就是一个Java类,但比较特殊,不需要new,自动就可以运行.也有创建.垃圾回收和销毁过程.Servlet是Jav ...
随机推荐
- 快速创建各种类型的NSAttributeString和NSMutableParagraphStyle
NSDictionary *attributes = @{ NSForegroundColorAttributeName : [ UIColorredColor ], NSFontAttribut ...
- 【LeetCode】065-验证数字
写在前面 前面研究OS的经历实在是令人心力憔悴..所以换个新鲜的,把自己的刷题感悟整理一番.刷了有些题了,就先拿最近几天hard题打头阵吧.首先说的是(065)Valid Number这个题,其实一眼 ...
- linux中录屏工具byzanz
linux中录屏工具byzanz: 1.安装 sudo apt install byzanz 2.使用 help:byzanz-record --help 配合xwininfo使用--xwininfo ...
- 0067 MySQL的日期字段的取值用单引号
这两天在做sql练习题http://www.cnblogs.com/zxx193/p/4000467.html的时候,涉及到下面的建表+插数据操作 CREATE TABLE t1( s_no VARC ...
- 利用GitHub Pages和Hexo搭建个人博客
本文首发地址: 非生异也 本项目源码托管在GitHub上 Why 阮一峰曾经说过:喜欢写Blog的人,会经历3个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现 ...
- jdom 读取
读取XML文档 读取文档,首先需要一个xml的解析器,它可以自动的解析出各个元素,并且把子元素作为自己的孩子节点,方便操作. 主要使用的函数: SAXBuilder.build("xxx.x ...
- android bitmap compress
android的照相功能随着手机硬件的发展,变得越来越强大,能够找出很高分辨率的图片. 有些场景中,需要照相并且上传到服务,但是由于图片的大小太大,那么就上传就会很慢(在有些网络情况下),而且很耗流量 ...
- java中高并发和高响应解决方法
并发不高.任务执行时间长的业务要区分开看: 假如是业务时间长集中在I/O操作上,也就是I/O密集型的任务,因为I/O操作并不占用CPU,所以不要让所有的CPU闲下来,可以加大线程池中的线程数目,让CP ...
- 决Ubuntu使用`make menuconfig`配置Linux 内核时,出现缺少'ncurses-devel'库支持。
*** Unable to find the ncurses libraries or the *** required header files. *** 'make menuconfig' req ...
- HTML5标准最终来了,看什么书学习最好??????
近期看了一本书<HTML5网页开发实例具体解释>,是大众点评的攻城狮写的,认为非常有收获.看样子眼下大多数的国内网页都支持HTML5了,全栈project师是不是必须得会HTML5? 有兴 ...