• JSTL标签国际化操作及怎样书写自己的JSTL标签


    JSTL标签

    1、  JSTL

    a)         四个标签、一个函数。

    1、  Core核心标签 – 必须的。

    2、  Fmt标签 – 国际化,i18n –

    3、  [微软用户1] Sql – 不用

    4、  Xml – 在页面上操作xml

    5、  Fn – function  用于处理字符串或是处理list。 [微软用户2] 

    1.1、i18n国际化

                                  

    在JDK中一个类

           ResourceBoundle – 专门用于绑定国际化的资源文件 、

           对于中文的资源文件,必须要经过编码。      

           C:/> native2ascii 你好 

           \u3243\uasd

    A、示例

           创建两个资源文件

    对中文的信息进行编码:

           C:/> native2ascii a.txt b.txt

    public class I18NDemo {

        @Test

        public void test1(){

           //声明资源的绑定类

           //先会根据本地信息,读取相关的配置文件,如果没有则读取默认的配置文件

           //可以指定读取哪一个文件

           ResourceBundle rb =

                  ResourceBundle.getBundle("a",Locale.US);

           //获取值

           String name = rb.getString("name");

           String addr = rb.getString("addr");

           System.err.println(name+","+addr);

        }

    }

    以下是Local类:

        @Test

        public void test2(){

           Locale lo = Locale.getDefault();//获取本地的语言,国家

           System.err.println(lo.getDisplayCountry());

           System.err.println(lo.getDisplayLanguage());

        }

    }

    1.2、页面如何实现国标化

        <fmt:标签实现国际化.

        Fmt:setBoundle – 设置绑定哪一个资源文件。

        Fmt:getMessage 获取信息.

        Fmt:setLocal

    A:基本的使用方式

        <!-- 设置读取哪一个资源文件 -->

    <fmt:setBundle basename="a"/>

     

    </head>

    <body>

        主页...

       

        <hr/>

        <fmt:message key="name"></fmt:message>

        <br/>

        <fmt:message key="addr"></fmt:message>

    </body>

    </html>

    B:实现让用户选择

        <fmt:setLocal/>

       

        <!-- 在读取文件之前,设置语言 -->

    <fmt:setLocale value="${param.language}"/>

    <!-- 设置读取哪一个资源文件 -->

    <fmt:setBundle basename="a"/>

    </head>

    <body>

        <div style="text-align:right;">

           <a href="?language=en_US">English</a>

           |

           <a href="?language=zh_CN">中文</a>

        </div>

       

        <hr/>

        <fmt:message key="name"></fmt:message>

        <br/>

        <fmt:message key="addr"></fmt:message>

    </body>

    </html>

    <!-- 在读取文件之前,设置语言 -->

    <fmt:setLocale value="${param.language}" scope="session"/[微软用户3] >

       

    接收参数的:

    name=Jack

    addr=JiNan ShangDong

    welcome=welcome you and your name is {0},your addr is {1}

        最大值为{0}~{9}

     

    <!-- 设置读取哪一个资源文件 -->

    <fmt:setBundle basename="a"/>

    </head>

    <body>

        <!-- 通过国际化标签设置编码 -->

        <fmt:requestEncoding value="UTF-8"/>[微软用户4] 

        <hr/>

        <fmt:message key="name"></fmt:message>

        <br/>

        <fmt:message key="addr"></fmt:message>

        <hr/>

        <fmt:message key="welcome">

           <fmt:param value="${param.name}"></fmt:param>

           <fmt:param value="${param.addr}"></fmt:param>

        </fmt:message>

    [微软用户5] </body>

    </html>

    处理数字类型:

    <br/>对sum进行取整

        <fmt:formatNumber value="${sum}"

    pattern="#.00"></fmt:formatNumber>

        <br/>

        <fmt:formatNumber

     value="12345.45678" pattern="#,###.00"></fmt:formatNumber>

    -----------图片的处理-----

    name=\u6770\u514b

    addr=\u5c71\u4e1c\u7701\u6d4e\u5357\u5e02

    welcome=\u4f60\u597d\uff0c\u6b22\u8fce\u4f60\uff0c\u4f60\u53eb {0},\u4f60\u7684\u5730\u5740\u662f {1}

    img1=a.jpg

    1.3、fn函数操作

           使用方式语法:

           ${fn:substring(...)}

    </pre>

    bbbbbbb.jsp<br/>

    ${fn:contains(nm,'b')}<br/>

     

    <!-- 接收参数 -->

    <c:set var="mail" value="${param.mail}"></c:set>

    <c:set var="atIndex" value="${fn:indexOf(mail,'@')}"></c:set>

    <c:set var="dotIndex" value="${fn:indexOf(mail,'.')}"></c:set>

    <hr/>

    以下是你的邮件:

    ${fn:substring(mail,atIndex+1,dotIndex)}

    <br/>

    2、自定义标签

    标签的是如何开发出来的?

          

    验证用户是否重复提交表单。

    生成表单。

    实现用户的安全验证.

    2.1、Tag接口是标签的最高接口

           标签组成

    开一个自定义的标签:

           1:实现tag接口。

           2:给这个标签添加一个配置文件,应该放到WEB-INF/*.tld

    3:在页面上引用这个标签

    第一步:实现Tag接口

           package cn.oracle.tag;

    import javax.servlet.jsp.JspException;

    import javax.servlet.jsp.PageContext;

    import javax.servlet.jsp.tagext.Tag;

    /**

     * 自己的第一个标签

     * 必须要拥有一个无参数的公开构造

     */

    public class HelloTag implements Tag{

        public void setPageContext(PageContext pc) {

           System.err.println("1:设置了pc对象:"+pc);

        }

        //只能返回两个值

        //EVAL_BODY_INCLUDE -  包含body体的部分

        //SKIP_BODY - 跳过body部分

        public int doStartTag() throws JspException {

           System.err.println("2:标签开始了:");

           return Tag.EVAL_BODY_INCLUDE;

        }

        //只能返回

        //SKIP_PAGE - 跳过page后面的部分不显示

        //EVAL_PAGE - 执行页面的后面的部分

        public int doEndTag() throws JspException {

           System.err.println("3:标签结束了");

           return EVAL_PAGE;

        }

     

        public void release() {

        }

        public void setParent(Tag t) {

        }

        public Tag getParent() {

           return null;

        }

    }

    第二步:在web-inf/tag/hello.tld文件

    <description>这是我第一个标签</description>

      <display-name>Hello</display-name>

      <tlib-version>1.0</tlib-version>

      <short-name>hello</short-name>

      <!-- 用于在页面上设置引用的 -->

      <uri>http://www.jtedu.com</uri>

     <!--

      <uri>/www.jtedu.com</uri>

      <uri>/aaa.tld</uri>

       -->

       <!-- 以下开始声明标签 -->

       <tag>

            <!-- 设置标签的子名称<hello:world -->

            <name>world</name>

            <!-- 设置哪一个类是标签类 -->

            <tag-class>cn.oracle.tag.HelloTag</tag-class>

            <!-- 声明body部分的数据是什么 -->

            <body-content>JSP</body-content>

       </tag>

    </taglib>

    第三步:在页面上引用

    <%@ taglib uri="http://www.jtedu.com" prefix="hello"%>

    <html>

    <head>

    <title>Insert title here</title>

    </head>

    <body>

        <%=pageContext %>

        <br/>

        <hello:world>这是body部分</hello:world>

        这是标签后面的部分。。

    </body>\

    第五步:修改标签,在页面上输出hello

        要想在页面上输出信息,必须要在doStartTag,或是doEndTag中输出到页面:

    public class HelloTag implements Tag{

        private PageContext pc;

        public void setPageContext(PageContext pc) {

           System.err.println("1:设置了pc对象:"+pc);

           this.pc=pc;[微软用户6] 

        }

        //只能返回两个值

        //EVAL_BODY_INCLUDE -  包含body体的部分

        //SKIP_BODY - 跳过body部分

        public int doStartTag() throws JspException {

           System.err.println("2:标签开始了:");

           //获取输出对象

           JspWriter out = pc.getOut();[微软用户7] 

           try {

               out.print("<br/>你好,这是标签的开始。。。");

           } catch (IOException e) {

               throw new RuntimeException(e);

           }

           return SKIP_BODY;

        }

        //只能返回

        //SKIP_PAGE - 跳过page后面的部分不显示

        //EVAL_PAGE - 执行页面的后面的部分

        public int doEndTag() throws JspException {

           System.err.println("3:标签结束了");

           JspWriter out = pc.getOut();

           try {

               out.print("<br/>你好,这是标签的结束。。。");

           } catch (IOException e) {

               throw new RuntimeException(e);

           }

           return EVAL_PAGE;

        }

     

        public void release() {

        }

        public void setParent(Tag t) {

        }

        public Tag getParent() {

           return null;

        }

    }

    标签的配置说明:

    功能1:

           要求在页面上输入服务器时间.

          

           方案:

                  1:可以在页面上使用<%=new Date()%>。

                  2:可以使用标签。

    标签类的实现关系:

          

    第一步:开发一个类,继承TagSupport这个标签支持类

    package cn.oracle.tag;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import javax.servlet.jsp.JspException;

    import javax.servlet.jsp.JspWriter;

    import javax.servlet.jsp.tagext.TagSupport;

    public class DateTag extends TagSupport {

        private static final long serialVersionUID = 1L;

        //只实现部分方法

        @Override

        public int doStartTag() throws JspException {[微软用户8] 

           //获取时间

           SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

           String ctime = sdf.format(new Date());

           //获取输出对象JspWriter

           JspWriter out = pageContext.getOut();[微软用户9] 

           //输出时间

           try{

               out.print(ctime);

           }catch(Exception e){

               throw new RuntimeException(e);

           }

           return super.doStartTag();

        }

    }

    第二步:将这个类,配置到tld文件中

    <!-- 配置第二个标签类 -->

        <tag>

           <name>date</name>

           <tag-class>cn.oracle.tag.DateTag</tag-class>

           <body-content>empty</body-content>

        </tag>

    第三步:在页面上引用

    <hr/>

        时间:<hello:date/>

    2.3、带属性的标签

            <hello:date name="张三"/> - > 我好张三,时间为:2009年

           做两步:

           1:在标签类上,添加setXxx方法。

           2:在tld文件中声明这是一个有属性的标签。

    第一步:在HelloTag.java中声明以下

        private String myName;

        //声明一个设置的方法

        public void setName(String nm){

           this.myName=nm;

        }

    第二步:修改doStartTag方法

    String str = "你好:"+myName+",时间为:"+ctime;

               out.print(str);

    第三步:修改tld文件

        <!-- 配置第二个标签类 -->

        <tag>

           <name>date</name>

           <tag-class>cn.oracle.tag.DateTag</tag-class>

           <body-content>empty</body-content>

           <!-- 以下声明这个类的属性 -->

           <attribute>

               <!-- 属性的名称,必须要与setName匹配 -->

               <name>name</name>

               <!-- 声明这个属性是否是必须设置的 -->

               <required>true</required>

               <!--

                  runtime exp : 是否支持运行时的表达式的值.

                  name="Jack" - 直接写死的

                  name="${param.name}"

                -->

               <rtexprvalue>true</rtexprvalue>

               <!-- 数据类型 -->

               <type>java.lang.String</type>

           </attribute>

        </tag>

    2.4、实现c:url的功能

        <p>要求自己实现c:url的功能</p>

        <pre>

           &lt;c:url vlaue = "/"> = > /0428

           1:获取项目的根 - request.getContextPath();

           2:重写url ;jsessionid=99999 - response.encodURL("a.jsp")

        </pre>

    第一步:开发一个类继承tagSupport

    package cn.oracle.tag;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.jsp.JspException;

    import javax.servlet.jsp.JspWriter;

    import javax.servlet.jsp.tagext.Tag;

    import javax.servlet.jsp.tagext.TagSupport;

    public class UrlTag extends TagSupport {

        //声明一个属性用户接收用户的设置

        private String path;

        public void setPath(String path) {

           this.path = path;

        }

        @Override

        public int doStartTag() throws JspException {

           //1:获取项目的根

           HttpServletRequest req = (HttpServletRequest) pageContext.getRequest();

           String contextPath =req.getContextPath();

           //将用户的地址加到后面

           contextPath+=path;

           //2:重写url

           HttpServletResponse resp =

                  (HttpServletResponse) pageContext.getResponse();

           String url = resp.encodeURL(contextPath);

           //3:写出

           JspWriter out = pageContext.getOut();

           try{

               out.print(url);

           }catch(Exception e){

               throw new RuntimeException(e);

           }

           //返回一个不处理body部分

           return Tag.SKIP_BODY;

        }

    }

    第二步:配置到tld.中去

        <display-name>url</display-name>

        <tlib-version>1.0</tlib-version>

        <short-name>u</short-name>

        <uri>http://www.jtedu.com/url</uri>

        <!-- 声明这标签 -->

        <tag>

           <name>url</name>

           <tag-class>cn.oracle.tag.UrlTag</tag-class>

           <body-content>empty</body-content>

           <attribute>

               <name>path</name>

               <required>true</required>

               <rtexprvalue>true</rtexprvalue>

               <type>java.lang.String</type>

           </attribute>

        </tag>

    </taglib>

    第三步:在页面上与c:url对比

        <hr/>

        <u:url path="/jsp/a.jsp"/>

        <hr/>

        <c:url value="/jsp/a.jsp"/>

    2.5、防止重复提交

           重复提交:用户在提交了表单以后执行的刷新操作,其实是重新向服务器请求的过程,所以会造成重复提交。

           演示效果:

          

    第一步:RegServlet

    public class RegServlet extends HttpServlet {

        public void doPost(HttpServletRequest request,

               HttpServletResponse response) throws ServletException, IOException {

           //1:设置编码

           request.setCharacterEncoding("UTF-8");

           //2:接收用户的信息

           String name = request.getParameter("name");

           String pwd = request.getParameter("pwd");

           if(name!=null && !name.trim().equals("")){

               //生成一个随机的id

               String uuid = UUID.randomUUID().toString().replace("-","");

               //调用dao层保存用户

               System.err.println("调用dao保存了用户的信息:"+uuid+","+name+","+pwd);

               //为了给用户显示一下生成的id

               //将生成的id放到request域中

               request.setAttribute("id",uuid);

               //只要是request域中有数据则必须要使用转发

               request.getRequestDispatcher("/regsucc.jsp").forward(request, response);

           }else{

               //设置一个错误信息到session中去

               request.getSession().setAttribute("error","你的注册信息错误");

               //重定向到注册面

               response.sendRedirect(request.getContextPath()+"/reg.jsp");

           }

        }

    }

    第二步:

    <body>

        <p>注册</p>

        <form action="<c:url value='/RegServlet'/>" method="post">

           Name:<input type="text" name="name"><br/>

           pwd:<input type="text" name="pwd"><br/>

           <input type="submit" value="提交">

        </form>

    </body>

    </html>

    第三步:开发显示成功的页面

    <body>

        <p>你好,注册成功了</p>

        你的生成的id:${requestScope.id}

    </body>

    第四步:为了防止重复提交

       1:可以在表单中保存一个随机值。-用户会在提交时会带这个值到RegServlet中来.

    2:同时将这个值放到session中,则在regServlet中也可以取出来。

       3:就进行比较,如果一样,就可以提交。保存到数据库。否则就提示不能重复提交。

        <%

           //生成一个uuid的值

           String uid = UUID.randomUUID().toString().replace("-","");

           //再将这个uid放到session

           session.setAttribute("aa", uid)[微软用户10] ;

        %>

        <p>注册</p>

        <form action="<c:url value='/RegServlet'/>" method="post">

           Name:<input type="text" name="name"><br/>

           pwd:<input type="text" name="pwd"><br/>

           <input type="hidden" value="<%=uid%>[微软用户11] " name="uuud">

           <input type="submit" value="提交">

        </form>

    第五步:在servlt中处理两个值的对比

           public class RegServlet extends HttpServlet {

        public void doPost(HttpServletRequest request, HttpServletResponse response)

               throws ServletException, IOException {

     

           try {

               Thread.sleep(3000);

           } catch (InterruptedException e) {

               e.printStackTrace();

           }

           // 1:设置编码

           request.setCharacterEncoding("UTF-8");

           // 2:接收用户的信息

           String name = request.getParameter("name");

           String pwd = request.getParameter("pwd");

           String xd = request.getParameter("uuud");// 获取用户提交的值

           // 同时从session中取出值

           String xd2 = (String) request.getSession().getAttribute("aa");

    [微软用户12]     if (xd.equals(xd2)) {

               if (name != null && !name.trim().equals("")) {

                  // 生成一个随机的id

                  String uuid = UUID.randomUUID().toString().replace("-", "");

                  // 调用dao层保存用户

                  System.err.println("调用dao保存了用户的信息:" + uuid + "," + name + ","

                         + pwd);

                  //在保存成功以后,就将对比码删除

                  request.getSession().removeAttribute("aa");[微软用户13] 

                  // 为了给用户显示一下生成的id

                  // 将生成的id放到request域中

                  request.setAttribute("id", uuid);

                  // 只要是request域中有数据则必须要使用转发

                  request.getRequestDispatcher("/regsucc.jsp").forward(request,

                         response);

               } else {

                  // 设置一个错误信息到session中去

                  request.getSession().setAttribute("error", "你的注册信息错误");

                  // 重定向到注册面

                  response.sendRedirect(request.getContextPath() + "/reg.jsp");

               }

           }else{

               response.setContentType("text/html;charset=UTF-8");

               response.getWriter().print("你不能重复提交");

           }

        }

    }

    第六步:问题

           1:在JSP上出现Java代码。

           解决方法:

                  用标签实现。

    开发一个标签类:

    package cn.oracle.tag;

    import java.util.UUID;

    import javax.servlet.jsp.JspException;

    import javax.servlet.jsp.JspWriter;

    import javax.servlet.jsp.tagext.TagSupport;

    public class ValidateTag extends TagSupport{

        public int doEndTag() throws JspException {

           //1:生成UUID放到session

           String uuid = UUID.randomUUID().toString().replace("-","");

           pageContext.getSession().setAttribute("aa", uuid);

           //2:输出页面上去

           String html = "<input type='text' name='uuud' value='"+uuid+"'>";

           //3:输出这个html到页面上

           JspWriter out = pageContext.getOut();

           try{

               out.print(html);

           }catch(Exception e){

               throw new RuntimeException(e);

           }

           return EVAL_PAGE;

        }

    }

    配置这个标签类:

        <display-name>v</display-name>

        <tlib-version>1.0</tlib-version>

        <short-name>v</short-name>

        <uri>/validate.tld</uri>

        <!-- 定义标签 -->

        <tag>

           <name>hidden</name>

           <tag-class>cn.oracle.tag.ValidateTag</tag-class>

           <body-content>empty</body-content>

        </tag>

    </taglib>

    在页面上引用这个标签:

    <%@ taglib uri="/validate.tld" prefix="v" %>[微软用户14] 

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <title>Insert title here</title>

    </head>

    <body>

        <p>注册</p>

        <form action="<c:url value='/RegServlet'/>" method="post">

           Name:<input type="text" name="name"><br/>

           pwd:<input type="text" name="pwd"><br/>

           <v:hidden/>[微软用户15] 

           <input type="submit" value="提交">

        </form>

    </body>

    </html>

    测试。

    第七步:问题

        <form action="<c:url value='/RegServlet'/>" method="post">

           Name:<input type="text" name="name"><br/>

           pwd:<input type="text" name="pwd"><br/>

           VVVV:<v:hidden/><br/>

           <input type="submit" value="提交">

        </form>

    对于 <v:hidden/>来说,生成什么什么样的html开发人员不知道。

        向session中放什么key,程序员也不知道。

    以上图示,说明应该给ValidateTag添加一个name属性:

     且要求用户必须要提供这个属性的值:

    1:o在类中声明一个setName。

    2:在*.tld文件中添加attibute元素配置。

    public class ValidateTag extends TagSupport{

        //接收用户的设置的参数

        private String elementName;

        public void setName(String name){[微软用户16] 

           this.elementName=name;

        }

        public int doEndTag() throws JspException {

           //1:生成UUID放到session

           String uuid = UUID.randomUUID().toString().replace("-","");

           pageContext.getSession().setAttribute(this.elementName[微软用户17] , uuid);

           //2:输出页面上去

           String html = "<input type='text' name='"+elementName[微软用户18] +"' value='"+uuid+"'>";

           //3:输出这个html到页面上

           JspWriter out = pageContext.getOut();

           try{

               out.print(html);

           }catch(Exception e){

               throw new RuntimeException(e);

           }

           return EVAL_PAGE;

        }

    }

    修改tld文件

    <tag>

           <name>hidden</name>

           <tag-class>cn.oracle.tag.ValidateTag</tag-class>

           <body-content>empty</body-content>

           <attribute>

               <name>name</name>

               <required>true</required>

               <rtexprvalue>false</rtexprvalue>

               <type>java.lang.String</type>

           </attribute>

        </tag>

    修改JSP页面

    <form action="<c:url value='/RegServlet'/>" method="post">

           Name:<input type="text" name="name"><br/>

           pwd:<input type="text" name="pwd"><br/>

           VVVV:<v:hidden name="vid[微软用户19] "/><br/>

           <input type="submit" value="提交">

        </form>

    修改regServlet中的获取值的参数

    request.setCharacterEncoding("UTF-8");

           // 2:接收用户的信息

           String name = request.getParameter("name");

           String pwd = request.getParameter("pwd");

           String xd = request.getParameter("vid");// 获取[微软用户20] 用户提交的值

           // 同时从session中取出值

           String xd2 = (String) request.getSession().getAttribute("vid"[微软用户21] );

    请回答:

           防止重复提交的关键点是什么:

                  判断用户提交的,与session中保存的,是否一样。

    2.6、实现遍历的标签

    Tag

           IteratorTag

                  TagSupport可以实现遍历.

    以下实现一个输出1..10的遍历的结果

    以下是最基本的输出1...10

    public class EachTag extends TagSupport{

        private int i=0;

        public EachTag() {

           System.err.println("构造方法");

        }

       

        @Override

        public int doStartTag() throws JspException {

           //在执行body之前.放一个值到pageContext中去

           pageContext.setAttribute("nn",++i);

           //返回包含body部分,以说明可以执行body部分,只有执行了body部分才会

           //执行到body部分的结束,

           //只有执行到body部分的结束才会调用doAfterBody方法

           return EVAL_BODY_INCLUDE;

        }

        @Override

        public int doAfterBody() throws JspException {

           if(i<10){

               //如果小于10就执行body部分再来次

               pageContext.setAttribute("nn",++i);

               return EVAL_BODY_AGAIN;

           }else{

               return SKIP_BODY;

            }

        }

        @Override

        public int doEndTag() throws JspException {

           //设置回原来的值

           i=0;

           return EVAL_PAGE;

        }

    }

    以下可以让用户来配置变量名

        <for:each var="nn">

           ${nn}<br/>

        </for:each>

      1:就是set方法

       

    以下实现任意的从某个数字到终点:

        主页<br/>

        <for:each start="${param.s}" end="${param.e}" var="mm1">

           ${mm1}<br/>

        </for:each>

    代码:

    public class EachTag extends TagSupport{

        //声明成员变量

        private String var;

        private Integer start=0;

        private Integer end = 0;

        public void setStart(Integer start) {

           this.start = start;

        }

        public void setEnd(Integer end) {

           this.end = end;

        }

        //设置值

        public void setVar(String var) {

           this.var = var;

        }

        public EachTag() {

           System.err.println("构造方法");

        }

       

        @Override

        public int doStartTag() throws JspException {

           //在执行body之前.放一个值到pageContext中去

           pageContext.setAttribute(var,start++);

           //返回包含body部分,以说明可以执行body部分,只有执行了body部分才会

           //执行到body部分的结束,

           //只有执行到body部分的结束才会调用doAfterBody方法

           return EVAL_BODY_INCLUDE;

        }

        @Override

        public int doAfterBody() throws JspException {

           if(start<=end){

               //如果小于10就执行body部分再来次

               pageContext.setAttribute(var,start++);

               return EVAL_BODY_AGAIN;

           }else{

               return SKIP_BODY;

           }

        }

        @Override

        public int doEndTag() throws JspException {

           //设置回原来的值

           start=0;

           return EVAL_PAGE;

        }

    }

    配置文件:

        <tag>

           <name>each</name>

           <tag-class>cn.oracle.tag.EachTag</tag-class>

           <body-content>JSP</body-content>

           <!-- 添加属性 -->

           <attribute>

               <name>var</name>

               <required>true</required>

               <rtexprvalue>false</rtexprvalue>

               <type>java.lang.String</type>

           </attribute>

           <attribute>

               <name>start</name>

               <required>false</required>

               <rtexprvalue>true</rtexprvalue>

               <type>java.lang.Integer</type>

           </attribute>

           <attribute>

               <name>end</name>

               <required>false</required>

               <rtexprvalue>true</rtexprvalue>

               <type>java.lang.Integer</type>

           </attribute>

        </tag>

    2.7、遍历集合,数组

           以下实现的一个遍历List的测试

    Object o = 2;//Integer,int

    Object o2 = new String(“ddd”);

    2、  MVC_开发模式

    a)         示例

    3、  增强HttpServlet之BaseServlet

    4、  在MVC模式中如何管理数据库的事务。

    a)         ThreadLocal模式。

    b)        动态代理所有Service层。

    5、分页


     [微软用户3]设置这个会话有效。

     [微软用户4]设置编码类型。

     [微软用户5]传递参数的。

     [微软用户6]将PageContext声明成成员变量。

     [微软用户7]获取PrintWriter的包装对象。

     [微软用户8]只重写关心的方法 。

     [微软用户9]通过父类的pc获取输出对象。

     [微软用户12]获取两个值,进行比较 。

     [微软用户13]删除放到session中的值。

  • 相关阅读:
    Network | DNS
    Network | Cookie and Session
    Network | HTTP protocol
    全源最短路径
    最小生成树
    最小生成树
    10. Regular Expression Matching *HARD*
    4. Median of Two Sorted Arrays *HARD* -- 查找两个排序数组的中位数(寻找两个排序数组中第k大的数)
    44. Wildcard Matching *HARD*
    43. Multiply Strings 字符串表示的大数乘法
  • 原文地址:https://www.cnblogs.com/ljhoracle/p/3055708.html
Copyright © 2020-2023  润新知