javaweb——Servlet

servlet

1.什么是servlet

处理请求和发送响应的过程是一种叫做Servlet的程序来完成的,并且Servlet是为了解决实现动态页面而衍生的东西

(1) Servlet Server Applet ),全称 Java Servlet 。是用 Java 编写的服务器端程序,其主要功能在于交互式地浏览和
修改数据,生成动态 Web 内容。狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指任何实现了这个
Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。
(2) Servlet 运行于支持 Java 的应用服务器中。从实现上讲, Servlet 可以响应任何类型的请求,但绝大多数情况下
Servlet 只用来扩展基于 HTTP 协议的 Web 服务器。
(3) Servlet 工作模式:
① 客户端发送请求至服务器
② 服务器启动并调用 Servlet Servlet 根据客户端请求生成响应内容并将其传给服务器
③ 服务器将响应返回客户端
 

2.tomcat和servlet的关系

Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提供非常安全的,可移植的,易于使用的CGI替代品.

 

从http协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。

①:Tomcat将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,所有的HTTP头数据读可以通过request对象调用对应的方法查询到。

②:Tomcat同时会要响应的信息封装为HttpServletResponse类型的response对象,通过设置response属性就可以控制要输出到浏览器的内容,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器

 

3、servlet的运行过程

  • ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步;
  • ②装载并创建该Servlet的一个实例对象;
  • ③调用Servlet实例对象的init()方法;
  • ④创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去;
  • ⑤Web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

4.servlet的生命周期

 服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法init(ServletConfig conf)

 该servlet对象去处理所有客户端请求,在service(ServletRequest req,ServletResponse res)方法中执行

 最后服务器关闭时,才会销毁这个servlet对象,执行destroy()方法。

5.请求

HttpServletRequest 表示 Http 环境中的 Servlet 请求。它扩展于 javax.servlet.ServletRequest 接口 )
常用方法 :
1)String getParameter(String name) 根据表单组件名称获取提交数据,返回值是 String
注:服务器在接收数据时使用字符串统一接收
2)String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据
3)void setCharacterEncoding(String charset) 指定每个请求的编码 ( 针对 post 请求才起作用 )
4)RequestDispatcher getRequestDispatcher(String path) -- 跳转页面
返回一个 RequestDispatcher 对象,该对象的 forward( ) 方法用于转发请求
5) 存值 request.setAttribute("key",value);
6) 取值 request.getAttribute("key");// 取值后需要向下转型
示例: String a1=(String)request.getAttribute("uname");
补充 :get post 的区别
1 GET 请求,请求的数据会附加在 URL 之后,以 ? 分割 URL 和传输数据,多个参数用 & 连接。 URL 的编码格式采用的
ASCII 编码,而不是 uniclde ,即是说所有的非 ASCII 字符都要编码之后再传输。
POST 请求: POST 请求会把请求的数据放置在 HTTP 请求包的包体中。上面的 item=bandsaw 就是实际的传输数
据。
因此, GET 请求的数据会暴露在地址栏中,而 POST 请求则不会。
2 、传输数据的大小
HTTP 规范中,没有对 URL 的长度和传输的数据大小进行限制。但是在实际开发过程中,对于 GET ,特定的浏览器
和服务器对 URL 的长度有限制。因此,在使用 GET 请求时,传输数据会受到 URL 长度的限制
对于 POST ,由于不是 URL 传值,理论上是不会受限制的,但是实际上各个服务器会规定对 POST 提交数据大小进行
限制, Apache IIS 都有各自的配置。
3 、安全性
POST 的安全性比 GET 的高。这里的安全是指真正的安全,而不同于上面 GET 提到的安全方法中的安全,上面提到的
安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过 GET 请求,用户名和密码都会暴露再 URL 上,因为
登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到
了。除此之外, GET 请求提交的数据还可能会造成 Cross-site request frogery 攻击

6.响应

Service API 中,定义了一个 HttpServletResponse 接口,它继承自 ServletResponse 接口,专门用来封装 HTTP
应消息。 在 HttpServletResponse 接口中定义了向客户端发送响应状态码,响应消息头,响应消息体的方法。
常用方法 :
void addCookie(Cookie var1);// 给这个响应添加一个 cookie
void sendRedirect(String var1) ;// 发送一条响应码,将浏览器跳转到指定的位置
PrintWriter getWriter() 获得字符流,通过字符流的 write(String s) 方法可以将字符串设置到 response 缓冲区中,
随后 Tomcat 会将 response 缓冲区中的内容组装成 Http 响应返回给浏览器端。
setContentType() 设置响应内容的类型
重定向和转发的对比
重定向 :response.sendRedirect() 转发 :request.getRequestDispatcher("../success.jsp").forward(request,response);
相同点 : 都用来跳转页面
不同点 :
a. 重定向时地址栏会改变 ,request 中存储的数据会丢失 . 转发时地址栏显示的是请求页面的地址 ,request 数据可以保
存。
b. 转发属于一次请求一次响应 , 重定向属于两次请求 ( 地址栏修改了两次 ) 两次响应。
补充 : 使用 out 对象往页面中输出 js html,css
: 使用 js 跳转页面,也会丢失 request 中的数据

7.会话

request 存的值只能在单次请求中保存,保存的数据不能跨页面 , 当重定向时 ,request 存的值会丢失
session 的数据可以在多个页面中共享 , 即使重定向页面 , 数据不会丢失
session 中可以包含 n request
会话的概念 : 从打开浏览器到关闭浏览器 , 期间访问服务器就称为一次会话
常用方法 :
void setAttribute(String key,Object value) key/value 的形式保存对象值 , 将数据存储在服务器端
Object getAttribute(String key) 通过 key 获取对象值
void invalidate() 设置 session 对象失效
String getId() 获取 sessionid, 当第一次登录成功后, session 会产生一个唯一的 id ,浏览器之后访问时如果发现 id
还是之前 id ,那么说明 当前访问的属于同一个会话
void setMaxInactiveInterval(int interval) 设定 session 的非活动时间
示例 :
方式 1: session.setMaxInactiveInterval(10*60);// 设置有效时间为 10 分钟
方式 2: 修改 web.xml
int getMaxInactiveInterval() 获取 session 的有效非活动时间 ( 以秒为单位 ) ,默认的有效时间 :30 分钟
void removeAttribute(String key)
session 中删除指定名称 (key) 所对应的对象
out.print("<script type='text/javascript'>alert(' 登录失败 ');location='../login.jsp'</script>");
<session-config>
<session-timeout>10</session-timeout>// 单位 : 分钟
</session-config> 小结 : session 失效的方式
1 invalidate() 2 removeAttribute("key") 3 )直接关闭浏览器。
示例 : 使用 session 验证用户是否登录
补充 :
自动刷新到某页面 :
: head 标签中添加该标签,单位 :
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值