天天看点

JSP学习笔记-基础知识

B/S     全名     Browser/Server

C/S     全名     Client/Server

JSP     全名    Java Server Pages

JNDI    全名    Java Naming Directory Interface

1.URL的组成包括三部分

    1.协议    2.主机名(端口号)    3.资源路径

2.Web容器处理JSP文件的三个步骤

    1,翻译阶段    2,编译阶段    3,执行阶段

3.JSP页面的组成部分

    1,静态内容    

    2.指令    <%@ %>

    3.脚本元素(小脚本<% %>,表达式<%= %>,声明<%! %)    

    4,标准动作

        1.<jsp:forward page=""></jsp:forward>            //执行页面转换.将请求的处理转发到下一个页面

        2.<jsp:include></jsp:include>                //用于动态引入一个JSP页面

        3.<jsp:param name="" value=""></jsp:param>        //用于传递参数.必须与其他支持参数的标签一起使用

        4.<jsp:plugin></jsp:plugin>                //用于下载JavaBean或Applet到客户端执行

        5.<jsp:useBean id="name" classname="classname" scope=""></jsp:useBean>                //用于创建一个javaBean的实例

        6.<jsp:setProperty name="" property="" value=""></jsp:setProperty>            //用来设置JavaBean实例的属性

        7.<jsp:getProperty name="" property=""></jsp:getProperty>            //用来获得JavaBean实例的属性

    5,注释(1.HTML注释<!-- 注释内容--> 2.JSP注释<%-- 注释的内容--%> 3.脚本内的java注释 单行注释// 多行注释 )

4.JSP的指令元素

    <%@ language="java" import="java.util.*,java.sql.*"% contentType="text/html;charset=UTF-8" pageEncoding="utf-8" errorPage="error.jsp" isErrorPage="true" %>

    //language当前JSP的编写语言

    //import需要导入的包

    //contentType返回到客户界面的显示方式和编码方式

    //pageEncoding当前JSP页面的编码方式

    //errorPage通过指定页面来显示错误的信息

    //isErrorPage    通过设置true或false来设置是否显示错误的页面能否调用Exception对象来显示错误的信息

5.JSP内置对象

    1.out     out.print();    用于向客户端输出数据

    2.request        用于处理客户端的请求信息

        1.String     getParameter(String name);        根据页面表单获得页面提交的数据

        2.String[]     getParameterValues(String name);    获取一个页面表单组件对应多个值时的用户的请求数据

        3.void         setCharacterEncoding(String charset);    指定每个请求的编码,用于解决编码乱码的的问题

        4.Object     request.getRequestDispatcher(String path);    返回一个javax.servlet.RequestDispatcher对象,该对象的forward(request,response)方法用于转发请求

        5.String     getMethod();                返回当前页面表单的提交方式

        6.String     getContextPath();            返回当前Web应用的程序名

        7.String     getRequsetURI();            返回应用程序后面的文件路径

        8.String     getRequestURL();            返回应用程序的完整文件路径

        9.String    getQueryString();            获得地址?后面的参数内容,只对get方式的表单提交有效

        10.String    getHeader("referer")             获得跳转到当前Servlet的路径

    3.response        用于响应客户端的请求并向客户端输出信息

        1.void        addCookie(Cookie cookie);            在客户端添加Cookie

        2.void        setContentType(String type);            设置Http响应的contentType类型

        3.void        setCharacterEncoding(String charset);        设置相应所采取的编码类型

        4.void        sendRedirect(String path);            将请求重新定位到一个不同的URL        

    4.session        用来存储有关用户回话的信息

        1.void        setMaxInactiveInterval(int interval);        设定session的非活动时间

        2.int        getMaxInactiveInterval();            获得session的有效活动事件.以秒为单位

        3.void        setAttribute(String key,Object object);        以key/value的形式来保存对象值

        4.Object    getAttribute(String key);            通过key来获取对象值

        5.vioid     removieAttribute(String key);            移除key值

        6.String    getId();                    获取session的Id

        7.void         invalidate();                    设置session对象失效

        8.boolean    isNew();                    检测是否为新会话对象

    5.application        用来实现用户之间的数据共享

        1.void        setAttribute(String key,Object object);        以key/value的形式来保存对象值

        2.Object    getAttribute(String key);            通过key来获取对象值

        3.String     getRealPath();                    返回相对路径的真实路径

    6.page

    7.config

    8.exception

    9.pageContext

 6.JSP外置对象

    1.Cookie    

        1.void         setMaxAge(int time);                设置Cookie的有效期.以秒为单位

        2.int          getMaxAge();                    获得Cookie的有效期,以秒为单位

        3.void         setValue(String value);                在Cookie建立后,为Cookie赋予新的值

        4.String     getValue();                    获取Cookie的值

        4.String      getName();                    获取Cookie的名称

7.数据库连接池

    1.JNDI    全名    Java Naming Directory Interface

    2.Environment的属性设置    <Environment name="news" value="hello word" type="java.lang.String" />

    3.context.xml的Resource属性设置    <Resource

                    name="news"                //数据源名字

                    auth="Container"            //数据源管理方式

                    type="javax.sql.DataSource"        //数据源类型

                    maxActive="100"                //数据源最大访问

                    maxIdle="30"                //数据源空闲设置

                    maxWait="10000"                //最大等待时间

                    username="scott"            //登录用户名

                    password="13717013727"            //登录密码

                    driverClassName="oracle.jdbc.driver.OracleDriver"    //驱动包名

                    url="jdbc:oracle:thin:@lovalhost:1521:orcl"        //数据库连接路径

                />

    4.web.xml        <resource-ref>

                    <description>news</description>        //对所引用资源的说明

                    <res-ref-name>news</res-ref-name>    //资源引用的JNDI名字

                    <res-type>javax.sql.DataSource</res-type>    //引用资源的类名字

                    <res-auth>Container</res-auth>            //引用的资源的管理方式

                </resource-ref>

    5.JNDI获得数据源对象的步骤

            1.配置context.xml文件

            2.配置web.xml文件

            3.添加驱动到/lib目录下

            4.进行代码编写,使用lookup()方法获得数据源对象

                Context context=new InitialContext();

                DataSoure ds=(dDataSource)context.lookup("java:comp/env/news");

                Connection con=ds.getConnection();

    6.JavaBean    是java中可以跨平台的重要组件

            在应用中主要负责封装数据和封装业务层处理

            javaBean的定义要遵守一定的规则    公有类,并提供无参的共有的构造函数

                            属性私有    具有公有的访问属性的set和get方法

8.分页查询

    1.计算总页数    总页数=(总记录数-1)/每页显示数量+1;

    2.分页查询的SQL语句    select * from (select rownum as r,t.* from tables t ) where r between pageSize*(pageIndex-1)+1 and pageSize*pageIndex;

9.文件上传下载

    1.File类的常用方法

        1.void saveAs(String destFilePathName);            将文件保存,参数destFilePathName是保存的文件名

        2.void saveAs(String destFilePathName,int optionSaveAs);将文件保存,参数destFilePathName是保存的文件名,optionSaveAs表示保存的选项

        3.boolean isMissing();                    判断用户是否选择了文件.即对应的表单项是否为空

        4.String getFieldName();                获取当前表单中上传文件所对应的表单项的名称name值

        5.String getFileName();                    获取上传文件的名称,不包含路径

        6.String getFilePathName();                获取上传文件的名称,包含文件的路径

        7.String getFileExt();                    获取文件的扩展名

        8.String getContentString();                获取文件的内容.返回值为字符串类型

        9.int     getSize();                    获取上传文件的大小.单位为字节

    2.Files类的常用方法

        1.int     getCount();                    获得文件上传的数目

        2.File     getFile(int index);                获得指定位置的File文件对象

        3.long     getSize();                    获得上传文件的总长度

        4.Collection getCollection();                将上传的所有文件对象以Collection的形式返回

    3.SmartUpload类的常用方法        out.clear();    out=pageContext.pushBody();    //实现文件的下载功能

        1.void     initialize(PageContext pagecontext);        执行上传和下载的初始化工作

        2.void     upload();                    实现文件的上传

        3.void     downloadFile(String str1,String str2,....);    实现文件的下载

        4.int     save(String pathName);                将指定文件保存到指定的目录下面,并返回保存的文件的个数

        5.void  setAllowedFileList(String exeList1,String exeList2,...);允许上传的文件的类型

        6.void    setDeniedFilesList(String exeList1,String exeList2,...);不允许上传文件的类型

        7.void  setMaxFileSize(long size);                设置每个上传文件的最大长度

        8.void  setTotalMaxFileSize(long size);                设置上传文件的总长度

    4.获取表单的数据

        1.getParameter();                        获取SmartUpload包装的Request对象

        2.getParameter(String name);                    获取指定参数的值

        3.getParameterValues(String name);                获取一个页面表单对应多个应用值的请求

    5.实现文件的上传

        SmartUpload su=new SmartUpload();

        su.initialize(pageContext);            //初始化su对象

        su.setCharset("utf-8");                //设置编码

        su.setAllowedFilesList("jpg,gif");        //设置允许上传对象

        su.setDeniedFilesList("doc,txt");        //设置禁止上传对象

        su.setMaxFileSize(1000);            //设置单个文件的大小

        su.setTotalMaxFileSize(10000);            //设置上传文件的总长度

        su.upload();

        File file=su.getFiles().getFile(0);

        if(!file.isMissing()){

            file.saveAs("/upload/"+file.getFileName(),SmartUpload.SAVE_VIRTUAL);

        }

    6.实现文件的下载

        SmartUpload su=new SmartUpload();

            su.initialize(pageContext);

            su.setCharset("utf-8");

            su.setContentDisposition(null);

            su.downloadFile("/upload/hehe.txt");

            out.clear();

            out=pageContext.pushBody();

10.使用分层实现业务处理

    1.分层开发中最常用的三层架构

        1.表现层        用于用户展示和交互

        2.业务逻辑层        提供业务逻辑处理的封装

        3.数据访问层        提供对数据的读取操作和保存

    2.分层开发应该遵循的原则

        1.上层依赖其下层,依赖关系不跨层

        2.下一层不能调用上一层

        3.下一层不依赖于上一层

        4.在上一层中不能出现下一层的概念

    3.分层开发的优势

        1.职责划分清晰

        2.无损替换

        3.代码复用

        4.降低了系统内部的耦合性

11.EL和JSTL

    1.EL    Expression Language    表达式语言

        1.EL表达式的特点    自动转换类型    使用简单

        2.EL的语法${表达式}    

        3.EL隐式对象

            1.作用域访问对象

                1.pageScope        与页面作用域(page)中的属性相关联的Map类

                2.requestScope        与请求作用域(request)中的属性相关联的Map类

                3.sessionScope        与会话作用域(session)相关联的Map类

                4.applicationScope    与应用程序作用域(application)相关联的Map类

            2.参数访问对象

                1.param            按照参数名称访问单一请求值的Map对象

                2.paramValues        按照参数名称访问数组请求值的Map对象

            3.JSP隐式对象

                1.pageContext        提供对页面信息和内置对像的访问

    2.JSTL    Java Server Pages Standard Tag Library    JSP标准标签库

        1.JSTL的标签库        <%@ taglib uri="http://java.sun.com/jsp/jstl/code" prefix="c" %>

            1.核心标签库

                1.通用标签

                    1.<c:set></c:set>    用于定义变量,并将变量储存在JSP范围内或者javaBean属性中

                        1.<c:set var="variable" value="v" scope="scope"></c:set>           将value值存储在范围为scope的变量variable中

                            var属性的值是设置的变量名

                            value属性设置的值是赋予变量的值

                            scope属性设置的是变量的作用域 可选值有page,request,session和application

                        2.<c:set target="target" value="v" property="property"></c:set>       将value值存储在对象的属性中

                            target设置要操作的对象,可以使用EL表达式表示

                            value属性是赋予对象属性的值

                            property属性对应对象的属性名

                    2.<c:out></c:out>    用来显示数据的内容,类似与JSP的<%= %>

                        1.<c:out value="v"></c:out>                        不指定默认值

                        2.<c:out value="v" default="default"></c:out>                指定默认值

                    3.<c:remove></c:remove>    用于移除指定范围内的变量

                        1.<c:remove var="v" scope="scope"></c:remove>

                            value属性用来只待删除的名称

                            scope属性是指删除变量所在的范围   可以指定的属性有page request session和application 默认为page

                2.条件标签

                    1.<c:if test="condition" var="varName" scope="scope"></c:if>

                        test属性是此条件标签的判断条件

                        var属性定义变量,该变量存放判断以后的结果,该属性可以省略

                        scope属性是指var变量的存储范围,该属性可以省略

                    2. <c:choose>                        //多项选择标签.相当于switch/case

                            <c:when test="${age>11 }">小孩</c:when>

                            <c:when test="${age>15 }">未成年孩</c:when>

                            <c:when test="${age>18 }">成年</c:when>

                            <c:otherwise>中年人</c:otherwise>

                        </c:choose>    

                3.迭代标签

                    1.<c:forEach var="varName" items="collectionName"vatStatus="varStatusName" begin="beginIndex" end="endIndex" step="step" ></c:forEach>            遍历集合对象的成员

                        var属性是对当前成员的引用

                        items是指被迭代的集合对象

                        varStatus属性用英语存放var引用的成员的相关信息,如索引

                        begin属性表示开始的位置.默认为0,该属性可以省略

                        end属性表示结束的位置,该属性可以省略

                        step属性表示循环的步长,默认为1,可以省略

                    2.<c:forEach var="varName" varStatus="varStatusName" begin="beginIndex" end="endIndex" step="step"></c:forEach>    指定语句的循环次数

                        var属性是对当前成员的引用

                        varStatus属性用英语存放var引用的成员的相关信息,如索引

                            .index            //相对于集合的下标

                            .count            //相对于查询结果而言,查询当前记录的数

                            .first            

                            .last

                        begin属性表示开始的位置.默认为0,该属性可以省略  不能小于0

                        end属性表示结束的位置,该属性可以省略          不能小于0

                        step属性表示循环的步长,默认为1,可以省略    

                    3.<c:forTokens items="" delims=",;:" var="" begin="" end="" step="" varStatus=""></c:forTokens>    通过分割字符来截取字符串

                        var属性是对当前成员的引用

                        varStatus属性用英语存放var引用的成员的相关信息,如索引

                            .index

                            .count            //相对于查询结果而言,查询当前记录的数

                            .first

                            .last

                        begin属性表示开始的位置.默认为0,该属性可以省略  不能小于0

                        end属性表示结束的位置,该属性可以省略          不能小于0

                        step属性表示循环的步长,默认为1,可以省略                    

            2.格式化与国际化标签库

            3.sql标签库

            4.XML标签库

            5.标签函数库

                <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

                1.${fn:contains(name, searchString)}            //查询是否包含该字节

                2.${fn:containsIgnoreCase(name, searchString)}        //包含忽略大小写

                3.${fn:endsWith(filename, ".txt")}            //查询该文件的名字是否以指定的后缀结尾

                4.${fn:escapeXml(param:info)}

                5.${fn:indexOf(name, "-")}                //查询该字符出现的起始位置

                6.${fn:join(array, ";")}                //通过指定字符串拼接某数组和集合

                7.${fn:length(str)}                    //查询某指定字符或数组集合的长度

                8.${fn:replace(text, "-", "&#149;")}            //用指定字符替换该字符串中的指定内容

                9.${fn:split(customerNames, ";")}            //用指定字符分割该字符串

                10.${fn:startsWith(product.id, "100-")}            //ervlet查询该内容是否以该字符开头

                11.${fn:substring(zip, 6, -1)}                //提取该内容中指定长度的字节  .当end为-数,则截取起始位置后面的所有部分

                12.${fn:substringAfter(zip, "-")}            //提取该内容指定字符之后的内容

                13.${fn:substringBefore(zip, "-")}            //提取该内容指定字节之前的内容

                14.${fn:toLowerCase(product.name)}            //将指定内容转换为小写

                15.${fn:toUpperCase(product.name)}            //将指定内容转换为大写

                16.${fn:trim(name)}                    //忽略大小写

12.自定义servlet

        1.实现Servlet

        2.继承GenericServlet

        3.继承HttpServlet

        4.web.xml    

            1.初始化参数的设置

                <init-param>

                        <param-name>helloname</param-name>

                        <param-value>hellovalue</param-value>

                   </init-param>

            2.全局参数的设置

                <context-param>

                    <param-name>contextparamname</param-name>

                    <param-value>contextparamvalue</param-value>

                </context-param>

        5.Servlet分为三大类

            1.标准的servlet

            2.过滤器

            3.监听器

        6.什么是Servlet            Servlet是一个符合特定规范的Java程序,在服务器端运行,主要用来处理客户端的请求并做出响应

        7.servlet的生命周期

            1.加载和实例化                    吃实例由servlet容器进行创建

            2.初始化        init();

            3.服务            service();        内部实现doGet()和doPost();

            4.销毁            destory();        指明那些资源可以被系统回收.而不是由该方法进行回收

        8.Servlet接口        定义了所有Servlet需要实现的方法

            1.init();        初始化Servlet

            2.service();        Servlet服务

            3.destory();        销毁servlet

            4.getServletInfo();    用于获得Servlet的信息

            5.getServletConfig();    返回ServletConfig对象

        9.GenericServlet        实现了Servlet接口和ServletConfig接口

            1.void  init(ServletConfig config);        调用Servlet接口中的init()方法...该方法里面的参数可以省略

            2.String getInitParameter(String name);        返回名称为name的初始化参数

            3.ServletContext getServletContext();        返回ServletContext对象的引用

        10.HttpServlet            继承了GenericServlet类

            1.void service(ServletRequest request,ServletResponse response);    调用GenericServlet类中的service()方法的实现

            2.void doXXX(ServletRequest request,ServletResponse response);        根据请求的方式的不同.调用不同的doGet().doPost()方法

        11.Servlet的web.xml文件的配置

            <servlet>

                <servlet-name>LoginServlet</servlet-name>

                <servlet-class>cn.servlet.LoginServlet</servlet-name>

                <load-on-startup>1</load-on-startup>

            </servlet>

            <servlet-mapping>

                <servlet-name>LoginServlet</servlet-name>

                <url-pattern>/LoginServlet</url-pattern>

            </servlet-mapping>

        12.Servlet初始化参数

            1.局部参数            获得用this.getInitParameter("initName");

            <servlet>

                <init-param>

                    <param-name>initName</param-name>

                    <param-value>initValue</param-value>

                </init-param>

            </servlet>

            2.上下文参数            获得用this.getServletContext().getInitParameter("contextName");

            <servlet>

                <context-param>

                    <param-name>initName</param-name>

                    <param-value>initValue</param-value>

                </context-param>

            </servlet>