1、servlet
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.csdn.servlet.LoginServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>login</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
a)一对好基友,<servlet>
标签注册了一个servlet,并标明了该servlet所在的路径,
<servlet-mapping>
标签则指明了什么样的请求该由这个servlet来处理,如上说明该servlet处理host:8080/login这个请求
b)如果有多个servlet-mapping的情况下匹配的优先级问题:
精准匹配/add/a/b 1
最长匹配/add/* 2
后缀匹配*.do 3
默认匹配/ 4
如 host:端口/add/a/b
匹配1,host:端口/add/a
匹配2,host:端口/ssss/aaa/ddd.do
匹配3,host:端口/a/b/c/d
匹配4
c)配置多个servlet时的加载顺序,<load-on-stratup></load-on-startup>
数字越小的优先加载。负数表示延时加载,第一次用到该servlet之前才加载。
2、 Filter
<filter>
<filter-name>loginfilter</filter-name>
<filter-class>com.csdn.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginfilter</filter-name>
<!--这里是对某种类型的请求注册过滤器,
还可以这样写<url-servlet>LoginServlet</url-servlet>就是为某个servlet注册过滤器
-->
<url-pattern>/login</url-pattern>
</filter-mapping>
当web.xml配置了多个Filter的时候,Filter的加载顺序和<url-pattern>
标签出现的顺序相同,即此标签出现的顺序决定了Filter的加载顺序
过滤器配置与servlet类似,如下是一个Filter的简单实现:
package com.csdn.Filter;
import javax.servlet.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by zhang on 2016/12/11.
* 实现javax.servlet.Filter接口
* 重写三个方法 init(),doFilter(),destory()
*
*
* 主要用到的方法是doFilter()方法
*/
public class AFilter implements Filter {
//初始化Filter的时候做的一些事情
public void init(FilterConfig filterConfig) throws ServletException {}
/**
* 这里主要就是在请求到达对应的servlet之前判断一下客户端的cookie
* 如果之前访问过该页面就会相应的有一个key为‘a' value为之前的访问次数的cookie
* 如果之前没有访问过就增加一个这样的cookie
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest) servletRequest;
HttpServletResponse resp=(HttpServletResponse)servletResponse;
Cookie[] cookies = req.getCookies();
if(cookies!=null){
boolean a=false;
for(Cookie cookie:cookies){
if(cookie.getName().equals("a")){
a=true;
cookie.setValue(String.valueOf(Integer.parseInt(cookie.getValue())+1));
//将修改过的cookie放到response中,否则修改无效
resp.addCookie(cookie);
}
}
if(!a){
Cookie cookie=new Cookie("a",1+"");
resp.addCookie(cookie);
}
}
//将request、response沿着这个传输链传递下去,此条语句将请求传递到下一个Filter没有Filter了则传递给servlet
filterChain.doFilter(req,resp);
/**servlet是传输的终点,servlet处理完请求后会将request和response原路返回
*此处如果有代码是在servlet处理完返回时才会执行
*/
//doSomething();
}
//销毁destroy的时候做的一些事情
public void destroy() {
}
}
整个传输流程如下图所示(盗图)
3、 listener
实现 EventListener接口,事件监听器的接口,在事件发生时或者结束时做出相应的响应。没有具体用到过
待更新…
4、forward与redirect
a)转发request.getRequestDispatcher(“页面”).forward(request,response)
,客户端地址栏不改变,两个页面之间可以通过request.setAttribute(String name),request.getAttribute(String name)
传值。转发发生在服务器端客户端并不参与
b)request.getParameter(String name)
,用于服务器获取客户端的数据,如客户端页面表单的数据
c)response.getWriter.print(String value)
可以在响应页面打印数据。
d)重定向response.sendRedirect("页面")
,客户端地址栏会改变。相当于客户端发了两次请求。
第一次客户端发请求request1给服务器
服务器接到request1 ,处理后发送response1告诉客户端完成这个请求需要重定向
客户端接到如上的response1后自动发送第二次request2
服务器接到request2,处理,然后发送response2
讲到这里可能有的朋友对Http请求和响应还不是很清楚,
其实request远不是一个URL这么简单,
request分为三部分:Request line,Request header,body
response也是:Response line,Request header,body
这里不详细介绍,有时间来详细总结一下
我们来看一个具体的例子,我请求一个http://www.baidu.com的Request header:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie://一堆cookie
Host:www.baidu.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36
5、cookie
cookie是一个键值对
Cookie c=new Cookie(String a,String b)
创建一个Cookie
response.add(cookie)
将创建的cookie通过response保存到客户端,通过cookie.setValue(String value)
,修改某个cookie的值,修改完成后要add到response才能保存到客户端
Cookie [] cookies=reqest.getCookies();
得到客户端的Cookies
注:以上全部讲解基于java语言