javaEE之JavaWeb知识点(二)

2021-10-08 16:40:56 浏览数 (1)

1.Servlet

1.1.为何学习Servlet

1.2.Servlet概述

1.2.1.Servlet概念

Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求、响应给浏览器的动态资源。但servlet的实质就是java代码,通过java的API动态的向客户端输出内容

1.2.2.Servlet快速入门

实现步骤:

1)创建类实现Servlet接口

【思考】:为何这么操作就可以不报错了,并且Ecplise中有servlet接口的提示了呢?

2)覆盖尚未实现的方法

publicclass Demo1Servlet implements Servlet{ publicvoid destroy() { // TODO Auto-generated method stub } public ServletConfig getServletConfig() { // TODO Auto-generated method stub returnnull; } public String getServletInfo() { // TODO Auto-generated method stub returnnull; } publicvoid init(ServletConfig arg0) throws ServletException { // TODO Auto-generated method stub } publicvoid service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { // TODO Auto-generated method stub }}

在servlet中接口中一共实现了5个方法,我们着重是要思考的service方法!!!!

3)在web.xml进行servlet的配置

<< span="">servlet> << span="">servlet-name>abcservlet-name> << span="">servlet-class>com.yueqian.Demo1Servletservlet-class> servlet> << span="">servlet-mapping> << span="">servlet-name>abcservlet-name> << span="">url-pattern>/demo1Servleturl-pattern> servlet-mapping>

最终效果:

1.2.3.Servlet的请求流程

1.3.Servlet的API详解

publicvoid init(ServletConfig arg0) throws ServletException { // TODO Auto-generated method stub }publicvoid service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { System.out.println("service.............."); } publicvoid destroy() { // TODO Auto-generated method stub } public ServletConfig getServletConfig() { // TODO Auto-generated method stub returnnull; } public String getServletInfo() { // TODO Auto-generated method stub returnnull; }

不管是init还是service还是其他方法,仔细观察,这些方法都不是被static修饰的,所以必须先实例化创建一个Demo1Servlet 对象,再由这个对象进行调用!

那么再思考,我们从来都没有去实例化过这个对象,那这个对象是怎么创建的呢?

也就是说由服务器tomcat帮我们创建的对象,由服务器创建这个对象,调用init,调用service方法!

1.3.1.init方法

1)init方法何时执行?

Servlet创建的时候调用

2)service方法何时执行?

每次请求都会执行

3)destroy方法何时执行?

Servlet销毁的时候执行的

1.3.2.servlet的生命周期

1)servlet何时创建

默认第一次访问的时候创建

2)servlet何时销毁

服务器关闭servlet就销毁了

3)每次访问必然执行的方法

service

1.3.3.生命周期2个方法参数

1)init

publicvoid init(ServletConfig config) throws ServletException { System.out.println("init........"); }

ServletConfig :代表的是该servlet对象的配置信息

2)destroy 关闭服务器

3)service

publicvoid service(ServletRequest req, ServletResponse res) throws ServletException, IOException { System.out.println("service.............."); }

ServletRequest :代表请求 认为ServletRequest 内部封装的是 http请求的信息

ServletResponse :代表响应 认为要封装的是响应的信息

1.4.Servlet的配置

1.4.1.基本配置

—servlet类的配置--> << span="">servlet> << span="">servlet-name>abcservlet-name> << span="">servlet-class>com.yueqian.Demo1Servletservlet-class> << span="">init-param> << span="">param-name>jdbcparam-name> << span="">param-value>jdbc:mysql://localhost:3306param-value> init-param> servlet> —servlet的虚拟路径配置--> << span="">servlet-mapping> << span="">servlet-name>abcservlet-name> << span="">url-pattern>/demo1Servleturl-pattern> servlet-mapping>

其中url-pattern的配置方式:

1)完全匹配 访问的资源与配置的资源完全相同才能访问到

2)目录匹配 格式:/虚拟的目录../* *代表任意

3)扩展名匹配 格式:*.扩展名

注意:第二种与第三种不要混用 /aaa/bbb/*.abcd !!

1.4.2. 服务器启动实例化Servlet配置

Servlet的何时创建:默认第一次访问时创建

为什么是默认?

当在servlet的配置时 加上一个配置servlet对象在服务器启动 时就创建

<< span="">servlet> << span="">servlet-name>abcservlet-name> << span="">servlet-class>com.yueqian.Demo1Servletservlet-class> << span="">init-param> << span="">param-name>jdbcparam-name> << span="">param-value>jdbc:mysql://localhost:3306param-value> init-param> << span="">load-on-startup>3load-on-startup> servlet> << span="">servlet-mapping> << span="">servlet-name>abcservlet-name> << span="">url-pattern>*.abcdurl-pattern> servlet-mapping>

1.4.3.缺省的servlet(默认的servlet)

可以将url-pattern配置一个/,代表该servlet是缺省的servlet

什么是缺省的servlet?

当你访问资源地址所有的servlet都不匹配时 , 缺省的servlet负责处理

1.4.4.欢迎页

http://localhost:8080/demo1/

<< span="">welcome-file-list> << span="">welcome-file>index.htmlwelcome-file> << span="">welcome-file>index.htmwelcome-file> << span="">welcome-file>index.jspwelcome-file> << span="">welcome-file>default.htmlwelcome-file> << span="">welcome-file>default.htmwelcome-file> << span="">welcome-file>default.jspwelcome-file> welcome-file-list>

因为,在当前的web应用程序中,有配置请求页面的顺序!!!

默认从上到下依次去寻找!!

如果将应用程序的web.xml中的配置删除掉,发现还是会按照顺序访问!

1.5.HttpServlet

1.5.1.操作步骤:

1)新建选择servlet模板

2.填写servlet名称

3.修改url-parten

4.选择servlet中要实现的方法

1.5.2.servlet模板分析

1.原来我们是定义一个类去实现servlet接口,这里为何是继承呢?

2.之前我们都是覆盖的是service方法,这里为何是doGet和doPost方法呢?

按照我们以前以前学习的面向对象的原则,儿子如果没有,应该找爹的方法,所以就找httpServlet

doPost中为何调用doGet呢?

1.6.ServletContext对象

1.6.1.ServletContext对象概念

ServletContext代表是一个web应用的环境(上下文)对象,ServletContext对象内部封装是该web应用的信息!

问题:

一个web应用有几个servlet对象?----多个

ServletContext对象一个web应用只有一个

1.6.2.如何获取ServletContext对象

1)ServletContext servletContext = config.getServletContext();

2)ServletContext servletContext = this.getServletContext();

思考:为何使用this就可以调用这个方法呢?

在它爹(HttpServlet)中没有这个方法

再去找爷爷

1.6.3.ServletContext作用

1.6.3.1.获得web应用全局的初始化参数

web.xml中配置初始化参数

通过context对象获得参数

1.6.3.2.获得web应用中任何资源的绝对路径(重要 重要 重要)

根据web应用的相对地址获取资源的绝对路径!

方法:String path = context.getRealPath(相对于该web应用的相对地址);

WebContent中内容会被copy发布到web应用内部中去!

获取不到的,因为发布不过去

1.6.3.3.获取当前JavaWeb项目的名称

ServletContext servletContext = this.getServletContext();servletContext.getContextPath()

1.6.3.4.ServletContext是一个域对象(重要 重要 重要)

什么是域对象?什么是域?

区域

广州市 域 范围

存储数据的区域就是域对象

ServletContext域对象的作用范围:整个web应(所有的web资源都可以随意向 servletcontext域中存取数据,数据可以共享)

域对象的通用的方法:

setAtrribute(String name,Object obj);

getAttribute(String name);

removeAttribute(String name);

1.7.练习实战(自己练习)

1.71.用户登录案例

1.7.2.用户注册案例

Jdbc

数据库

Servlet

String str = request.getParameter("username");

0 人点赞