当前位置: 首页 > news >正文

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)代码实现

 1 public class QuickServlet implements Servlet{
 2     
 3     private ServletConfig config = null;
 4     
 5     @Override
 6     public void service(ServletRequest req, ServletResponse res)
 7             throws ServletException, IOException {
 8         //通过jdbc访问数据库 获得数据 进行拼接
 9         //Sql = "select emial from user where username=?"
10         String email = "";
11         System.out.println("this is my first servlet!!!");
12         res.getWriter().write("<h1 style='color:red'>");
13         res.getWriter().write("this is my first servlet!!!");
14         res.getWriter().write("hello:"+email);
15         res.getWriter().write("</h1>");
16         
17         System.out.println(config);
18     }
19 
20     @Override
21     public void init(ServletConfig config) throws ServletException {
22         this.config = config;
23         System.out.println("servlet init1。。。。");
24     }
25         
26     @Override
27     public void destroy() {
28         System.out.println("servlet destory。。。");
29     }
30     
31     @Override
32     public ServletConfig getServletConfig() {
33         return null;
34     }
35 
36     @Override
37     public String getServletInfo() {
38         return null;
39     }
40 }
1 <servlet>
2       <servlet-name>QuickServlet</servlet-name>
3       <servlet-class>cn.itcast.servlet.QuickServlet</servlet-class>
4       <load-on-startup>3</load-on-startup>
5 </servlet>
6 <servlet-mapping>
7       <servlet-name>QuickServlet</servlet-name>
8       <url-pattern>/quick</url-pattern>
9 </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>

1  <servlet>
2       <servlet-name>QuickServlet</servlet-name>
3       <servlet-class>cn.itcast.servlet.QuickServlet</servlet-class>
4       <load-on-startup>3</load-on-startup>
5   </servlet>

数字的配置几?只要是正整数就行 数字越小越早创建 但是建议不要配置成1

3.欢迎页面

1  <!-- 欢饮的文件列表 -->
2   <welcome-file-list>
3     <welcome-file>index.html</welcome-file>
4     <welcome-file>index.jsp</welcome-file>
5   </welcome-file-list>

4.缺省Servlet(了解)

在url-pattern中配置成/ 缺省的servlet,所有的servlet资源都不匹配时找缺省的servlet。

1  <servlet-mapping>
2     <servlet-name>Servlet</servlet-name>
3     <url-pattern>/</url-pattern>
4   </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();

 1   <servlet>
 2     <servlet-name>Servlet5</servlet-name>
 3     <servlet-class>cn.itcast.servlet.Servlet5</servlet-class>
 4     <init-param>
 5         <param-name>aaa</param-name>
 6         <param-value>AAA</param-value>
 7     </init-param>
 8     <init-param>
 9         <param-name>bbb</param-name>
10         <param-value>BBB</param-value>
11     </init-param>
12   </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应用的初始化参数

1  <context-param>
2       <param-name>xxx</param-name>
3       <param-value>YYY</param-value>
4   </context-param>

(2)ServletContext对象可以作为域对象存储数据

域对象:区域对象,存数据

只要是域对象,必然有下面三个方法

setAttribute(name,value)---向域对象中设置值

getAttribute(name)---从域中获取值

removeAttribute(name)---从域中删除某个数据

(3)获得web应用中的资源的绝对路径

资源在服务器上的绝对路径  context.getRealPath(相对于web应用根目录地址);

1   ServletContext context = getServletContext();
2         
3     String pathA = context.getRealPath("/a.txt");
4         
5     String pathB = context.getRealPath("/WEB-INF/b.txt");
6         
7     String pathC = context.getRealPath("/WEB-INF/classes/c.txt");

 

转载于:https://www.cnblogs.com/minihouseCoder/p/5623592.html

相关文章:

  • 薪水增长多少,新机会才值得考虑——Leo网上答疑(55)
  • mysql主从
  • Windows Phone 7 不温不火学习之《项目模板》
  • 没有自动联想补齐代码的解决办法
  • Windows Phone 7 不温不火学习之《工程结构》
  • iOS面试题6.30总结
  • Winows Phone 7 不温不火学习之《音乐播放示例》
  • centos7安装eclipse
  • Windows Phone7 不温不火学习之《应用程序生命周期》
  • 你好,React setState
  • fastreport 如何 设置 richview 的 行高
  • Windows Phone 7 不温不火学习之《页面导航》
  • 我的ipad应用备份
  • 我又回来了
  • windows向ubuntu过渡之常用软件安装
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • [deviceone开发]-do_Webview的基本示例
  • 2017 年终总结 —— 在路上
  • Docker 笔记(2):Dockerfile
  • github指令
  • Java 内存分配及垃圾回收机制初探
  • java2019面试题北京
  • Java的Interrupt与线程中断
  • rabbitmq延迟消息示例
  • Vue--数据传输
  • Wamp集成环境 添加PHP的新版本
  • 试着探索高并发下的系统架构面貌
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 问题之ssh中Host key verification failed的解决
  • 我有几个粽子,和一个故事
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用Visual Studio开发以太坊智能合约
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (Forward) Music Player: From UI Proposal to Code
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (三)c52学习之旅-点亮LED灯
  • (十六)串口UART
  • (转)JAVA中的堆栈
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .libPaths()设置包加载目录
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET delegate 委托 、 Event 事件
  • .net快速开发框架源码分享
  • .NET企业级应用架构设计系列之应用服务器
  • .NET下ASPX编程的几个小问题
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [c]扫雷
  • [C++]拼图游戏
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [Enterprise Library]调用Enterprise Library时出现的错误事件之关闭办法