javaee学习之路(十四)JSP编程实例

这里写图片描述
例1、输出当前时间值。
1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jsp入门案例(输出时间)</title>   
  </head>
  <body>
  当前时间值是:
   <% 
    Date date=new Date();
    out.write(date.toLocaleString());
    %>
  </body>
</html>

找到tomcat服务器当中对应的Servlet文件C:\tomcat\work\Catalina\localhost\day08\org\apache\jsp\ _1_jsp.java
……

out.write("\r\n");
      out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");
      out.write("<html>\r\n");
      out.write(" <head>\r\n");
      out.write(" <title>jsp入门案例(输出时间)</title>   \r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("当前时间值是:\r\n");
      out.write("   ");
      Date date=new Date();
      out.write(date.toLocaleString());
      out.write("\r\n");
      out.write("  </body>\r\n");
      out.write("</html>\r\n");

<% %>之间的内容被原封不动地嵌套在了servlet当中
例2、Page指令之errorPage,怎样处理JSP当中的异常—实际开发当中案例1。
Step1、1.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jsp入门案例(输出时间)</title>   
  </head>
  <body>

   <% 
    int x=1/0;
    out.print(x);
    %>
  </body>
</html>

Step2、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <error-page>
    <exception-type>java.lang.ArithmeticException</exception-type>
    <location>/errors/error.jsp</location>
  </error-page>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Step3、error.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'error.jsp' starting page</title>   
  </head>
  <body>
    对不起,出错了!!! <br>
  </body>
</html>

例3、Page指令之errorPage,怎样处理JSP当中的异常—实际开发当中案例1
Step1、

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <error-page>
    <exception-type>java.lang.ArithmeticException</exception-type>
    <location>/errors/error.jsp</location>
  </error-page>
  <error-page>
    <error-code>404</error-code>
    <location>/errors/404.jsp</location>
  </error-page>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Step2、404.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP '404.jsp' starting page</title>   
  </head>
  <body>
      对不起,您访问的资源不存在!!! <br>
  </body>
</html>

Step3、在IE中键入htpp://localhost:8080/day08/fandong
例3、JSP乱码问题。
这里写图片描述
在Eclipse当中只需要这只PageEncoding就行了
例4、include指令实例代码
Step1、在WebRoot目录之下建立目录public,在其中放入head.jsp和foot.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>head.jsp</title>   
  </head>
  <body>
    这是页头!!! <br>
  </body>
</html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>foot.jsp</title>   
  </head>
  <body>
    这是页脚!!! <br>
  </body>
</html>

Step2、在WebRoot目录下创建页面2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>include指令(静态包涵)</title>   
  </head>
  <body>
  <%@include file="/public/head.jsp"%>
    aaaa<br>
  <%@include file="/public/foot.jsp"%>
  </body>
</html>

Step3、在ie中键入: http://localhost:8080/day08/2.jsp可得

这是页头!!! 
aaaa
这是页脚!!!

1、 在实际开发当中通常将head.jsp和foot.jsp等被包涵的文件写为一下格式:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    这是页头!!!<br> 

(即只留下声明和与当中的内容即可)
2、include指令(静态包涵,编译时包含,被包涵的JSP文件与包涵的Jsp文件一起编译成一个servlet)
3、动态包涵:3.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>动态包涵(这种情况是运行时包含)</title>   
  </head>
  <body>
   <%
      request.getRequestDispatcher("/public/head.jsp").include(request,response);
   %>
   <%
         response.getWriter().write("aaaaaaaaaaa <br>");
    %>
    <%
      request.getRequestDispatcher("/public/foot.jsp").include(request,response);
   %>
  </body>
</html>

在实际开发当中尽量用静态包含!!!!!
例5、out隐式对象
问题演示:4.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP '4.jsp' starting page</title>   
  </head>
  <body>
      Aaaaaaa//编译之后用out输出
    <%
        out.write("hahahahahha");
        response.getWriter().write("wuuwuwuwuuwu");
     %>
  </body>
</html>

在IE中键入:http://localhost:8080/day08/4.jsp可以看到:
wuuwuwuwuuwu aaaaaaaa hahahahahha
问题在于并没有出想ha在前wu在后的情况,原因:out有缓存
例6、PageContext对象访问其他域对象(4.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>pageContext对象访问其他域</title>   
  </head>
  <body>
    <%
        request.setAttribute("data","fandong");
        String data=(String)pageContext.getAttribute("data",PageContext.REQUEST_SCOPE);
        out.write(data);
     %>
  </body>
</html>

在IE中可以得到:fandong
例7、pageContext域对象之findAttribute方法之应用。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>pageContext对象访问其他域</title>   
  </head>
  <body>
    <%
        request.setAttribute("data","fandong");
        String data=(String)pageContext.getAttribute("data",PageContext.REQUEST_SCOPE);
        out.write(data+"<br/>");
        String data2=(String)pageContext.findAttribute("data");
        out.write(data2);
     %>
  </body>
</html>

在IE中可以得到:fandong
fandong
例8、标签的作用
Step1、5.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSP常用标签</title>   
  </head>
  <body>
  <%
      String x="12"; 
  %>
    <jsp:forward page="/servlet/ServletDemo1">
      <jsp:param value="<%= x %>" name="password"/>
      <jsp:param value="fandong" name="username"/>
    </jsp:forward>
  </body>
</html>

Step2、ServletDemo1.java

package cn.itcast.web.servlet;
import *;
public class ServletDemo1 extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String username=request.getParameter("username");
        System.out.println(username);
        String x = (String)request.getParameter("password");
        System.out.println(x);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

Step3、在IE中键入:htpp://localhost:8080/day08/5.jsp可以看到:fandong 12
例9、应用实例之一。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jsp:usebean</title>   
  </head>
  <body>
  <%--创建一个Person对象,这个对象的名字叫做person,(如果在page域中有了一个Person就直接拿过来用,不另外创建)--%>
<%-- useBean标签的标签提只在useBean标签实例化bean时才执行--%>
    <jsp:useBean id="person" class="cn.itcast.domain.Person" scope="page">
    Fandong!!!!
</jsp:useBean>
    <%=person.getName() %>
  </body>
</html>

    上面的过程中,当浏览器第一次访问1.jsp时,useBean标签会实例化Person对象,此时标签之间的Fandong!!!!会执行下去,会在浏览其中显示,但是,当第二次访问1.jsp时就不会执行了,因为已经在page域当中创建了persion的对象了!
例10、2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jsp:setProperty标签</title>   
  </head>
  <body>
        <jsp:useBean id="person" class="cn.itcast.domain.Person" scope="page"/>
    <%--手工为bean赋值 --%>
    <jsp:setProperty name="person" property="name" value="xxx"/>
    <%--赋当前时间值给属性birthday --%>
    <jsp:setProperty name="person" property="birthday" value="<%=new Date()%>"/> 
    <%=person.getName() %><br/>
    <%=person.getBirthday() %><br/>
    <%--用请求参数给bean的属性赋值 --%>
    <jsp:setProperty property="name" name="person" param="name"/>
    <jsp:setProperty property="age" name="person" param="age"/>
    <%=person.getName() %><br/>
    <%=person.getAge() %><br/>
  </body>
</html>

    在IE中键入http://localhost:8080/day09/2.jsp?name=fandong&age=12可以得到结果:
xxx
Sat Sep 15 17:52:51 CST 2012
fandong
12
例11、为所有参数赋值。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jsp:setProperty标签</title>   
  </head>
  <body>
    <jsp:useBean id="person" class="cn.itcast.domain.Person" scope="page"/>
    <%--用所有的请求参数为bean赋值 --%>
    <jsp:setProperty property="*" name="person"/>
    <%=person.getName()%>
上面这一句代码等同于<jsp:getProperty name=”person” ptoperty=”name”/>
    <%=person.getAge()%>   
  </body>
</html>

    在IE中键入http://localhost:8080/day09/2.jsp?name=fandong&age=12可以得到结果:
fandong
12
(注意IE栏中带过来的参数名称应该与bean中的属性名一样)
说明:在servlet当中自动将”12”转为了整形。这个标签支持8中数据类型的转换(把客户机提交的字符串转为8中基本数据类型赋值到jean当中)。
例13、使用Jsp+javabean编写一个计算器页面,javaBean具有firstNum、secondNum、result、operator属性,并提供一个calculate方法.
补充:实现各种数的精确运算:

package cn.itcast.domain;
import java.math.BigDecimal;
public class Demo1 {
    public static void main(String[] args){
        BigDecimal a=new BigDecimal("0.1");
        BigDecimal b=new BigDecimal("0.006");
        BigDecimal c=new BigDecimal("0.3");
        System.out.println(a.add(b).toString());
        System.out.println(a.multiply(b).toString());
        System.out.println(a.divide(c, 10,BigDecimal.ROUND_HALF_UP));
        //表示保留小数点后面10位
    }
}

输出结果为:
0.106
0.0006
0.3333333333
Step1、calculator.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>计算器</title>   
  </head>
  <body style="text-align: center">
   <jsp:useBean id="calculatorBean" class="cn.itcast.domain.CalculatorBean"></jsp:useBean>
   <jsp:setProperty property="*" name="calculatorBean"/>
   <%
      try{
       calculatorBean.calculator();
       }catch(Exception e)
       {     
          out.write(e.getMessage());//把异常给用户友好提示
       }
    %> 
    <br/>--------------------------------------------------------<br/>
    计算结果是:
    <jsp:getProperty property="firstNum" name="calculatorBean"/>
    <jsp:getProperty property="operator" name="calculatorBean"/>
    <jsp:getProperty property="secondNum" name="calculatorBean"/>
    =
    <jsp:getProperty property="result" name="calculatorBean"/>
    <br/>--------------------------------------------------------<br/>
    <form action="/day09/calculator.jsp" method="post">
    <table width="40%" border="1">
       <tr>
          <td colspan="2">简单的计算器</td>
       </tr>
       <tr>
           <td>第一个参数</td>
           <td>
               <input type="text" name="firstNum"/> 
           </td>
       </tr>
       <tr>
           <td>运算符</td>
           <td>
               <select name="operator">
                  <option value="+">+</option>
                  <option value="-">-</option>
                  <option value="*">*</option>
                  <option value="/">/</option>

               </select>
           </td>
       </tr>
       <tr>
           <td>第二个参数</td>
           <td><input type="text" name="secondNum"/> </td>
       </tr>
       <tr>
           <td colspan="2">
              <input type="submit" value="计算"/>
           </td>
       </tr>
    </table>
    </form>
  </body>
</html>

Step2、CalculatorBean.java

package cn.itcast.domain;
import java.math.BigDecimal;
//封转计算器数据的bean
public class CalculatorBean {
    private String firstNum="0";
    private String secondNum="0";
    private char operator='+';
    private String result;
    public String getFirstNum() {
        return firstNum;
    }
    public void setFirstNum(String firstNum) {
        this.firstNum = firstNum;
    }
    public String getSecondNum() {
        return secondNum;
    }
    public void setSecondNum(String secondNum) {
        this.secondNum = secondNum;
    }
    public char getOperator() {
        return operator;
    }
    public void setOperator(char operator) {
        this.operator = operator;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public void calculator(){
        BigDecimal first=new BigDecimal(this.firstNum);
        BigDecimal second=new BigDecimal(this.secondNum);
        switch (this.operator) {
        case '+':{
            this.result=first.add(second).toString();
            break;}
        case '-':{
            this.result=first.subtract(second).toString();
            break;}
        case '*':{
            this.result=first.multiply(second).toString();
            break;}
        case '/':{
            if(second.doubleValue()==0){
                throw new RuntimeException("被除数不能为0");
            }
            this.result=first.divide(second,10,BigDecimal.ROUND_HALF_UP).toString();
            break;}
        default:{
            throw new RuntimeException("运算符错误!");
            }
        }
    }
}

例14、EL表达式例程。(3.jsp)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>EL表达式例程</title>   
  </head>
  <body>
    <%
       String data="fandong";
       request.setAttribute("data",data);
     %>
     ${data}<%--相当于pageContext.findAttribute(“data”);--%>
  </body>
</html>

在IE中键入:http:localhost:8080/day09/3.jsp便可以看到:
fandong
例15、EL表达式快速入门。
Step1、Person.java

package cn.itcast.domain;
import java.util.Date;
public class Person {
    private String name;
private Address address;
    public Person() {
        super();
    }
    public Person(String name) {
        super();
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
}

Step2、Address.java

package cn.itcast.domain;
public class Address {
    private String city;
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
}

Step3、3.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%%@page import="cn.itcast.domain.Person"%%>
<%@page import="cn.itcast.domain.Address"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>EL表达式例程</title>   
  </head>
  <body>
     <%
           String data="fandong";
           request.setAttribute("data",data);
     %>
            ${data}<%--相当于pageContext.findAttribute(“data”);--%>
     <br>
     <%
            Person p=new Person();
            p.setName("denghongmei!");
            request.setAttribute("person",p);
      %>
            ${person.name}
            <br>
      <%
            Person p1=new Person();
            Address a=new Address();
            a.setCity("上海");
            p1.setAddress(a);
            request.setAttribute("p1",p1);
       %>
             ${p1.address.city}
             <br>
       <%-- p1上面的request设置的属性名称,而后面的为bean封装的属性--%>
       <%--EL表达式读取集合当中的内容--%>
       <%
               List list=new ArrayList();
               list.add(new Person("aaa"));
               list.add(new Person("bbb"));
               list.add(new Person("ccc"));
               request.setAttribute("list",list);
        %>
            ${list[0].name}
            <br>
        <%
               Map map=new HashMap();
               map.put("aa",new Person("aaaa"));
               map.put("bb",new Person("bbbb"));
               map.put("cc",new Person("cccc"));
               map.put("dd",new Person("dddd"));
               map.put("1111",new Person("eeee"));
               request.setAttribute("map123",map);
        %>
                ${map123.bb.name}
                <br>
         <%--用${map123.1111.name}取不出来数据的,这是要用[]来取 --%>
               ${map123['1111'].name}  
               <br>
         <%--得到当前web应用的名称,用在超链接等地方 --%>
               ${pageContext.request.contextPath}
               <br>
               <a href="${pageContext.request.contextPath}/index.jsp">点击</a>
  </body>
</html>

例16、使用jstl和EL完成集合的迭代。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="cn.itcast.domain.Person"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%--上面一行的作用是导入标签库,上面的uri怎么来的? 在eclipse左侧目录点击day09项目->Reference Libraries->standard.jar->META-INF->c.tld->找到映射的<uri>http://java.sun.com/jsp/jstl/core</uri>--%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>使用jstl+EL完成集合迭代</title>   
  </head>
  <body>
    <%
               List list=new ArrayList();
               list.add(new Person("aaa"));
               list.add(new Person("bbb"));
               list.add(new Person("ccc"));
               request.setAttribute("list",list);
      %>
      <c:forEach var="person" items="${list }">
      <%--将迭代的每个元素放在person变量当中 --%>
          ${person.name }<br/>
      </c:forEach>
      <br>
        <%
               Map map=new HashMap();
               map.put("aa",new Person("aaaa"));
               map.put("bb",new Person("bbbb"));
               map.put("cc",new Person("cccc"));
               map.put("dd",new Person("dddd"));
               map.put("1111",new Person("eeee"));
               request.setAttribute("map123",map);
        %>
        <c:forEach var="entry" items="${map123}">
        <%--对map的迭代实际上是对map.entrySet返回的set<Map.entry>结合进行迭代 --%>
          ${entry.key} : ${entry.value.name} <br/>
     <%--判断标签 --%>
        </c:forEach>
        <c:if test="${user!=null}">
                               欢迎您:${user.username}
        </c:if>
        <c:if test="${user==null}">
        用户名:<input type="text"/>
        密码:<input type="password"/>
        </c:if>
  </body>
</html>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值