Java实战之04JavaWeb-01Servlet
一、Http协议
1.什么是http协议?
http协议就是描述客户端与服务器端交互过程的
2.http的请求

3.http的响应

二、Servlet的简介
1.Servlet的概述
Servlet:Server Applet,运行在服务器端的java程序。Servlet是javaEE的规范(接口),如果想将我们写的程序让客户端访问到,创建一个类实现Servlet接口。Servlet作用是动态生成页面。
狭义的servlet:单指Servlet接口
广义的servlet:所有实现了Servlet接口的类都叫servlet
2.Servlet的快速入门
(1)开发步骤:
1)创建一个类实现Servlet接口
2)实现Servlet接口尚未实现的方法(重点实现service方法)
3)在web.xml中配置servlet
4)客户端访问
(2)代码实现
public class QuickServlet implements Servlet{
private ServletConfig config = null;
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
//通过jdbc访问数据库 获得数据 进行拼接
//Sql = "select emial from user where username=?"
String email = "";
System.out.println("this is my first servlet!!!");
res.getWriter().write("<h1 style='color:red'>");
res.getWriter().write("this is my first servlet!!!");
res.getWriter().write("hello:"+email);
res.getWriter().write("</h1>");
System.out.println(config);
}
@Override
public void init(ServletConfig config) throws ServletException {
this.config = config;
System.out.println("servlet init1。。。。");
}
@Override
public void destroy() {
System.out.println("servlet destory。。。");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
<servlet>
<servlet-name>QuickServlet</servlet-name>
<servlet-class>cn.itcast.servlet.QuickServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>QuickServlet</servlet-name>
<url-pattern>/quick</url-pattern>
</servlet-mapping>
(3)访问的过程
在客户端输入地址:

页面展现:

(4)访问过程中Servlet对象谁创建,service方法谁调用的?

整个访问过程,servlet对象tomcat创建 service方法tomcat调用,在service方法时request和response参数对象tomcat负责传递的
三、Servlet的API方法
1.init方法
public void init(ServletConfig config)
init方法是Servlet的初始化方法,Servlet对象创建时调用的方法
其中的参数:ServletConfig代表是Servlet的配置对象,内部封装的是此Servlet 的配置信息
2.destroy方法
public void destroy()
destory是Servlet销毁的方法,Servlet对象销毁的时候执行
3.service方法
public void service(ServletRequest req, ServletResponse res)
servlet的核心方法,程序代码放置到service方法中,每一次都会执行
其中的参数:
ServletRequest:代表请求,内部封装的是请求的信息
ServletResponse:代表响应,内部封装的要响应给客户端的信息
****Servlet的生命周期(面试题出现)
何时创建Servlet对象:
默认第一次访问时创建Servlet对象,会将servlet放置到web容器的内存中, 等待为后面的访问服务,某一个Servlet对象只有一个。执行init方法
何时销毁Servlet对象:
服务器关闭或web应从服务器中移除Servlet销毁,销毁时会执行destory方法
必然执行的方法:
service方法,每次客户端请求都会执行一次。
四、Servlet相关的配置文件
1.Servlet的基本配置(重点)
<servlet>
<servlet-name>随意写</servlet-name>
<servlet-class>Servlet的全包名</servlet-class>
</servlet>
<servlet-mapping>
<serlvet-name>与上面的name一致</servlet-name>
<url-pattern>/servlet对外访问的虚拟路径</url-pattern>
</servlet-mapping>
url-patten的配置:
1)完全匹配:访问虚拟的资源与配置的完全一样
2)目录匹配:格式:/开始 *结束
示例:/aaa/bbb/*
3)扩展名匹配:格式: 以*开始 以扩展名结束
示例:*.abc
注意:第二种与第三种不要混用 /aaa/bbb/*.abc 错误的
2.服务器已启动就创建servlet对象的配置
<load-on-startup>数字(servlet创建的顺序)</load-on-startup>
<servlet>
<servlet-name>QuickServlet</servlet-name>
<servlet-class>cn.itcast.servlet.QuickServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
数字的配置几?只要是正整数就行 数字越小越早创建 但是建议不要配置成1
3.欢迎页面
<!-- 欢饮的文件列表 -->
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
4.缺省Servlet(了解)
在url-pattern中配置成/ 缺省的servlet,所有的servlet资源都不匹配时找缺省的servlet。
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
问题:挡手动配置缺省的servlet 发现静态资源不能访问了
原因:tomcat的默认全局的配置文件指定了系统缺省的servlet,自定义一个缺省 的servlet,把默认全局缺省的servlet覆盖了,工程中所有的资源都是servlet 帮助返回给客户端(包括静态资源)
注意:静态资源访问过程:
在页面访问index.html静态资源
tomcat会按照index.html名字找一个servlet,找不到,会找缺省 servlet
DefaultServlet内部帮你找一个名字叫index.html的静态资源,
第一种结果:找到index.html资源 缺省的servlet逐行输出静态资源
第二种结果:找不到 返回一个默认的错误页面404
总结:所有的web资源 都是servlet响应的
五、ServletConfig对象
1.ServletConfig的概述
代表是Servlet对象的配置对象,ServletConfig对象内部封装的是该Servlet对象的配置信息,一个Servlet就有一个对应的ServletConfig对象。当Servlet对象创建时,web容器会调用init方法,同时会创建该Servlet对象的配置对象ServletConfig作为参数传递给init方法。
2.获得ServletConfig对象
通过GenericServlet的下面的方法
在自定义的Servlet中直接使用 getServletConfig();
3.ServletConfig对象的作用
1)获得servlet的名字
<servlet-name>Servlet的名称</servlet-name>
2)获得该servlet的初始化的参数
getInitParameter(name);
getInitParameterNames();
<servlet>
<servlet-name>Servlet5</servlet-name>
<servlet-class>cn.itcast.servlet.Servlet5</servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>AAA</param-value>
</init-param>
<init-param>
<param-name>bbb</param-name>
<param-value>BBB</param-value>
</init-param>
</servlet>
3)可获得ServletContext对象
ServletContext context = config.getServletContext();
六、ServletContext对象(重点)
1.ServletContext概述
中文译成 Servlet上下文对象,代表的是一个Web应用的环境对象,内部封装的与web应用整体相关的数据。服务器一启动就会创建ServletContext对象,一个web应用只有一个ServletContext对象。
2.获得ServletContext对象
1)config.getServletContext();
2)getServletContext();
3.ServletContext的作用
(1)获取web应用的初始化参数
<context-param>
<param-name>xxx</param-name>
<param-value>YYY</param-value>
</context-param>
(2)ServletContext对象可以作为域对象存储数据
域对象:区域对象,存数据

只要是域对象,必然有下面三个方法
setAttribute(name,value)---向域对象中设置值
getAttribute(name)---从域中获取值
removeAttribute(name)---从域中删除某个数据
(3)获得web应用中的资源的绝对路径
资源在服务器上的绝对路径 context.getRealPath(相对于web应用根目录地址);
ServletContext context = getServletContext();
String pathA = context.getRealPath("/a.txt");
String pathB = context.getRealPath("/WEB-INF/b.txt");
String pathC = context.getRealPath("/WEB-INF/classes/c.txt");
Java实战之04JavaWeb-01Servlet的更多相关文章
- 「小程序JAVA实战」springboot的后台搭建(31)
转自:https://idig8.com/2018/08/29/xiaochengxujavashizhanspringbootdehoutaidajian31/ 根据下面的图,我们来建立下对应的sp ...
- Java实战:教你如何进行数据库分库分表
摘要:本文通过实际案例,说明如何按日期来对订单数据进行水平分库和分表,实现数据的分布式查询和操作. 本文分享自华为云社区<数据库分库分表Java实战经验总结 丨[绽放吧!数据库]>,作者: ...
- java实战之解析xml
在java中解析xml有现成的包提供方法,常用的有四类:Dom,JDom,Sax以及Dom4j.其中前者是java中自带的,后三者需要大家从开源诸如sourceforge这样的网站下载jar包,然后在 ...
- Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目
一.前言 如果还不了解剧情,请返回第3集的剧情 Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...
- Lucene之Java实战
1.导包 2.索引的创建 2.1首先,我们需要定义一个词法分析器. Analyzer analyzer = new IKAnalyzer();//官方推荐 Analyzer analyzer = ne ...
- 【Java实战】源码解析Java SPI(Service Provider Interface )机制原理
一.背景知识 在阅读开源框架源码时,发现许多框架都支持SPI(Service Provider Interface ),前面有篇文章JDBC对Driver的加载时应用了SPI,参考[Hibernate ...
- 添物零基础到大型全栈架构师 Java实战及解析(实战篇)- 概述
实战篇是在基础之上,进一步提升的内容.通过实战篇可以深入理解Java相关框架和库的使用,能够独立开发小模块,或者按照架构师的指导进行代码编写和完善. 主要讲解核心框架和库的使用和使用场景介绍.通过 ...
- Zookeeper API for JAVA实战与应用
package com.zookeeper.watcher; import java.util.List; import java.util.concurrent.CountDownLatch; im ...
- Java实战equals()与hashCode()
一.equals()方法详解 equals()方法在object类中定义如下: 代码 public boolean equals(Object obj) { return (this == obj); ...
- JAVA 实战练习
1.判断变量是否为奇数偶数. package com.JAVA; import java.util.Scanner; public class text { public static void ma ...
随机推荐
- Protobuf-net学习笔记
对于Socket应用来说,如何序列化和反序列化消息一直是比较头痛的问题,C#提供了自动序列化的功能(类似AS3中的AMF),但是唯一的缺点就是前后端都必须是C#实现,如果前后端语言不一致该怎么办? G ...
- 如何对SQL Server 2005进行设置以允许远程连接(转载)
如何对SQL Server 2005进行设置以允许远程连接(转载) 在尝试从远程计算机连接到 Microsoft SQL Server 2005 实例时,可能会接收到错误消息.在使用任何程序连接到 S ...
- 写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn reverseList
package homework004; import java.util.ArrayList; import java.util.List; public class Daoxu { public ...
- cocos2d-x 手势之简单实现
转自:http://blog.sina.com.cn/s/blog_61ece099010187tl.html 手势之前也发过一篇,但是我感觉那个还不够轻巧. 而且大多数游戏里面不会有那么复杂的手势, ...
- ThinkPHP CURD方法盘点:data方法
data方法也是模型类的连贯操作方法之一,用于设置当前要操作的数据对象的值,可能大家不太习惯用这个方法,今天来讲解下如何用好data方法. 用法 写操作 通常情况下我们都是通过create方法或者赋值 ...
- Spring 从零開始-03
这里说说bean装配集合.spring的支持的集合元素,其基本使用方式如同与Java的集合,所以假设对Java的集合不太了解的能够先找个帖子好好学习一下, 时间关系这里就不说了. ~~ list的样例 ...
- 分享SVN的钩子代码[借鉴学习]pre-commit-post 钩子
#/bin/bash REPOS=$1 TXN=$2 export HOME=/ export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/us ...
- Tips: compilation and creating new projects on Android 4.0
If you have downloaded android 4.0, you should read the article. $ANDROID_ROOT/tools/android.bat is ...
- View绘制详解,从LayoutInflater谈起
自定义View算是Android开发中的重中之重了,很多小伙伴可能或多或少都玩过自定义View,对View的绘制流程也有一定的理解.那么现在我想通过几篇博客来详细介绍View的绘制流程,以便使我们更加 ...
- javascript笔记06:类的创建
1.创建一个javascript类---javascript使用函数形式构建类 <script type="text/javascript"> //定义一个类 ...