Servlet(Servlet Applet),全程Java Servlet。是java编写的服务器端程序,主要功能是在交互式地浏览和修改数据,生成动态web内容。 工作模式:
客户端发送至服务器。服务器启动并调用Servlet,Servlet根据用户客户端生成响应内容并传给服务器。服务器响应返回客户端。自定义名称须一致。 当用户访问网页,向服务器发送请求。服务器在web的xml配置文件中找到servlet映射中url-parttern与html标签内容一致的servlet-name。并在servlet中对前面的servlet-name进行匹配。后执行对应servlet-class中的处理类
当客户端发送第一次请求后,由web服务器去解析请求,根据请求找到对应的servlet,判断该类是否存在,如果不存在则创建servlet实例,调用其init()方法进行初始化,初始化完成后调用service()方法,由service()判断客户端的请求方式,如果是get,则执行doGet()方法,如果是post,则执行doPost()方法。处理完成后将结果返还给客户端,单次请求处理完毕。 当客户端发送第二次请求后,由web服务器去解析请求,根据请求找到对应的servlet,判断该对象是否存在,如果存在则直接调用service()方法,再调用doGet()或doPost()方法。 当服务器关闭时调用destroy()方法。
HttpServletRequest表示Http环境中的Servlet请求。他扩展于javax.servlet.ServletRequest接口。
String getParameter(String name) 根据表单组件名称获取提交数据,返回值是String 注:服务器在接收数据时使用字符串统一接收String[ ] getParameterValues(String name) 获取表单组件对应多个值时的请求数据void setCharacterEncoding(String charset) 指定每个请求的编码(针对post请求才起作用)RequestDispatcher getRequestDispatcher(String path)//跳转页面 返回一个RequestDispatcher对象,该对象的forward( )方法用于转发请求 示例如下: req.getRequestDispatcher().forward(req.resp);sendRedirect(String var1);//发送响应码,将浏览器跳转到指定位置
重定向和转发的对比
重定向:response.sendRedirect()
转发:request.getRequestDispatcher("…/success.jsp").forward(request,response);
相同点:都用来跳转页面
不同点:
重定向时地址栏会改变,request中存储的数据会丢失.转发时地址栏显示的是请求页面的地址,request数据可以保 存。转发属于一次请求一次响应,重定向属于两次请求(地址栏修改了两次)两次响应。 补充:使用out对象往页面中输出js或html,css.request存储的值只能在单词请求中保存,保存的数据不能跨页面,当重定向时,request的存的值会丢失。 Session的数据可以在多个页面中共享,即使重定向页面,数据不会丢失。 session中可以包含多个request。 从打开浏览器到关闭浏览器,期间访问服务器称为一次会话。 常用方法如下:
void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端Object getAttribute(String key) 通过key获取对象值void invalidate() 设置session对象失效String **getId() **获取sessionid,当第一次登录成功后,session会产生一个唯一的id,浏览器之后访问时如果发现id值 还是之前id,那么说明 当前访问的属于同一个会话**getMaxInactiveInterval()**获取session的非活动时间void setMaxInactiveInterval(int interval) 设定session的非活动时间 方式1: session**.setMaxInactiveInterval(10*60)**;//设置有效时间为10分钟 方式2:修改web.xml <session-config> <session-timeout>10</session-timeout>//单位:分钟 </session-config>局部初始化参数
在web.xml中定义初始化参数 <servlet> <servlet-name></servlet-name> <servlet-class></servlet-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </servlet>在servlet中获取参数,通过重写int()有参方法
为了使初始化的变量可以在service中被调用,将变量提到全局变量。
String encoding = null; public void init(ServletConfig config) throws ServletException { encoding= config.getInitParameter("encoding"); }全局初始化参数
定义,context-param是和servlet标签同级别 <context-param> <param-name>globalEncoding</param-name> <param-value>utf-8</param-value> </context-param> 获得数据 @Override // 请求->init()->service()->doget/dopost->destory(); public void init(ServletConfig config) throws ServletException { globalEncoding=config.getServletContext().getInitParameter("bianma"); }