⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12. jsp note.txt

📁 在达内培训java笔记
💻 TXT
📖 第 1 页 / 共 4 页
字号:


5.响应对象
response:
sendRedirect("third.jsp")
sendError(404, "400 Error!")
6.应用对象
application:
log("some body visit our website...");
getMajorVersion()
getMinorVersion()
getServerInfo()
getRequestDispatcher(),getResourceAsStream(),getInitParameter()

pageContext:
getAttribute("name")

config:
getInitParameter("classNo")
getServletName()

page:
getClass()



************************************************************************************************
二、欢迎文件

 1.缺省情况下,一个Web App中的  index.html, index.htm, index.jsp  可作为默认的欢迎文件.
   当用户请求没有指明要访问的资源时,Web Container会用欢迎文件响应客户端请求.
 2.手工设置欢迎文件:
   web.xml
   找welcome.jsp,没找到,继续往下找
   <welcome-file-list>
     <welcome-file>/welcome.jsp</welcome-file>
     <welcome-file>/welcome1.jsp</welcome-file>
     <welcome-file>/welcome2.jsp</welcome-file>
   </welcome-file-list>




三、MVC
 MVC:    Model-View-Controller (用户交互过程:输入、处理、输出) 
 WEB应用的MVC;优化Web App的结构,使用MVC模式
 Model 1:    JSP + JavaBean(EJB)
 Model 2:    Servlet + JSP + JavaBean(EJB)------>MVC

体系结构

设计模式
  具体问题提出具体的解决办法

习惯用法










Day4
内容要点: 1 实现文件上传  2 数据验证  3 分页实现
*****************************************************************************************
一、文件上传
1.表单形式
<form action="" method="POST" enctype="multipart/form-data">
  file:<input type="file" name="file"/><br/>
  <input type="submit"/>
</form>

2.使用HttpMonitor工具:
查看文件上传时,请求的内容。



3.服务器端对上传文件的处理
例子
fileupload
处理步骤(待补充) 



知识点:
1)通过HttpServletRequest来传送文件内容
2)处理request头,字符串的分析
3)java.io.File API的使用



*****************************************************************************************
二、数据验证

如何完成Web App中的数据验证工作

1)客户端校验:
输入域不能为空,只能是数字,数据长度大于5等等
JavaScript客户端完成(验证框架,负责客户端方面的验证)

2)服务器端校验:
例如:后台数据库要求提交数据唯一性
Java服务器端完成(没有现成的框架,因为不同的项目有不同的业务规则)


重点:
1)分清楚什么情况下使用客户端校验,什么情况下使用服务器端校验




***************************************************************************************
三、数据分页
查询数据库时,如果满足条件的记录很多,该如何返回给页面?
1.客户端分页
  同样地,使用html/javascript等技术处理。甚至可以封装成组件
2.服务器端分页
  非常重要的,在实际项目中非常需要————性能问题。
这需要结合JDBC/Hibernate/TopLink/EJB等技术实现。

查询分页
  1)一次性从数据库中查出所有信息,在内存中作分页(缓存) 
      特点:速度非常快,消耗资源大(内存?) 

  2)分多次查询数据库,一次查询的数据量就是一个页面可以显示的数据量
      特点:消耗资源少,相对来说速度慢

  3)折衷的方案(一次只取n页,1<n<总页数)(部分缓存) 
      特点:中庸之道(实现中,置换算法教难) 

常见的分页处理方法:定义如下几个参数
rows:数据库表中记录总行数   select count(*) from 表名;
  totalPage:总页数     (导出属性:可以由其他属性计算而得) int totalPage = rows / size + 1;
size:每页显示的记录数目    可定制,可写死
curPageNo:当前页         客户端决定
  startRowNo:当前页在数据库中的起始行号(导出属性)        int startRowNo = (curPageNo -1 ) * size;

练习:
重新改造Usermanager例子中的查询所有的用户的功能(使用分页) 












Day5
内容要点:  1 EL   2 JSTL
**************************************************************
一、EL(Expression Language----表达式语言) 
 为网页美工而设,跟java语句相似;尽量减少java程序的依赖(不能要求美工使用java) 
 1.语法
   表达式          vs.    EL表达式语言(JSP2.0) 
   <%=name%>     <=>       ${name} 
 2.文字
   在 EL 表达式中,数字、字符串、布尔值和 null 都可以被指定为文字值(常量)。
   字符串可以用单引号或双引号定界。布尔值被指定为 true 和 false 。
  例子:
   表达式                              值
   -----------------------------------------------------------------------
   ${-168.18}                         -168.18
   ${3.8e-18}                         3.8e-18           //科学计数法
   ${3.14159265}                      3.14159265                  
   ${"Hello JSP EL!"}                 Hello JSP EL!     等价于 <%="Hello JSP EL!"%>          
   ${'Hello JSP EL...'}               Hello JSP EL...
   ${true}  //can be TRUE?            true
   ${false} //can be FALSE?           false
   ${str==null}                       true              //布尔值的表达式

 3.EL 运算符
   类别               运算符
   -------------------------------------------------------------
   算术运算符        +、  -、  *、  /(或 div)、    %(或 mod)
   关系运算符        ==(或 eq)、    !=(或 ne)、    <(或 lt)
                 >(或 gt)、     <=(或 le)、    >=(或 ge)
   逻辑运算符        &&(或 and)、   ||(或 or)、    !(或 not)
   验证运算符        empty  
     其中,empty 判断一个变量是否为null或是否包含有效数据:
     if(name==null||name.equlas(""))  等价于  ${empty name} ->    true
  例子:
    表达式                              值
   -------------------------------------------------------------
    ${3+5.1}                           8.1
    ${"Hello"+",Tarena!"}              报错!  // EL的"+"没有字符串连接功能
    ${5*2}                             10
    ${9.3/3}                           3.1
    ${9.3 div 3}                       3.1
    ${8 div 0}                         Infinity // 表示无穷大
    ${9%2}                             1
    ${9 mod 2}                         1
    ${8*6>68?"Yes":"No"}               No   //三目表达式
   <% String name="";
    request.setAttribute("name",name);      //如果没有 setAttribute ,则必定是空
   %>
    ${empty name}                      true //对范围对象内的变量或对象进行判空

 4.变量和JavaBean属性数据输出
   表达式语言输出变量,是到范围对象(pageContext,request,session,application)中查找相应属性。
   而非直接在页面中查找实例或局部变量。
  表达式语言查找变量的顺序是:
   pageContext -> request -> session->application, 所有范围都未找到时,赋值null

 5.存取器
   []    ->输出对象属性值,输出数组或集合中对应索引值
   .     ->输出对象属性值
  例子:
   <% SuperGirl girl = new SuperGirl();   girl.setName("Alice");
      session.setAttribute("girl",girl);  %>  //一定要有这句,设置成范围对象
   ${girl["name"]}
   ${girl['name']}   //拿属性时,单引跟双引等价
   ${girl.name}      //这种方法同样可以
   
   <%  List aList = new ArrayList();
       aList.add("China");  aList.add(girl);  aList.add(168.18);
       session.setAttribute("aList", aList); %>
   ${aList[0]}   //使用下标来取值 "China"
   ${aList[1]}   //取得对象的引用地址  还可以嵌套:${aList[1]['name']}
   ${aList[3]}   //下标越界,不会报错;只是取不出值
   
   <%  Map map = new HashMap();
       map.put("name", "Kitty");  map.put("age", "25");  map.put("date", new Date());
       map.put("aList", aList);
       session.setAttribute("map", map); %>
   ${map.date}     ${map["date"]}     //这两个等效
   ${map.aList[0]} ${map["aList"][0]} //这两个也等效
   ${map.aList[1][name]}              //嵌套取值

 6.隐含对象
   el提供了自己的一套隐含对象,方便在页面内对各种常用数据信息的访问.
    EL隐藏对象                         JSP隐藏对象
   --------------------------------------------------------------------------------
    pageScope                         pageContext
    requestScope                      request
    sessionScope                      session
    applicationScope                  appication

    param:               request.getParameter() 
    paramValues:         在提交表单里,有多个输入域同名getParameterValues
    header:              request.getHeader() 按照key-value的形式取出;value:是一个String类型的值
    headerValues          按照key-value的方式取出,但是headerValues里面的value是一个String类型的数组
    cookie                request.getCookies() 
    initParam             context param

  例子:
    1)超女登记信息  
      enroll.html
      <form action="index.jsp" method="post"> 
        <table border="1"> 
        <tr><td>姓名:</td> 
            <td><input type="text" name="name"></td></tr> 
        <tr><td>年龄:</td> 
            <td><input type="text" name="age"></td></tr>  
        <tr><td>城市:</td> 
            <td><input type="text" name="city"></td>  </tr>  
        <tr><td align="center" colspan="2"><input type="submit" value="提交"></td></tr> 
        </table>
      </form>

      index.jsp
      <jsp:useBean id="SuperGirl" class="vo.SuperGirl" scope="page"></jsp:useBean>
      <jsp:setProperty name="SuperGirl" property="name" value="${param.name}"/>
      <jsp:setProperty name="SuperGirl" property="age"  value="${param.age}"/>
      <jsp:setProperty name="SuperGirl" property="city" value="${param.city}"/>
      <table border="1">   <% //把设置输出出来 %>
        <tr><td>姓名:</td> 
            <td>${SuperGirl.name}</td></tr> 
        <tr><td>年龄:</td> 
            <td>${SuperGirl.age}</td></tr>  
        <tr><td>城市:</td> 
            <td>${SuperGirl.city}</td></tr>  
      </table>

    2)范围对象
      <%  pageContext.setAttribute("name", "page");
        request.setAttribute("name", "request");
        session.setAttribute("name", "session"); 
        application.setAttribute("name", "application"); %> 

      ${name}    // pageContext -> request -> session->application
      ${pageScope.name}
      ${requestScope.name}
      ${sessionScope.name}
      ${applicationScope.name}

    3)paramValues
      在enroll.html加入: 兴趣
        <table>
      <input type="checkbox" name="habit" value="Reading"/>读书
      <input type="checkbox" name="habit" value="Game"/>游戏

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -