Servlet学习
一、Servlet 的生命周期
过程:
servlet类加载-->实例化-->服务-->销毁
- Web Client 向 Servlet 容器(Tomcat)发出 Http 请求
- Servlet 容器接收 Web Client 请求
- Servlet 容器创建一个 HttpServletRequest 对象,将 Web Client 请求的信息封装到这个对象中
- Servlet 容器创建一个 HttpServletResponse对象
- Servlet 容器调用HttpServlet 对象 service 方法,把Request 与 Response作为参数,传给 HttpServlet
- HttpServlet 调用 HttpServletRequest 对象的有关方法,获取 Http 请求信息
- HttpServlet 调用 HttpServletResponse 对象的有关方法,生成响应数据
- Servlet 容器把 HttpServlet 的响应结果传给 Web Client
二、HttpServletRequest对象
1.
@WebServlet("/ser01") //@WebServlet(name = "Servlet01", value = "/ser01") //ser01和ser001都可以访问到 //@WebServlet(name = "Servlet01", value = {"/ser01","/ser001"}) public class Servlet01 extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //常用方法: //1.获取请求时候的完整路径(从Http开始,到”?“结束) // 要转一下类型,加String或者是后面=""; String url = request.getRequestURL()+""; System.out.println("完整路径"+url); //2.获取请求时候的部分路径(从项目站点名开始到”?“结束) String uri = request.getRequestURI(); System.out.println("部分路径:"+uri); //3.获取请求的参数字符串(从”?“开始到最后的字符串) String queryString = request.getQueryString(); System.out.println("参数字符串:"+queryString); //4.获取请求方式: String method = request.getMethod(); System.out.println("请求方式:"+method); //5.获取请求协议版本: String protocol = request.getProtocol(); System.out.println("协议版本:"+protocol); //6.获取项目的站点名(项目对外访问路径) String web = request.getContextPath(); System.out.println("项目站点名:"+web); } }
浏览器:
控制台:
在浏览器中再输入一些参数:
2.获取请求参数
//获取请求的参数 //获取指定名称的参数值,返回字符串 String uname = request.getParameter("uname"); String upwd = request.getParameter("upwd"); System.out.println("uname:"+uname); System.out.println("upws:"+upwd); //获取指定名称的参数的所有参数值,返回字符串数组(用于复选框) String[] hobbys = request.getParameterValues("hobby"); //遍历时先判断数组是否为空 if(hobbys != null && hobbys.length > 0){ //foreach循环 for (String hobby : hobbys) { System.out.println("hobby:"+hobby); } }
三、Servlet请求转发
1.特点:
可以请求从服务端跳转到客户端或者是指定的 Servlet 。
是一种服务端的行为,且地址栏是不会发生改变的,从始至终只有一个请求,既数据可以共享。
2.格式:
//request.getRequestDispatcher(url).forward(request,response);
request.getRequestDispatcher("ser02").forward(request,response);//转到servlet
request.getRequestDispatcher("login.jsp").forward(request,response);//转到jsp页面
request.getRequestDispatcher("login.html").forward(request,response);//转到html页面
//注意只能跳转到一个页面
四、request 域对象
通常用于后台传递数据到页面:把数据存到作用域里面,通过请求转发跳转过来,将数据传过来
1.格式:
request.setAttribute(String name,String value);//设立
request.getAttribute(String name);//获取(需要类型转换一下)
request.removeAttribute(String name);//删除域对象 //请求转发 request.getRequestDispatcher("ser02").forward(request,response);
2.例子1(从Servlet 跳转到Servlet):