zoukankan      html  css  js  c++  java
  • Servlet学习笔记

    1.doGet()在客户端用GET方式访问servlet时调用,访问url地址

    doPost()在form表单提交时,且mothod为post方式调用

    2.servlet生命周期

    constructor->init->doGet->(再次访问)->doGet

    综上:一个web 容器只有一个servlet对象,再次访问不会重新构造对象

    package cn.xj.servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class TestLifeCycleServer extends HttpServlet{
    
        /**
         * @author Admin
         * 服务不停止,TestLifeCycleServer的对象就存在,且只有刚开始一个
         * init()方法只在初始化的时候执行一次
         */
        
        //1.实例化
        public TestLifeCycleServer()
        {
            System.out.println("constructor!");
        }    
        
        
        @Override
        //2.初始化
        //ServletConfig config存储web.xml的servlet配置信息
        public void init(ServletConfig config) throws ServletException {
            // TODO Auto-generated method stub
            System.out.println("init");
        }
        
        @Override
        //3.处理service, doGet doPost
        public void destroy() {
            // TODO Auto-generated method stub
            System.out.println("destory");
        }
    
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            System.out.println("doGet");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            super.doPost(req, resp);
        }
    
    }

    3.request读取所有参数

    getParameterMap()方式:

    package cn.xj.servlet;
    
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ShowParamsMap extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            resp.setContentType("text/html;charset=utf8");
            PrintWriter out=resp.getWriter();
            String title="Reading all request parameters";
            out.println("<html><head><title>读取所有参数</title></head>"
            +"<body BGCOLOR='FDF5E6'>
    "+"<H1 align=center>"
            +title+"</H1>
    "+"<table border=1 align=center>
    "
            +"<tr bgcolor="#FFAD00">
    "
            +"<th>paramater name<TH>parameter Value(s)");
            
            Map paramsMap=new HashMap();
            paramsMap =req.getParameterMap();
            Set paramsSet =paramsMap.keySet();
            for(Object obj:paramsSet.toArray()){//依次遍历
                String paramName=obj.toString();//依次获取键值对的Key 即 paramName
                //String paramValue=((String[])paramsMap.get(paramName))[0];
                //System.out.println(paramValue);
                out.println("<TR><TD>"+paramName+"
    <TD>");
                //每个paramName对应的value可能多个
                String[] paramValues=(String[]) paramsMap.get(paramName);
                if(paramValues.length==1){//如果就一个就取第一个
                    String paramvalue=paramValues[0];
                    if(paramValues.length==0){
                        out.println("<I>No Value</I>");
                        }
                    else
                        out.println(paramvalue);        
                    }else{
                        out.println("<UL>");
                        for(int i=0;i<paramValues.length;i++){//多个的话挨个打印
                            out.println("<LI>"+paramValues[i]);
                        }
                        out.println("</UL>");
                    }
                
                }
                out.println("</table>
    </body></html>");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            super.doPost(req, resp);
        }
    
    }

    getParameterNames(),getParameterValues()方式

    package cn.xj.servlet;
    
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Enumeration;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class ShowParams extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            resp.setContentType("text/html;charset=utf8");
            PrintWriter out=resp.getWriter();
            String title="Reading all request parameters";
            out.println("<html><head><title>读取所有参数</title></head>"
            +"<body BGCOLOR='FDF5E6'>
    "+"<H1 align=center>"
            +title+"</H1>
    "+"<table border=1 align=center>
    "
            +"<tr bgcolor="#FFAD00">
    "
            +"<th>paramater name<TH>parameter Value(s)");
            Enumeration paramNames=req.getParameterNames();
            while(paramNames.hasMoreElements()){
                String paramName=(String) paramNames.nextElement();
                out.println("<TR><TD>"+paramName+"
    <TD>");
                String[] paramValues=req.getParameterValues(paramName);
                if(paramValues.length==1){
                    String paramvalue=paramValues[0];
                    if(paramValues.length==0){
                        out.println("<I>No Value</I>");
                        }
                    else
                        out.println(paramvalue);        
                    }else{
                        out.println("<UL>");
                        for(int i=0;i<paramValues.length;i++){
                            out.println("<LI>"+paramValues[i]);
                        }
                        out.println("</UL>");
                    }
                }
                out.println("</table>
    </body></html>");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
            super.doPost(req, resp);
        }
    
    }

     

    cookies:(浏览器端可以禁止cookies,而且以文件的形式保存在本机,不可靠)

    一个servlet/jsp设置的cookies能被同一路径下面或者子路径下面的servlet/jsp读取到。(如在url为/servlet/setCookies产生的cookies不能被url为/showCookies的servlet/jsp读取)

    路径指的是URL,不是真实的文件路径

    session(记录在服务器端,服务器端开辟一块内存用于存session,这块session内存与客户端的浏览器当前子窗口是直接相连的,新开浏览器窗口会开辟新的不同session)

    session的两种实现方式:

    a.Cookies(如果浏览器支持Cookies,创建Session的时候会把SessionID存入Cookies里)

    b.url的重写方式(如果不支持Cookies,必须自己编程使用URL重写的方式实现Session:response.encodeURL(SessionID))

    session不像cookies拥有路径访问问题,即同一application下的servlet、jsp可以共享同一个session,前提是同一个客户端窗口(浏览器窗口)

    Application(有些值存放在服务器内存中,能让所有客户段都能共享,这些值可以存放在application中----共用的一块服务器内存)

    对应ServletContext对象

    httpServlet 的getServletContext()方法获取

    可以统计访问该application的全部访问量(含不同用户 不同浏览器客户端)

    JSP

    <%= ++accesscount %>表示将中间的值在网页直接输出出来

    <%! int accesscount=0 %>  成员变量,++后的值会累计

    <% int accesscount=0 %>   局部变量,++后的值不变

    a.下面这种注释在浏览器客户端网页的源文件可以看到

    <!--

    html注释

    -->

    b.客户端源文件看不见,写给程序员自己看

    <%--

    jsp注释内容

    --%>

    c.同Java一样

    <%

    //Java注释内容

    /*

    java注释内容

    */

    %>

     

    ps:url传递中文或特殊字符,要encode

    Directive –include

    <%@include  file=”fileURL”%>

    在JSP编译前包含进来  ps:不能向fileURL中传递参数 如abc.jsp?user=aaa

    Action---运行期间

    a.include:<jsp:include page=”URLSpec” flush=”true”/> 可以带参数    注意与上面的include的区别

    b.forward 将jsp的内容传送到指定的URL中

    例如:可用于传指定参数

    <jsp:forward page=”xxxurl”>

    <jsp:param name=”paramName” value=”paramValue”/>

    </jsp:forward>

    ps: forward的页面和forward到的页面用的是同一个request

    <jsp:forward>与response.sendRedirect的区别

    1.forward使用的是同一个request  而sendRedirect使用的不同的request

    forward和sendRedirect区别

    c.useBean

    Bean类要写在包内,不要写裸体类,必须有一个不带参数的构造函数

    <jsp:useBean id=”cb” class=”bean.CounterBean”type=”java.lang.Object”>//id=”cb”相当于new 了个对象,且类型为Object类型

    </jsp:useBean>

    <jsp:setproperty name=”cb”property=”count” value=”23”/>//相当于 cb.setCount(23)

    <jsp:getproperty name=”cb” property=”count”/>//相当于 out.write(cb.getcount())

    编码问题

    <%

    String name =request.gatParameter(“name”);//如果request传递过来的数据打印为乱码,而没有办法去处理乱码问题 可以采用下面通用的原始的办法

    out.println(new String(name.getBytes(“ISO8859_1”),”GBK”));//转码,需要认清原来的编码和转码后的编码

    %>

    常见面试题:JSP中常见的内置对象和常用方法

    servlet与jsp之间的通讯

    jsp->>servlet:在jsp中,<jsp:forward page=”servlet/ServletToJSP”/>  或者SendRedirect方式

    servlet->>jsp:在doGet方法中:

    resp.setContextType(“text/html;charset=gb2312”);

    req.setAttribute(“ServletName”,”ServletToJSP”);

    getServletConfig().getServletContext().getRequestDispatcher(“/Servlet_jsp/ServletUseJsp.jsp”).forward(req,resp);

  • 相关阅读:
    第26月第26天 Domain=AVFoundationErrorDomain Code=-11850
    第26月第25天 ubuntu openjdk-8-jdk jretty
    第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent
    第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash
    第26月第20天 springboot
    第26月第18天 mybatis_spring_mvc pom
    python中的字符数字之间的转换函数
    python if else elif statement
    python 赋值魔法
    python print import使用
  • 原文地址:https://www.cnblogs.com/NeilLing/p/4354664.html
Copyright © 2011-2022 走看看