JavaWeb学习

JavaWeb学习

JSP

概述:

Java Server Pages:一种基于Java语言的应用开发技术。

JSP页面:

在传统的HTML页面文件中加入Java程序片和JSP标记就构成了一个JSP页面文件,按文本文件保存,拓展名为.jsp。
基本结构:

这里写图片描述

JSP页面可由5种元素组合而成:

① 普通的HTML标记符;
② JSP标记,如指令标记、动作标记;
③ 变量和方法的声明;
④ Java程序片;
⑤ Java表达式 ;

jsp成员变量和方法的声明:
<%!    %>

之间声明变量或方法,方法在整个页面上有效。

<%! %>和<% %>声明变量的区别:

如以下两段简单的代码:

<%@ page contentType="text/html;charset=GBK" %>
<HTML>
    <BODY BGCOLOR=cyan>
        <FONT size=4>
            <%! int i=0; %>
            <%  i++; %>
            <P>您是第  <%=i%>  个访问本站的客户。
        </FONT>
    </BODY>
</HTML>
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
    <BODY BGCOLOR=cyan>
        <FONT size=4>
            <% int i=0; %>
            <% i++; %>
            <P>您是第  <%=i%>  个访问本站的客户。
        </FONT>
    </BODY>
</HTML>

在上面的两段简单的代码中,可以看到,除了变的声明方式不一样,其余的都一样,但运行界面却不相同。
第一段代码中,只要不重新启动服务,连续刷新页面,页面访问的次数会增加;
而对于第二段代码,无论是否重启服务,每次刷新页面,访问页面的次数均为1。

由此可以看出:

使用<%! %>声明的变量,在一次服务中的各个页面均有效,其定义的内容在一次服务的所有页面中实现共享;
而使用<% %>声明的变量仅仅在当前页面有效,声明的内容不可共享。
表达式:<%= %>

“ <%=”和“%>”之间可以是一个Java表达式 。

表达式的值由服务器负责计算,并将计算结果用字符串形式发送到客户端显示。

示例:

<%@ page contentType="text/html;charset=utf-8" %>
<HTML>
    <BODY BGCOLOR=cyan>
        <h3>这是一个简单的JSP页面</h3>
               <% int i, sum=0;
                   for(i=1;i<=100;i++)
                    { sum=sum+i;
                    }
                %>
        <h5>  1到100的连续和是:
           <%=sum %> 
        </h5>
    </BODY>
</HTML> 

运行界面:

这里写图片描述

<%= %>与<% System.out.println(“ ”)%>有区别吗?
答:有区别。
<%= %>是将内容显示在浏览器的页面上;而<% System.out.println(“ ”)%>语句是将内容输出在控制台上。
第二次执行
这里写图片描述

JSP指令标记:

JSP指令(directive)告诉引擎如何处理JSP页面中的其余部分。

JSP指令:

JSP指令的基本语法格式:
<%@ 指令 属性名=”值” %>

如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

page指令:

1、用来定义整个JSP页面的一些属性和这些属性的值。
2、属性值用单引号或双引号括起来。
3、page指令的作用对整个JSP页面有效,与其书写的位置无关,习惯把page指令写在JSP页面的最前面。

语法格式:

<%@ page contentType="text/html;charset=gb2312"%>
使用page指令解决JSP中文乱码:

1、通过page指令的contentType属性说明JSP源文件的字符集编码;
2、page指令的pageEncoding属性说明JSP源文件的字符集编码。

Include指令:

在JSP页面出现该指令的位置处,静态插入一个文件。

语法格式:

<%@ include file= "文件的URL " %> 

注意:
1、如果该文件和当前JSP页面在同一Web服务目录中,那么“文件的URL”就是文件的名字;
2、如果该文件在JSP页面所在的Web服务目录的一个子目录中,比如fileDir子目录中,那么“文件的URL”就是“fileDir/文件的名字”。
3、静态插入,就是当前JSP页面和插入的文件合并成一个新的JSP页面,然后JSP引擎再将这个新的JSP页面转译成Java文件。
4、 file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

taglib指令:

用于在JSP页面中导入标签库。

语法格式:

<%@ taglib uri="" prefix="c"%>

1、uri属性:定位标签库描述符的位置。唯一标识和前缀相关的标签库描述符,可以使用绝对或相对URL。
2、 prefix属性:标签的前缀,区分多个自定义标签。
示例:

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

JSP动作标记:

用于在JSP页面中提供业务逻辑功能。

JSP常用标签:
<jsp:include>标签  
<jsp:forward>标签  (转页面)
<jsp:param>标签
<jsp:plugin>标签
<jsp:useBean>标签

1、include 动作标记

<jsp:include> 标签用于把另外一个资源的输出内容插入进当前JSP页面的输出内容之中,这种在JSP页面执行时的引入方式称之为动态引入。

语法格式:

<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />

2、param动作标记
param标记以“名字-值”的形式为其它标记提供附加信息。
语法格式:

<jsp:param  name=“名字” value=“指定给param的值”>

注意:
1、 param标记不能独立使用,需作为jsp:include、jsp:forward、jsp:plugin标记的子标记来使用。
2、当该标记与jsp:include动作标记一起使用时,可以将param标记中的值传递到include动作标记要加载的文件中去,被加载的JSP文件可以使用Tomcat服务器提供的request内置对象获取include动作标记的param子标记中name属性所提供的值 。

这里写图片描述

3、forward动作标记
从该指令处停止当前页面的继续执行,而转向执行page属性指定的JSP页面。
语法格式:

<jsp:forward page="relativeURL | <%=expression%>" />

4、plugin动作标记
该动作标记指示JSP页面加载Java plugin插件。该插件由用户负责下载,并使用该插件来运行Java applet小程序。
语法格式:

<jsp:plugin type="applet" code="小程序的字节码文件"   jreversion="java虚拟机版本号" width="小程序宽度值" height="小程序高度值" >

<jsp:plugin type="applet" code="小程序的字节码文件"   jreversion="java虚拟机版本号" width="小程序宽度值" height="小程序高度值" >

JSP内置对象:

1. request

封装了用户请求页面时所提交的信息,该对象调用相应的方法可以获取封装的信息.即request对象可以获取用户提交的信息。
例如用户提交信息表单:

<FORM action="tom.jsp" method=post >
    <INPUT type="text" name="boy" value="ok" > 
    <INPUT TYPE="submit" value="送出" name="submit">
</FORM>  

提交表单的汉字信息处理:

String str=request.getParameter("boy");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b,"utf-8");
2. response

在某些情况下,JSP引擎在响应用户时,可能需要将用户重新引导至另一个页面。
例如,如果用户输入的表单信息不完整,就会再次被引导到该表单的输入页面。
使用response对象的sendRedirect(URL url)方法实现用户的重定向。 cookie/session。

3. out

out对象是一个输出流,用来向用户端输出数据。

4. session

Session用于跟踪客户的状态。

5. application

任何客户在所访问的服务目录的各个页面浏览时,application对象都是同一个。

6. config
7. pagecontext
8. page
9. exception

练习:

需求:从页面上输入一个姓名,提交后在另一个页面中显示,并解决汉字乱码问题。
index.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>Insert title here</title>
    </head>
    <body>
        This is my first page!<br>
        <form action="helloservlet.html" method="post">
            姓名:<input type="text" name="name">
            <input type="submit" value="提交">
            <input type="reset" value="重置">
        </form>
    </body>
</html>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>HelloServlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <servlet-name>HelloServlet</servlet-name>
      <servlet-class>com.zkrt.servlet.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>HelloServlet</servlet-name>
      <url-pattern>/helloservlet.html</url-pattern>
  </servlet-mapping>
</web-app>

HelloServlet:

package com.zkrt.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HelloServlet
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public HelloServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String name=request.getParameter("name");
        byte b[]=name.getBytes("ISO-8859-1");
        name=new String(b,"utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().append("Served at: ").append(request.getContextPath());

        PrintWriter out = response.getWriter();
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        out.print("    This is :");
        out.println(name);
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        this.doGet(request, response);
    }
}

页面展示:
第一个页面,输入姓名后提交。
这里写图片描述

第二个页面,将输入的信息展示出来。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值