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'>\n"+"<H1 align=center>"

        +title+"</H1>\n"+"<table border=1 align=center>\n"

        +"<tr bgcolor=\"#FFAD00\">\n"

        +"<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+"\n<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>\n</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'>\n"+"<H1 align=center>"

        +title+"</H1>\n"+"<table border=1 align=center>\n"

        +"<tr bgcolor=\"#FFAD00\">\n"

        +"<th>paramater name<TH>parameter Value(s)");

        Enumeration paramNames=req.getParameterNames();

        while(paramNames.hasMoreElements()){

            String paramName=(String) paramNames.nextElement();

            out.println("<TR><TD>"+paramName+"\n<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>\n</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);

你可能感兴趣的:(servlet)