1.什么是servelet:
Servelet实质上是一段Java程序,和之前的Java程序不同的是,Servlet程序无奈独立运行,须要将Servlet程序放在服务器中(比方tomcat服务器),由服务器调用才能够执行。-----Servlet: 服务器端的Java程序.
2.Servelet作用:
其作用是对服务器接管过去的申请进行解决(作用为解决申请)
继承HttpServlet类,默认会笼罩doGet办法和doPost办法,两个办法的作用为:
- doGet办法:当浏览器发送申请的形式为GET提交时, 将会调用doGet办法来处
理申请
- doPost办法:当浏览器发送申请的形式为POST提交时,
将会调用doPost办法来解决申请
提醒:如果当GET提交和POST提交解决代码雷同时,能够将代码写在其中一个方
法里(例如写在doGet中),并在另外一个办法(例如doPost)中调这个办法。这样
一来,不论是GET提交还是POST提交,最终doGet办法都会执行,都会对申请进行解决!!
Servlet在web.xml中的配置
创立servelet时,会主动配置web.xml文件(如果是复制servelet文件,配置文件不会跟着一起复制,需本人配置)(3.0以上版本创立web工程不主动增加web.xml)
对于下面的配置信息:
a) Eclipse每创立一个Servlet,就会在web.xml文件中增加两个标签:<servlet>和
<servlet-mapping>标签(能够将这两个标签看成一个组的标签)
b) <servlet>和<servlet-mapping>标签内都会有一个<servlet-name>标签,标签的
内容能够更改,但要求更改后的这两个<servlet-name>标签的内容也必须统一。
c) <servlet-class>标签用于配置Servlet类的全限定类名(即包名+类名)
须要留神:如果在创立Servlet后批改了Servlet类的名称,这个中央也要一起更
改,否则将会呈现"ClassNotFoundException" 即类找不到异样
d) <url-pattern>标签用于配置浏览器以什么门路拜访以后Servlet(即Servlet对外
拜访的门路),默认的门路是:/类名
例如:下面为HelloServlet配置的<url-pattern>为/HelloServlet,因而咱们在浏览
器中的拜访门路则为:
http://主机名/web我的项目拜访门路...
request和response介绍
request:封装了浏览器发送给服务器的申请信息(申请行、申请头、申请实体等)
申请参数:超链接前面通过问号提交的数据,都是申请参数。
申请参数时的中文乱码:
get:tomcat8.0当前提交不会
post:request.setCharacterEncoding("utf-8");(告诉服务器在接管POST提交的参数时,应用utf-8编码来接管!)
作为域对象应用
request对象上的map汇合以及request对象的所在范畴称之为域对象
存数据:request.setAttribute(String attrName, Object attrValue);
-- 往request域中存入一个域属性,属性名(key)只能是字符串,属性值(value)能够是任意类型。
取对象:request.getAttribute(String attrName);
-- 依据属性名(key)获取对应的属性值(value)。返回的是一个Object类型的对象。
申请转发(forward)
(1)转发是一次申请,一次响应
(2)申请转发前后,浏览器的地址栏地址不会发生变化。(浏览器--拜访--> A --转发--> B,地址栏地址始终指向A的地址)
(3)申请转发前后的两个资源必须属于同一个Web利用,否则将无奈进行转发。(A--转发-->B,A和B必须属于同一个Web利用!)
(4)在转发时,能够带数据到目的地(比方,从A转发到B,能够从A带数据给B,须要配合域对象才能够
response:封装服务器要发送给浏览器的响应信息(状态
行、响应头、响应实体),在service办法执行完后,服务器再将response中的数据取出,依照HTTP协定的格局发送给浏览器。
向客户端发送数据:
PrintWriter out = response.getWriter();
乱码问题:
在响应数据之前,告诉服务器应用utf-8发送数据。
response.setContentType( "text/html;charset=utf-8" );
实现重定向(redirct)
(1)重定向是两次申请、两次响应
(2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次申请都是通过浏览器发动,浏览器晓得这个跳转的过程,因而地址栏地址会变动)
(3)重定向前后的request对象不是同一个(因为重定向是两次申请,服务器会依据两次申请创立两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)
(4)重定向前后的两个资源能够是来自不同的web利用,甚至能够是来自不同的服务器。(进行跳转的两个资源之间没有限度)
实现代码:response.sendRedirect(所重定向到资源的URL地址);
申请转发(forward)和重定向(redirect)的区别?
(1)申请转发是一次申请,一次响应; 而重定向是两次申请两次响应
(2)申请转发前后地址栏地址不会发生变化; 而重定向前后地址栏地址会发生变化
(3)申请转发前后的request对象是同一个,能够配合request域对象带数据到目的地;而重定向前后的request对象不是同一个, 不能联合request域对象在重定向前后带数据.
(4)申请转发要求两个资源必须属于同一个Web利用; 而进行重定向的两个资源能够是同一个Web利用,也能够不是同一个Web利用,甚至能够是来自于不同的主机或服务器.
什么时候用申请转发(forward)?什么时候用重定向(redirect)?
(1)如果心愿跳转前后地址栏地址不会发生变化, 只能应用转发; 如果心愿跳转前后地址栏地址会发生变化, 只能应用重定向
(2)如果心愿在跳转前后, 可能通过request对象带数据到目的地, 只能应用转发
(3)如果仅仅是做一个跳转,没有其余要求,此时举荐应用转发(转发是一次申请,一次响应,能够缩小拜访服务器的次数,升高服务器的压力)