JSP&Servlet jsp(2)

来源:互联网 发布:mac系统怎么重装win10 编辑:程序博客网 时间:2024/05/21 06:54
写在前面:
        get​Attribute()与getParameter()的区别:
        ​get​Attribute()获取的是放在request域对象中的一个属性,parameter是request请求的一个参数,可以获取url地址/username=zhangsan中的值,而get​Attribute()不能。
forward动作:
        语法<jsp:forward page="url"/>
        等同于:
        request.getRequestDispatcher("/url").forword(request,response);
param动作:
        语法:<jsp:param name="参数名" value="参数值">
        常常与forword一起使用,作为其子标签:
        <jsp:forward page="user.jsp">
        <jsp:param value="admin@123.net" name="email"/>
        <jsp:param value="888888" name="password"/>
        </jsp:forward>
        WEB-INF目录结构
        1,WEB-INF是java的web应用的安全目录,所谓安全就是客户端无法访问,只有服务器端可以访问的目录。
        2,web.xml,项目部署文件
        3,classes文件夹,用以放置*.class文件
        4,lib文件夹,用于存放需要的jar包
        web.xml中设定了项目的默认主页:
        
<welcome-file-list>        <welcome-file>index.html</welcome-file>        <welcome-file>index.htm</welcome-file>        <welcome-file>index.jsp</welcome-file>        </welcome-file-list>


        项目名——>properties——>MyEclipse——>project facets——>web中可以设置项目的虚拟地址
        修改Tomcat服务器默认端口:修改conf/server.xml文件:
        <Connector
        port=""  为端口号
        ……/>
        三大指令:
        page:jsp页面顶端,一个页面可以有多个page
        include:将一个外部文件嵌入到当前jsp文件中,同时解析这个页面中的jsp语句
        taglib:使用标签库定义新的自定义标签,在jsp页面中启用定制行为。
        三种注释方式:
        html的注释  <!--   -->   客户端可见
        jsp注释   <%--    --%>   客户端不可见
        jsp脚本注释: <%  //        %>
        Jsp生命周期:

        jspservice()方法被表用来处理客户端的请求。对每个请求,JSP引擎创建一个新的线程来处理该请求。如果有多个客户端同时请求该jsp文件,则jsp引擎会创建多个线程。每个客户端请求对应一个线程。以多线程方式执行可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但也要注意多线程的编程带来的同步问题,由于该servlet始终驻于内存,所以响应是非常快的。


        JSP内置对象
        ​
        用户发送请求(request)
        服务器给用户响应(response)
        out对象:
        缓冲区:buffer,所谓缓冲区就是内存的一块区域来保存临时数据。
        out对象是jspwriter类的实例,是向客户端输出内容常用的对象
        常用方法:
        void println()    向客户端打印字符串
        void clear()      清除缓冲区的内容,如果在flush之后调用会抛出异常
        void clearBuffer()  清除缓冲区的内容,如果在flush之后调用不会抛出异常
        void flush()       将缓冲区内容输出到客户端
        int getBufferSize()  返回缓冲区以字节数的大小,如不设缓冲区则为0
        int getRemaining()   返回缓冲区剩余可用
        boolean isAutoFlush()   返回缓冲区满时,是自动清空还是抛出异常
        void  close()    关闭输出流
        示例:
<%        out.println("<h2>静夜思</h2>");        out.println("床前明月光<br>");        out.println("疑是地上霜<br>");        out.flush();        //out.clear();//这里会抛出异常。        out.clearBuffer();//这里不会抛出异常。        out.println("举头望明月<br>");        out.println("低头思故乡<br>");        %>


        缓冲区大小:<%=out.getBufferSize() %>byte<br>
        缓冲区剩余大小:<%=out.getRemaining() %>byte<br>
        是否自动清空缓冲区:<%=out.isAutoFlush() %><BR>
        get(搜索,查询,会在地址栏显示出信息)和post(注册,修改,上传,不会显示)
        request对象:
        客户端的请求信息被封装在request对象中,通过他才能了解到客户的需求,然后响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效,常用方法如下:
        String getParamenter(String Name) 返回name指定参数的参数值
        String[] getParamenterValues(String name) 返回包含参数name的所有值的数组
        void setAttribute(String Object)  存储此请求的属性值
        object getAttribute(String name) 返回指定属性的属性值
        String getContentType()  得到请求体的MIME类型
        String getProtocol()   返回请求用的协议类型及版本号
        String getServletName() 返回接受请求的服务器主机号
        request.setCharacterEncoding("GB18030");  接受数据前解决中文乱码问题,无法解决url传值乱码
        要解决url传值乱码问题,需要找到tomcat服务器根目录下的conf->server.xml的connertor,,与前面修改端口号的位置一样,在该属性中添加URLEncoding="utf-8",与jsp的类型一致就不会在出现URL中文参数乱码
        int getServletPort()  返回服务器接受此请求所用的端口号
        String getCharacterEncoding() 返回字符编码方式
        int getContentLength() 返回请求体的长度(字节数)
        String getRemoteAddr()  返回发送此请求的客户端IP地址
        String getRealPath(String path)  返回请求的真实路径

        String request.getContextPath()   返回上下文路径


        response对象
        response对象包含了响应客户请求的有关信息,但在jsp中很少直接用到它,它是httpservletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。常用方法如下:
        String getCharacterEncoding() 返回响应用的字符编码方式
        String getContentType()  得到响应的MIME类型
        PrintWriter getWriter()  返回可以向客户端输出字符的一个对象(与内置out对象有区别,他的输出总是提前于内置out对象,可以在out输出写完后,添加一个out.flush(),强制清空缓冲区,清空缓冲区后,浏览器会把out中的值写在浏览器上在进行其他操作,这样writer就在out后输出啦)
        sendRedirect(java.lang.String location可以是jsp页面)  重新定向客户端的请求
        请求转发和请求重定向的区别:
        请求重定向:客户端行为,response.sendRedirect(),从本质上讲等于两次请求,前一次的请求对象不会保存,地址栏的url地址会改变
        请求转发:服务器行为,request.getRequestDispatcher().forword(req,resp);是一次请求,转发后请求对象会保存,地址栏的url地址不会改变
        page对象:

        

pageContext对象:

        pageContext对象提供了对jsp页面内所有的对象及名字空间的访问
        pageContext对象可以访问到本页所在的session,也可以取本页所在的application的某一属性值
        pageContext对象相当于页面中所有功能的集大成者,本类名也叫pageContent

        pageContext.getSession().getAttribute();


        include的可以是jsp页面
        config对象
        是在一个servlet初始化时,jsp引擎向他传递信息用的,此信息包括servlet初始化时所用到的参数(包括属性名和属性值构成)以及服务器的有关信息(通过传递一个servletContext对象),方法:
        servletContext getServletCOntext()  返回含有服务器相关信息的servletContext对象
        String getInitParameter(String name) 返回初始化参数的值

        Enumeration getInitParameterNames()   返回servlet初始化所需所有参数的枚举


        page指令中添加errorPage="jsp页面" ,表示出错后交给那个页面处理,该页面不是当前页面,该页面的page指令要添加isErrorPage="true",这样才能处理上个页面发来的异常。exception.getMessage()……