WEB资源&Servlet

在http协议当中,规定了请求和响应双方, 客户端和服务器端。与web相关的资源。
有两种分类 –> 静态资源 + 动态资源

Servlet – 伺服器
运行在web服务器上的java程序.
用于接收和响应 客户端的http请求.
更多的是配合动态资源来做.
当然静态资源也需要使用到servlet,只是Tomcat里面已经定义DefaultServlet

Servlet细节说明

1.由于客户端是通过URL地址访问web服务器的资源,若servlet被外界访问,必须将servlet程序映射到URL地址上,这个工作在web.xml文件中使用元素和完成.

2.元素用于注册使用servlet,它包含有两个主要的元素
和分别用于设置servlet的注册名称和servlet的完整类名

3.一个元素用于映射一个已注册的servlet的一个对外访问路径,它包含有2个元素,和,分别用于指定的servlet注册名和对外访问路径

4.同一个servlet可以映射到多个URL上,多个元素的子元素的设置值可以是同一个servlet的注册名.(多个URL均可以访问servlet)

5.servlet映射到URL中可以使用通配符,固定写法:.扩展名 和 /*

Servlet配置方式
a. 全路径匹配
以 / 开始 /a /aa/bb
localhost:8080/项目名称/aa/bb
a. 路径匹配 , 前半段匹配
以 / 开始 , 但是以 * 结束 /a/* /*
其实是一个通配符,匹配任意文字
localhost:8080/项目名称/aa/bb
a. 以扩展名匹配
写法: 没有/ 以 * 开始 .扩展名 .aa *.bb

6.servlet是供其他java程序(servlet引擎)调用的java类,它不能独立执行,运行完全由servlet引擎控制和调度

7.针对客户端的多次servlet请求,通常情况下,服务器只创建一个servlet实例对象
实例对象一旦创建,就会驻留内存,为后续其他请求服务,直至web容器退出,servlet才销毁 –生命周期

8.如果某个servlet的映射路径为/,此为缺省路径,处理其他servlet都不处理的请求

9.多个客户端并发访问servlet时,web服务器会为每一个客户端的访问请求创建一个线程,并在这个线程上调用servlet方法,此时有可能引起并发访问问题
–> 若某个servlet实现singleThreadModel接口,那么servlet引擎将以单线程方式调用其方法(此方法在servlet2.4中,被标记为过时)
–> 该接口为定义任何方法,只要servlet类的;定义中增加实现SingleThreadModel接口声明即可
–> 对于实现singleThreadModel接口的servlet,servlet引擎仍然支持对该servlet的多线程并发访问,其采用方式是产生多个servlet实例对象,并发每个线程分表调用一个独立的servlet实例对象
–> 实现singleThreadmodel并不能真正解决servlet线程安全问题,因为servlet引擎会多创建servlet实例对象,而真正意义上的解决多线程安全问题是指一个指servlet实例对象被多个线程同时调用的问题.

让Servlet创建实例的时机提前。

默认情况下,只有在初次访问servlet的时候,才会执行init方法。 有的时候,我们可能需要在这个方法里面执行一些初始化工作,甚至是做一些比较耗时的逻辑。

在配置的时候, 使用load-on-startup元素来指定, 给定的数字越小,启动的时机就越早。
一般不写负数, 从2开始即可。

HelloServlet04
com.itheima.servlet.HelloServlet04
2

Servlet生命周期

什么是生命周期
一个对象从创建到消亡的过程,就是生命周期

servlet生命周期相关的方法
void destroy() 销毁servlet的方法
void init(ServletConfig config) 初始化servlet的方法

● 生命周期
从创建到销毁的一段时间
● 生命周期方法
从创建到销毁,所调用的那些方法。
● init方法
首次访问的时候,服务器会以反射的方式,完成servlet对象的创建
在创建该servlet的实例时,就执行该方法。
一个servlet只会初始化一次, init方法只会执行一次
默认情况下是 : 初次访问该servlet,才会创建实例。
● service方法
只要客户端来了一个请求,那么就执行这个方法了。
每次访问请求,servlet均创建一个新的httpservletrequest请求对象和一个response相应对象,将此2对象作为参数传递给service()方法,在根据请求方式调用doXxx方法
该方法可以被执行很多次
一次请求,对应一次service方法的调用
● destroy方法
servlet销毁的时候,就会执行该方法
1. 该项目从tomcat的里面移除。
2. 正常关闭tomcat就会执行 (shutdown.bat)

@Override
public void init(ServletConfig servletConfig) throws ServletException {
//初始化
}
@Override
public ServletConfig getServletConfig() {
//获取servletConfig域对象
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//处理的操作,只要访问了该servlet,就会执行该方法
}
@Override
public String getServletInfo() {
//关于servlet的一些信息
return null;
}
@Override
public void destroy() {
//销毁
}

servlet的使用

1.编写java程序,实现servlet或继承genericServlet/HttpServlet
–> 重写service/doPost.doGet方法

2.配置Servlet
用意: 告诉服务器,我们的应用有这么些个servlet。

在webContent/WEB-INF/web.xml里面写上以下内容。


HelloServlet
com.itheima.servlet.HelloServlet


HelloServlet
/a


3.发布至tomcat上

4.在地址栏上输入 http://localhost:8080/项目名称/a

Servlet的运行原理

通过上述流程图我们重点需要掌握如下几个点:
只要浏览器给服务器发送请求,那么服务器在处理请求之前,先把请求操作封装成request对象,与之对象,response对象

  1. Servlet对象是由服务器创建
  2. request与response对象也是由tomcat服务器创建
  3. request对象封装了浏览器过来的所有请求信息,response对象代表了服务器的响应信息。

乱码问题
请求中处理乱码
get 请求,t8内部解决了
post request.setCharaterEncoding(“utf-8”);
响应中处理乱码
response.setContentType(“text/html;chatset=UTF-8”);

代码实例
分析
1.处理请求对象request中的请求参数,获取用户名和密码
2.去数据库中查询 用户名和密码 判断是否匹配
需要: mysql驱动 JDBCTemplate C3P0连接池
3.返回user对象,null 失败 响应用户
不为null 成功 响应用户
需要: 响应对象Response

步骤
1.准备数据,mysql中的用户名库的准备
2.工程环境搭建–导入前端页面(或自定义)–login.html
导入jar包,配置文件,jdbcutils

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值