Servlet——在web服务器里面跑的java程序
来源:互联网 发布:淘宝店铺如何加权重 编辑:程序博客网 时间:2024/05/21 15:45
Servlet能够接收来自每个客户端(含PC和移动端)的请求,并做出响应,双方遵循HTTP协议
1.Servlet作用
是JavaEE这个标准中的技术之一,它可以: 01——根据用户状态,动态显示Web页面 02——接收客户表单参数,并进行处理,根据处理结果,向客户端响应信息,例如:注册成功,登录失败。。。
2.Servlet程序创建
一.创建一个普通Java类,实现Servlet接口(servlet必须在web.xml里面配置)
二.创建一个普通Java类,继承GenericServlet抽象类;
三.创建一个普通Java类,继承HttpServlet类;
注意:前两个可以处理任意协议的请求,最后一个只能接受http协议的请求(doGet()和doPost()方式);
3.Servlet生命周期
Servlet运行于Web服务器中的Servlet引擎/容器中
客户端是不能直接调用Servlet,必须由Servlet引擎/容器才能调用。
Servlet在引擎/容器中从创建到销毁的全过程,称之为Servlet生命周期
Servlet生命周期分为四个过程,分别是:
01——构造器(执行一次)
02——初始化(执行一次) —-在默认情况下,首次访问该Servlet时执行
03——doGet/doPost/service(执行多次)—-非首次访问该Servlet时执行
04——销毁(执行一次)
Servlet是单例的,被多个客户端线程共享,建议不要用实例变量
4.ServletConfig对象
当Servlet配置了初始化参数后
<init-param> <param-name>encoding</param-name> <param-value>GBK</param-value></init-param>
Servlet引擎/容器在创建Servlet对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用Servlet的init方法时,将ServletConfig对象传递给Servlet。可以通过ServletConfig对象就可以得到当前Servlet的初始化参数信息(getInitParameter(),getInitParameterNames())
配置Servlet自动加载
在默认情况下,Servlet是客户端首次访问时,Servlet引擎/容器才创建并对其初始化,
有时我们希望Servlet创建与初始化的时间能够提前到Web服务器启动时,这样客户
端首次访问时,就不用创建与初始化Servlet了,提高了访问速度,我们可以用自动
加载Servlet来完成任务
配置的数值越小,越先创建与初始化,只限于0,1,2,3等等,负数与没有配置效果一样 如果配置负数,必须用户首次访问时才创建与初始化该Servlet web.xml
<load-on-startup>1</load-on-startup>
配置Servlet虚拟路径url-pattern
1.Servlet虚拟路径
一个在web.xml文件中,可供外界能访问Web服务器中Servlet的字符串
2.为什么要配置Servlet虚拟路径
Servlet位于Servlet引擎/容器中,Servlet引擎/容器又位于Web服务器中,客户端是不可能知道Servlet的名字的,但Servlet毕竟要处理客户端提交的请求,就必须让客户端访问,那么要访问Servlet,就必须给客户端一个有效的访问路径,又不能暴露Servlet真实保存在服务器中的位置,于是就只能配置Servlet虚拟路径
3.如何配置Servlet虚拟路径
Servlet虚拟路径的配置是在web.xml文件中,一个Servlet可以配置在一个或多个虚拟路径上,也可以使用*.xx或者是/xx的形式来配置Servlet路径通配符
不能出现/*.do的情况,只能分成二个url-pattern来书写, 当一个真正的index.html与一个虚拟路径为index.html同时存在时,以虚拟路径为主
<url-pattern>/</url-pattern>默认Servlet专用于处理其它正常Servlet不处理的客户端请求
5.ServletContext对象
Tomcat启动时,会为每个部署在Tomcat 中的Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用。即一个Web应用程序对应着一个ServletContext对象。
一个Web应用程序中可以有很多Servlet,这些Servlet都共享同一个ServletContext对象,ServletContext对象叫域对象。
常用的API
ServletConfig的getServletContext():获取ServletContext对象
ServletContext的setAttribute():向ServletContext对象绑定数据
ServletContext的getAttribute():从ServletContext对象取出数据
ServletContext的getInitParameter():获取当前Web应用的初始化参数
ServletContext的getResourceAsStream():获取资源文件,返回流
ServletContext的getRealPath():获取资源文件,返回路径
<context-param> <param-name>conten</param-name> <param-value>keyikeyi</param-value> </context-param>
6.Request对象【全称为HttpServletRequest】
客户端向服务器发送请求时,所有客户端信息都封装在Request对象中,我们可以通过Request对象来获取客户端相关信息。
Request常用API
1.获取客户机信息
getRequestURL()方法返回客户端发出请求时的完整URL
getRequestURI()方法返回请求行中的资源名部分
getQueryString()方法返回请求行中的参数部分
getRemoteAddr()方法返回发出请求的客户机的IP地址
getLocalAddr()方法返回WEB服务器的IP地址
getMethod()方法返回客户机请求方式 GET POST
getContextPath()方法返回当前web应用根目录
getServletPath()方法返回Servlet映射路径
2. 获取请求头信息
getHeader(User-Agent)方法返回请求头的值
3. 获取请求体参数
getParameter()方法通过name获得值
getParameterValues()方法通过name获得多值
getParameterNames ()方法获得所有name
表单提交中文乱码的原因和解决方案
原因:编码与解码的方式不一样
解决方案
1.通用方式:适用于GET和POST
byte[] buf = username.getBytes(“ISO8859-1”);按ISO8859-1编码
String username = new String(buf,”UTF-8”);按UTF-8解码
2.专用方式:适用于POST
request.setCharacterEncoding(“UTF-8”);针对请求体内容按UTF-8编码
如果项目中GET和POST业务功能相同的话,可以在doGet()方法中调用doPost()
Request域对象
1 什么是域对象
域对象初学者可以理解为一个容器,可以暂存String-Object这种key-value形式的数据域对象保存时间是不同的,有的域对象保存时间在一次请求中;有的域对象保存时间在一次会话中;有的域对象保存时间在整个应用中。其中Request域对象保存时间只在一次请求中,也就是说一次请求完毕后,Request域对象就销毁了,一旦Request域对象销毁,那么存在其中的数据也就不存在了。
2 为什么需要域对象
有时我们的业务,一个Servlet完成不了,需要另一个Servlet帮忙,这就是说,我们需要在二个或多个Servlet之间传递数据,域对象就负责完成这项任务
3 Request对象有二层含义:
01——代表客户端向服务器的请求对象,如getParameter(“username”)
02——代表可以暂存数据的域对象,如下如示API
4 Request作为域对象常用的API
setAttribute():向域对象中绑定key=value形式的数据
getAttribute():从域对象中根据key找value,如果取到不到,返回NULL
removeAttribute():从域对象中删除key对应的value
Request何时创建: 一次请求来到Servlet
Request何时销毁: 服务器将内容响应到客户端后,Request就销毁
5 Request转发
多个Servlet配合工作,有些时候,一个Servlet不能很好的完成业务工作,需要另一个Servlet来配合。这就是说,很有可能一个Servlet需要将流程交由另一个Servlet,此时就要用转发或重定向这二个技术了,这里我们谈Request转发。
要转发必须得用Request.getRequestDispatcher().forward()方法
转发是服务器内部的事,与浏览器无关,所以浏览器的地址栏不会变,原来浏览器以什么方式提交数据,转发到另一个Servlet依然执行对应的doXxx方法。
浏览器以POST提交—第一个Servlet::doPost—第二个Servlet::doPost
浏览器以GET提交—第一个Servlet::doGet—第二个Servlet::doGet
注意:转发不限于Servlet之间,Servlet也可以转发到HTML和JSP页面
- Servlet——在web服务器里面跑的java程序
- 利用Java Servlet实现在Web服务器平台上的开发
- 【Java.Web】Servlet —— Servlet的类的体系结构
- 【Java.Web】Servlet —— Servlet的类的体系结构
- 【Java.Web】Servlet —— Servlet(JavaWeb)的生命周期
- tomcat——简单的Web服务器和Servlet容器
- Java服务器小程序----Servlet
- servlet是在服务器上运行的小程序
- Servlet服务器和java Web的相关操作
- request,session,application在java web 里面的关系
- 【Java Web】——Servlet
- web.xml里面定义在servletcontex、Servlet和Filter的参数:
- web服务器默认的servlet
- 浅谈Servlet的Web服务器
- 一个简单的java web程序(servlet实现接口)
- 【Java.Web】Servlet —— Servlet容器的启动及Servlet创建及初始化,容器默认的Servlet
- java里面的小程序
- 【Java.Web】Servlet —— 请求的转发和包含
- try catch语句中执行条件判断使用response.end时提示thread abort错误的解决方案
- 前端--Chocolatey安装
- 西安互联网公司3年工作生涯总结
- Android 面试题
- ubantu系统调整分辨率小记
- Servlet——在web服务器里面跑的java程序
- 自增自减运算
- iOS获取时间戳
- spring中加入log4jdbc-remix
- 1622-5 孔富晨 总结《2016年12月5日》 【连续第66天总结】
- Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠
- javaSE jdbc的连接 详记
- 二维数组中的查找
- 149. Max Points on a Line