码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet入门

时间:2018-07-25 23:59:30      阅读:341      评论:0      收藏:0      [点我收藏+]

标签:his   关闭浏览器   gen   --   分配   入门   数值   编码   remote   

一、什么是Servlet

1、概念:servlet(java服务器小程序)是用java编写的服务器程序。
2、特点:(1)由服务器调用和执行;(2)用java语言编写的;(3)按照servlet规范开发;(4)功能强大,可以完成几乎所有的网站功能;(5)学习jsp的基础。

二、开发servlet的三种方法

1、实现servlet接口。

2、继承GenericServlet。

3、继承HttpServlet。

三、servlet开发流程

1.在%TOMCAT_HOME%/webapps下WEB-INF的文件夹,写一个文件web.xml(该网站的配置信息),建立一个classes的子文件夹,也可以从别的目录ROOT下拷贝

2.开发servlet(引入Tomcat文件夹下lib文件夹里的servlet-api.jar)

3.部署你的servlet(servlet开发流程)

4.启动Tomcat,访问你的servlet,在浏览器的地址栏中输入:http://127.0.0.1:8080/myWebSite/hello回车就可以看到servlet的输出

注意:127.0.0.1是服务器所在的IP,8080是端口号,要根据实际情况定。

在web.xml文件中添加如下代码:
<servlet>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—指明servlet的路径,就是servlet的包+类名-->
<servlet-class>com.test.Hello</servlet-class>
</servlet>
<servlet-mapping>
<!—给servlet取名,可以随意取名-->
<servlet-name>hello</servlet-name>
<!—浏览器中输入的url,可以随意取名-->
<url-pattern>/hello<url-pattern>
</servlet-mapping>

四、servlet的生命周期

servlet的生命周期分为以下几个阶段:
1.装载servlet,由相应的容器来完成
2.创建一个servlet实例
3.调用servlet的init()方法,该方法只会在第一次访问servlet时被调用一次
4.服务:调用servlet的service()方法,一般业务逻辑在这里处理,该方法在访问该servlet时,会被调用
5.销毁:调用servlet的destroy()方法,销毁该servlet实例,该方法在以下情况被调用:
a)tomcat重新启动
b)reload该webapps
c)重新启动电脑

五、开发Servlet的两种方法

1、通过GenericServlet去开发servlet,只需要重写service方法;
2、通过HttpServlet去开发servlet,需要重写doGet、doPost方法,这是目前用的最多的一种方法。

六、Servlet常用对象

技术分享图片

1、Request

request对象是服务器对浏览器请求的封装,request用来取出请求信息。
(1)request概述
request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法,这说明在service()方法中可以通过request对象来获取请求数据。
(2)request域方法
a、void setAttribute(String name, Object value):用来存储一个对象,也可以称之为存储一个域属性,例如:servletContext.setAttribute(“xxx”, “XXX”),在request中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

b、Object getAttribute(String name):用来获取request中的数据,当前在获取之前需要先去存储才行,例如:String value = (String)request.getAttribute(“xxx”);,获取名为xxx的域属性;

c、 void removeAttribute(String name):用来移除request中的域属性,如果参数name指定的域属性不存在,则该方法无用;

d、 Enumeration getAttributeNames():获取所有域属性的名称。

(3)request获取请求头数据
a、String getHeader(String name):获取指定名称的请求头;

b、Enumeration getHeaderNames():获取所有请求头名称;

c 、int getIntHeader(String name):获取值为int类型的请求头。

(4)request请求相关方法

a、int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;

b、String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;

c、String getMethod():返回请求方法,例如:GET

d、Locale getLocale():返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;

e、String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;

f、void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!

g、String getContextPath():返回上下文路径,例如:/hello

h、String getQueryString():返回请求URL中的参数,例如:name=zhangSan

i、String getRequestURI():返回请求URI路径,例如:/hello/oneServlet

jStringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息

l、String getServletPath():返回Servlet路径,例如:/oneServlet
m、String getRemoteAddr():返回当前客户端的IP地址;

n、String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
x、String getScheme():返回请求协议,例如:http;

y、String getServerName():返回主机名,例如:localhost

z、int getServerPort():返回服务器端口号,例如:8080。
技术分享图片

(5)常见的客户端传递参数方式

a、浏览器地址栏直接输入:一定是GET请求;

b、 超链接:一定是GET请求;

c、 表单:可以是GET,也可以是POST,这取决与<form>的method属性值;

(6)GET请求和POST请求的区别:

A、 GET请求:

a.请求参数会在浏览器的地址栏中显示,所以不安全;

b.请求参数长度限制长度在1K之内;

c.GET请求没有请求体,无法通过request.setCharacterEncoding()来设置参数的编码;

B、POST请求:

a.请求参数不会显示浏览器的地址栏,相对安全;

b.请求参数长度没有限制;

(7)request获取请求参数的API
a、String getParameter(String name):通过指定名称获取参数值。
b、String[] getParameterValues(String name):当多个参数名称相同时,可以使用方法来获取。
c、Enumeration getParameterNames():获取所有参数的名字。
d、Map getParameterMap():获取所有参数封装到Map中,其中key为参数名,value为参数值,因为一个参数名称可能有多个值,所以参数值是String[],而不是String。

2、Response

response则用来添加要返回给浏览器的信息。
Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。Response对象只提供了一个数据集合cookie,它用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。
(1)write
作用:向客户端发送浏览器能够处理的各种数据,包括:html代码,脚本程序等。response.write **
(2)redirect
作用:在服务器端重定向于另一个网页。response.redirect(“url”)

3、Cookie

4、Session

(1)什么是session:session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间反复连接,反复刷新一个页面,服务器应当通过某种办法知道这是同一个客户,这就需要session对象。
(2)session对象的ID:当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个session对象,同时分配一个String类型的ID号,JSP引擎同时将这个ID号发送到客户端,存放在Cookie中,这样session对象和客户之间就建立了一一对应的关系。当客户再访问连接该服务器的其他页面时,不再分配给客户新的session对象,直到客户关闭浏览器后,服务器端该客户的session对象才取消,并且和客户的会话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的session对象。

5、ServletContext**

一个共用的空间,可以被所有的用户访问。
使用ServletContext:
(1)如何得到ServletContext实例
this.getServletContext();
(2)和session非常相似,每一行就是一个属性:
添加属性setAttribute(String name, Object ob);
得到值getAttribute(String name); 返回Object
删除属性removeAttribute(String name);
(3)生命周期
ServletContext中的生命周期从创建开始,到服务器关闭而结束。

使用ServletContext的注意事项:
因为存在ServletContext中的数据会长时间保存在服务器,会占用内存,因此我们建议不要向ServletContext中添加过大的数据,切忌。

使用ServletContext实例:
在网站开发中,有很多功能需要使用ServletContext,比如:
1.网站计数器
2.网站在线用户显示
3.简单的聊天系统
总之,如果是涉及到不同用户共享数据,而这些数据量不大,同时又不希望写入数据库中,我们就可以考虑使用ServletContext来实现。

七、四大作用域

1、application:全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。

2、session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。

3、request:请求作用域,就是客户端的一次请求。

4、page:一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filter)。

Servlet入门

标签:his   关闭浏览器   gen   --   分配   入门   数值   编码   remote   

原文地址:http://blog.51cto.com/13678728/2150222

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!