JavaWeb学习

来源:互联网 发布:mysql字符串长度 编辑:程序博客网 时间:2024/06/07 10:45

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);    }}

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

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