zoukankan      html  css  js  c++  java
  • 初识JSP,第一天

    1.什么JSP
    java Server Page java 服务端的页面,它和servlet 一样可以提供动态的html 响应。 不同的是 servlet 以 java 代码 为主
    jsp 以html 为主 内嵌少量的java 代码。 jsp 以 .jsp 结尾.以最简单的一个为例

     1 <%@page import="java.util.Date"%>
     2 <%@ page language="java" contentType="text/html; charset=utf-8"
     3     pageEncoding="utf-8"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     8 <title>Time</title>
     9 </head>
    10 <body>
    11     现在时间是:<%= new Date()%>
    12     
    13 </body>
    14 </html>
    View Code

     2.JSP 和 Servlet 的关系 

      当请求jsp 页面时,服务器端会把 jsp页面经过 转义(把jsp 变成java)编译 (java 变成class)形成servlet 对象 就可以提供动态的html 响应。所以jsp 本质上就是servlet。 

    生成的.jsp.java路径是E:apache-tomcat-8.0.52workCatalinalocalhostjsp-day06orgapachejsp 

    写个简单的例子:

    <%!
        int s = 10001;
        public String getName() {
            return "liweijie";
        }
    %> <%=s %><br> <%=getName()
    输出:
    10001
    liweijie

    3.声明区
    语法 : <%! %>
    作用: 用来定义变量 以及 定义方法

    <%!
        int s = 10001;
        public String getName() {
            return "liweijie";
        }%>
    View Code

    4.表达式
    语法: <%=表达式%>
    作用:使用表达式来进行取值

     <%=getName() %>

    5.代码区
    语法: <% %>
    作用:可以使用任何的java语法 编写java 代码 ;好了下面我们来个进阶的,前提是谢谢好一个model实体类BankAccount:

          <%
            BankAccount acc = new BankAccount(1, "1001", "12345", 12);
            BankAccount a1cc = new BankAccount(2, "1002", "12345", 13);
            
          %>
        <table>
            <tr>
                <td>id</td>
                <td>acc_no</td>
                <td>password</td>
                <td>money</td>
            </tr>
            <tr>
                <td><%=acc.getId()%></td>
                <td><%=acc.getAcc_no()%></td>
                <td><%=acc.getAcc_password()%></td>
                <td><%=acc.getAcc_money()%></td>
            </tr>
            <tr>
                <td><%=a1cc.getId()%></td>
                <td><%=a1cc.getAcc_no()%></td>
                <td><%=a1cc.getAcc_password()%></td>
                <td><%=a1cc.getAcc_money()%></td>
            </tr>
        </table>

    当然,这种方式显然还不够简介,所以我们再次将<tr>进行升级:

    <%
            BankAccount acca = new BankAccount(1, "1001", "12345", 12);
            BankAccount a1cc = new BankAccount(2, "1002", "12345", 13);
            BankAccount a1ce = new BankAccount(3, "1003", "45645", 324);
            BankAccount a1cf = new BankAccount(4, "1004", "976", 433);
            List<BankAccount> list = new ArrayList<>();
            list.add(acca);
            list.add(a1cc);
            list.add(a1ce);
            list.add(a1cf);
        %>
        <table>
            <tr>
                <td>id</td>
                <td>acc_no</td>
                <td>password</td>
                <td>money</td>
            </tr>
    
            <!-- 方法一:此处不能使用PrintWriter, 使用PrintWriter打印的位置不正确 -->
            <%
                for (int i = 0; i < list.size(); i++) {
                    BankAccount acc = list.get(i);
                    out.append("<tr>");
                    out.append("<td>" + acc.getId() + "</td>");
                    out.append("<td>" + acc.getAcc_no() + "</td>");
                    out.append("<td>" + acc.getAcc_password() + "</td>");
                    out.append("<td>" + acc.getAcc_money() + "</td>");
                    out.append("");
                    out.append("</tr>");
                }
            %>
            <tr>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
            <!-- 方法二:此处不能使用PrintWriter, 使用PrintWriter打印的位置不正确 -->
            <%
                for (int i = 0; i < list.size(); i++) {
                    BankAccount acc = list.get(i);
                    String s1 = "<tr><td>'" + acc.getId() + "'</td><td>'" + acc.getAcc_no() + "'</td><td>'"
                            + acc.getAcc_password() + "'</td><td>'" + acc.getAcc_money() + "'</td></tr>";
                }
            %>
    
            <!-- 方法三:此处不能使用PrintWriter, 使用PrintWriter打印的位置不正确 -->
    
        </table>
    View Code

    虽然已经升级了,但作为一个开发者来说,显然还是不够完美:

     1 jsp页面:
     2 
     3     <%
     4      List<BankAccount> list=(List<BankAccount>)request.getAttribute("accounts");
     5     %>
     6 
     7         <%
     8         
     9             for(int i=0;i<list.size();i++){
    10                 BankAccount acc = list.get(i);
    11                 out.append("<tr>");
    12                 out.append("<td>" + acc.getId() + "</td>");
    13                 out.append("<td>" + acc.getAcc_no() + "</td>");
    14                 out.append("<td>" + acc.getAcc_password() + "</td>");
    15                 out.append("<td>" + acc.getAcc_money() + "</td>");
    16                 out.append("");
    17                 out.append("</tr>");
    18             }
    19           %>
    20 servlet页面:
    21 @WebServlet("/BankAccount.do")
    22 public class S_BankAccount extends HttpServlet {
    23     private static final long serialVersionUID = 1L;
    24 
    25     protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    26         //response.setContentType("text/html;charset=utf-8");
    27         //BankAccount
    28         BankAccount acca = new BankAccount(1, "1001", "12345", 12);
    29         BankAccount a1cc = new BankAccount(2, "1002", "12345", 13);
    30         BankAccount a1ce = new BankAccount(3, "1003", "45645", 324);
    31         BankAccount a1cf = new BankAccount(4, "1004", "976", 433);
    32         List<BankAccount> accounts = new ArrayList<>();
    33         accounts.add(acca);
    34         accounts.add(a1cc);
    35         accounts.add(a1ce);
    36         accounts.add(a1cf);
    37         request.setAttribute("accounts", accounts);
    38         //转发给demo5.jsp
    39         request.getRequestDispatcher("demo5.jsp").forward(request, response);
    40     }
    View Code

    6.注释
      6.1 标记语言的注释 -- 发给浏览器 浏览器通过查看源代码可以看到
      <!-- 这是第二种显示数据的方式 -->
      6.2 jsp语法注释
      <%-- 这是jsp语法注释 不发给浏览器 --%>
      6.3 java语言注释
     在代码块中可以使用 java语言的注释 也不发给浏览器
    7.JSP中的指令
      7.1 指令的格式
      <%@指令名 属性="属性值" 属性2="属性值" %>
      7.2 jsp 中的三大指令
      page 指令 用来导包 和 做一些页面属性的设置
      import 导入对应的类型
      buffer 缓冲大小 默认 8k
    errorPage 当页面出现错误 跳转到错误展示页面
    isErrorPage 是不是一个展示错误的页面 如果是就是true 不是就是false
    pageEncoding 页面文字的编码
    contentType 响应的格式 和 显示的编码
    isELIgnored 是否忽略EL表达式 默认 是false
    taglib 指令 标签库指令 用来引入对应的标签库位置
    prefix 标签库的简称
    uri 标签库的位置标识
    include 指令 页面包含指令 用来包含指定的页面 (静态包含)
    file 指定包含的文件 (先把被包含页面 拷贝到对应的页面 再转回成servlet
    所以只有一个servlet 产生)

    8.JSP 中的动作
    8.1 include 动作 (动态包含)
    <jsp:include page="页面的位置" />
    jsp 的include 动作叫动态包含 意思是 先将被包含的页面转换成对应的class
    然后再将被包含的页面 动态的加载到 包含页面,所以这样会产生两个class文件。
    其实动态包含 还体现在 可以向被包含页面传递数据。
    通过<jsp:param value="值" name="key" /> 在被包含页面
    使用request.getParameter("key")

    图片转载自:https://blog.csdn.net/u011024652/article/details/52026920
    8.2 forward 动作
    jsp 页面中可以通过java 代码来完成转发
    也可以使用 <jsp:forward 动作来完成转发 同时 利用 <jsp:param 进行参数传递。
    9.发送一个 bankAccountAll.do 到达一个servlet 。这个servlet 创建DAO 实现类对象
    并通过dao 对象 获取银行账户列表。把这个银行账户列表放入request 中转发到对应的jsp
    页面 在jsp 页面中把银行账户列表数据显示到一个table表格中。

  • 相关阅读:
    解决new file()在IOS下不兼容问题
    去除ios上input输入框上方的阴影
    前端不同设备的网页字体设置
    Vue进行请求拦截
    Vue路由拦截
    js判断当前是ios还是android
    身份证号码验证,验证最后一位校验码
    查询MySQL数据表的字段名和表结构
    JAVA中循环删除list中元素的方法总结
    eclipse修改默认注释
  • 原文地址:https://www.cnblogs.com/hx1098/p/9225873.html
Copyright © 2011-2022 走看看