Servlet学习

 

一、Servlet 的生命周期

过程:

  servlet类加载-->实例化-->服务-->销毁

  1. Web Client 向 Servlet 容器(Tomcat)发出 Http 请求
  2. Servlet 容器接收 Web Client 请求
  3. Servlet 容器创建一个 HttpServletRequest 对象,将 Web Client 请求的信息封装到这个对象中
  4. Servlet 容器创建一个 HttpServletResponse对象
  5. Servlet 容器调用HttpServlet 对象 service 方法,把Request 与 Response作为参数,传给 HttpServlet
  6. HttpServlet 调用 HttpServletRequest 对象的有关方法,获取 Http 请求信息
  7. HttpServlet 调用 HttpServletResponse 对象的有关方法,生成响应数据
  8. 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):

 

 

 

 

 

 

posted on 2022-10-10 11:54  201812  阅读(21)  评论(0编辑  收藏  举报