• Servlet小结


    1.sevlet的生命周期

    用户在发送第一次请求的时候Servlet对象被实例化(AServlet的构造方法被执行了。并且执行的是无参数构造方法。)

    AServlet对象被创建出来之后,Tomcat服务器马上调用了AServlet对象的init方法。(init方法在执行的时候,AServlet对象已经存在了。已经被创建出来了。)

    用户发送第一次请求的时候,init方法执行之后,Tomcat服务器马上调用AServlet对象的service方法。之后每发送一次请求,都调用一次service方法

    destroy方法在服务器关闭的时候被调用,只调用一次

    2.GenericServlet、ServletConfig、ServletContext

    GenericServlet是一个适配器(不算常用)

    ServletConfig保存配置信息,一个Servlet对应一个ServletConfig对象。

    ServletContext对象通常对应的是一个web.xml文件,是应用级对象。数据量小、所有用户共享、又不修改,这样的数据放到ServletContext这个应用域当中,会大大提升效率。其中setAttribute、getAttribute、removeAttribute方法用来存放,取出,删除数据。

    public class ConfigTest extends GenericServlet {
        @Override
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            servletResponse.setContentType("text/html");
            PrintWriter pw=servletResponse.getWriter();
    
            Enumeration<String> names=this.getInitParameterNames();  //获取name集合
    
            while(names.hasMoreElements()){
    
                String pn=names.nextElement();//取元素
                String values=this.getInitParameter(pn); //获取values
                pw.print(pn);
                pw.println(values);
    
            }
    
            //获取servletcontext对象
            ServletContext application=  this.getServletContext();
            ServletContext application2=  this.getServletContext();
            pw.print(application);  //@514f4874
            pw.print(application);  //@514f4874
        }
    

    3.GET与POST区别

    get请求比较适合从服务器端获取数据。
    post请求比较适合向服务器端传送数据。
    get请求是安全的。get请求是绝对安全的。
    get请求发送数据的时候,数据会挂在URI的后面,并且在URI后面添加一个“?”,"?"后面是数据。这样会导致发送的数据回显在浏览器的地址栏上。(get请求在“请求行”上发送数据)
    post请求发送数据的时候,在请求体当中发送。不会回显到浏览器的地址栏上。也就是说post发送的数据,在浏览器地址栏上看不到。(post在“请求体”当中发送数据)

    4.HttpServlet与欢迎页面

    我们编写的HelloServlet直接继承HttpServlet,直接重写HttpServlet类中的service()方法行吗?
    可以,只不过你享受不到405错误。享受不到HTTP协议专属的东西。

    怎么设置欢迎页面,打开web.xml

    <welcome-file-list>
            <welcome-file>login.htmlwelcome-file>
        welcome-file-list>
    

    注意:设置欢迎页面的时候,这个路径不需要以“/”开始。并且这个路径默认是从webapp的根下开始查找。一个webapp是可以设置多个欢迎页面的。越靠上的优先级越高。找不到的继续向下找。

    5.HttpServletRequest

    request对象和response对象,一个是请求对象,一个是响应对象。这两个对象只在当前请求中有效。

    怎么获取前端浏览器用户提交的数据?

    Map<String,String[]> getParameterMap() 这个是获取Map
    Enumeration<String> getParameterNames() 这个是获取Map集合中所有的key
    String[] getParameterValues(String name) 根据key获取Map集合的value
    String getParameter(String name)  获取value这个一维数组当中的第一个元素。这个方法最常用。
    
    public class RequestTest extends HttpServlet {
    
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        Enumeration<String> er= req.getParameterNames();
        while(er.hasMoreElements()){
            String name=er.nextElement();
            System.out.println(name+"="+req.getParameter(name));//只能接受一个
    
        }
            System.out.println("=========方式二============");
        //方式二
    String[] name=req.getParameterValues("username");
    String []password=req.getParameterValues("userpassword");
    String[] hobby=req.getParameterValues("userhobby");
            for (String s:name
                 ) {
                System.out.println(s);
            }
            for (String s:password
            ) {
                System.out.println(s);
            }
            for (String s:hobby
            ) {
                System.out.println(s);
            }
            System.out.println("=========方式三==========");
            //最常用方法  只能输出一个,但是复选框可以使用getParameterValues
            String s=req.getParameter("username");
            String s1=req.getParameter("userpassword");
            String[] s2=req.getParameterValues("userhobby");
            System.out.println(s+"  "+s1+"  ");
            for (String  shobby:s2
            ) {
                System.out.println(shobby);
            }
           /*  以下方法返回一个一位数组,输出tostring方法
           System.out.println(req.getParameterValues("username"));
            System.out.println(req.getParameterValues("userpassword"));
            System.out.println(req.getParameterValues("userhobby"));
            */
        }
    
    输出:
    username=admin
    userpassword=admin
    userhobby=read
    =========方式二============
    admin
    admin
    read
    run
    =========方式三==========
    admin  admin  
    read
    run
    

    转发机制:

    request.getRequestDispatcher("/b").forward(request,response);
    
  • 相关阅读:
    阿里云物联网IOT平台使用案例教程(模拟智能设备)
    在线客服系统统计员工的一些工作量,有哪些统计维度?
    wxpython的ListCtrl的复选框问题
    【论文笔记】基于强化学习的连续型机械臂自适应跟踪控制
    数据库缓存服务——NoSQL之Redis配置与优化
    挑战52天背完小猪佩奇(第02天)
    Turtle绘制五角星-第10届蓝桥杯省赛Python真题精选
    怎么打造小红书爆款笔记账号?教你几招
    【图论算法】图的表示与拓补排序
    module ‘torch‘ has no attribute ‘_six‘问题解决
  • 原文地址:https://www.cnblogs.com/hzxiang/p/16685646.html