Servlet、Request、Response、filter、listener
来源:互联网 发布:jquery.form.js教程 编辑:程序博客网 时间:2024/04/29 19:07
servlet
servlet生命周期:
init:一般在第一次访问的时候会调用,如果在web.xml中配置了 <load-on-startup>1[启动顺序,1最大]</>的话,服务器启动时调用[Struts]
service: 每次请求都会调用,运行在子线程[同一个servlet,存在线程安全问题,SingleTreadModel(多个)]
destroy: 服务器停止或重新启动调用
web.xml 修改不许重新发布 conf/context.xml 自动检测
servlet 映射: servlet-mapping
/*.* /*.html[伪静态] 通配符 *在前面,优先级最低 *.html最低 < *
/缺省 url找不到,缺省处理 [conf/web.xml defualt]
给次请求都会有新的 request response
servletConfig:加载配置信息
在servlet init中,HttpServlet提供getServletConfig().getInitParameter("key");
<servlet><servlet-name>Ss</servlet-name><servlet-class>Ss</servlet-class><init-param><param-name>servletConfigData</param-name><param-value>servletConfigValue</param-value></init-param></servlet>
Struts 加载 struts-config.xml
ServletContext(当前应用,context域,application)
1.servlet数据共享:
全局 setAttribute("",""); getAttribute("","");
2.初始化参数:
getServletContext().getInitParameter("");
web.xml中:
<context-param><param-name>x</param-name><param-value>xx</param-value></context-param>3.servlet转发:
RequestDispatcher rd = getServletContext().getRequestDispatcher("x.jsp");rd.forward(request, response);4.读取资源/配置文件:[类装载(文件不可太大,只装载一次)]
HttpServlet:复写了service方法,自动判断请求方法,实现事件分发,一般
只要实现 doGet/doPost方法
Request[域${xx}]
www.baidu.com 主机名 baidu.com 域名(购买,域下可以以搭建多个网站)
https://xxx.cn/ccc/xx.html url /ccc/xx.html uri
request.getRequestURI();//权限管理request.getRequestURL();request.getQueryString();//?name=xx 参数name=xx request.getRemoteAddr();//ip地址request.getRemoteHost();//主机名 需要dns注册request.getRemotePort();//访问端口request.getLocalAddr();//服务器地址request.getMethod();//请求方式1获取请求头 信息
request.getHeader("");Enumeration<String> e = request.getHeaders("");while(e.hasMoreElements())//遍历所有的头{String value = e.nextElement();}
2获取数据
request.getParameter("");//String[] values = request.getParameterValues("");// ?a=1&a=2 同名参数Map<String, String[]> parameterMap = request.getParameterMap(); // key:values 同名参request.getCookies();// 获得cookie
3表单和输入项
<form action="/xx/servlet/XxServlet" method="post">名字<input type="text" name="user_name" /> <br/>密码<input type="password" name="pwd" /> <br/>性别<input type="radio" name="sex" />男 <br/> <input type="radio" name="sex" />女 <br/>所在地<select name="location"><option value="beijing">北京</option><option value="sh">上海</option><option value="gz">广州</option></select> <br/>爱好<input type="checkbox" name="habits" />爱好1 <input type="checkbox" name="habits" />爱好2<input type="checkbox" name="habits" />爱好3<input type="checkbox" name="habits" />爱好4 <input type="checkbox" name="habits" />爱好5 <br/>信息<textarea rows="10" cols="50" name="detail"></textarea><br/>照片<input type="file" name="headImg"><br/><input type="hidden" name="hidden" value="xxxx"><br/></form><a href="/xx/servlet/xxServlet">点击</a>
4乱码
get提交、超链接
反向查找: xx = new String( xx.getBytes("iso8859-1") , "utf-8"):
post:
在过去参数前: request.setCharacterEncoding("urf-8");
改服务器配置(tomcat):
conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" UEIEncoding="utf-8" />
或
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true" />+ request.setCharacterEncoding("urf-8");
5转发
1.客户端只发送一次请求,服务器多个资源调用
2.客户端地址没有变化
request.getParameter("key"); //客户端提交的数据request.setAttribute("key", "value");//服务器自行存储的数据request.getAttribute("key");/** * 1.forward 之前 如果outputStream/writer.close(); 报状态异常 * 2.out.write("".getBytes());然后forward,写的数据将被清空 */request.getRequestDispatcher("/WEB-INF/jsp/xx.jsp").forward(request, response);6包含
//公共部分 不要包含全局html标签request.getRequestDispatcher("/publi/head.jsp").include(request, response);response.getWriter().write("xxx");request.getRequestDispatcher("/publi/foot.jsp").include(request, response);
7防盗链
String header = request.getHeader("referer");if(header == null || !header.startsWith("http://主机名")){response.sendRedirect("/xxProject/index.jsp");//代表:网站 + web应用}
7项目目录
request.getContextPath();
Response
响应头:
写数据:字节、字符不能同时调用
response.setCharacterEncoding("utf-8"); //设置response码表
response.setHead("Content-type","text/html;charset=utf-8");
== out.write("<meta http-equiv='content-type' content='text/html;charset=utf-8'>".getBytes())
== response.setContentType("text/html;charset=utf-8");[+设置response码表 ]
字节:OutputStream
response.getOutputStream().write(“”.getBytes("utf-8"))
中国(utf)编码 涓浗( gbk )打开
字符:PrintWrite写字符/字符串 多个换行
response.getWriter().write("");
addCookie(cookie); // 写cookie
定时刷新
response.setHead("refresh","3;url='xxx.cn' ");
==out.write("<meta http-equiv='refresh' content='3;url=xxxx.cn'>".getBytes())
缓存
response.setHead("expries",3;1000*60);//1分钟
下载
response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode("美女.jpg"));
状态码
请求重定向
response.setStatus(302); response.setHeader("location","/xx/x.html");
==response.sendRedirect("xx/xx.jsp");
Filter
1.指定编码,必须在 链中 第一次调用writer之前!!!
2.doFilter, 执行下一个优先级高的filter 直到最后才放行,,,链
3.一个ffilter可以配置多个mapping
web.xml
<filter> <filter-name>MyFilter</filter-name> <filter-class>junit.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/xx.html</url-pattern> <!--资源 --> <servlet-name>xxServlet</servlet-name><!--名称 --> <dispatcher>REQUEST</dispatcher><!-- 类别FORWARD INCLUDE REQUEST ERROR --> <dispatcher>ERROR</dispatcher> </filter-mapping>
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{//指定编码,必须在 链中 第一次调用writer之前!!!response.setContentType("text/html;charset=utf-8");response.getWriter().write("before");// 链条 执行下一个优先级高的filter 直到最后才放行chain.doFilter(request, response);//2 response.getWriter().write("after");//拦击作用}public void init(FilterConfig filterConfig) throws ServletException{//服务器启动加载、服务器关闭摧毁,,和servlet益阳枯叶配置初始化参数}public void destroy(){}
Listener
1.创建 销毁时候的监听
ServletContextListener 整个项目初始化工作
HttpSessionListener 统计并发人数(session误差)、统一管理session,优化内存
ServletRequstListener 统计ip、统计页面的访问次数
HttpSessionBindListener javabean实现接口(不需要注册)统计在线用户
2.服务器启动,监听器自动实例化(listener比filter先实例化)
3.
web.xml注册:
<listener> <listener-class>com.xxx.aaListener</listener-class> </listener>
- Servlet、Request、Response、filter、listener
- Servlet Filter Servlet Listener
- request&response&listenner&filter
- Servlet、Filter和Listener
- servlet,filter,listener
- java filter servlet listener
- servlet,filter,listener
- Servlet,Filter,Listener,Interceptor
- Servlet、Filter、Listener、Interceptor
- Servlet、Filter和Listener
- Servlet、Filter、Listener总结
- Servlet,Filter,Listener,Interceptor
- servlet,filter,interceptor,listener
- Servlet,Filter,Listener,Interceptor
- Servlet、Filter、Listener、Interceptor
- Servlet、Filter和Listener
- servlet filter listener interceptor
- servlet Filter Listener总结
- 新浪微博-首页的普通文本转换富文本
- 靠谱的爱代驾司机
- java的equals、hashcode和Clone方法
- 网易新闻
- [MySQL FAQ]系列 — 从MyISAM转到InnoDB需要注意什
- Servlet、Request、Response、filter、listener
- android异常
- Lambda表达式详解
- XJOI 迷你火车头
- android ContentProvider
- Dubbo入门例子HelloWorld
- 牛顿插值法
- Tutorial One
- 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突