JSP:Java server pages,是一种动态网页技术;“动态”指的是交互性,而不是动画或者js特效的动态。
同类产品:ASP,PHP,......
JSP的服务器:Tomcat,Weblogic,webSphere,JBoss,JRun,Resin.....
Tomcat目录:
bin:Tomcat的启动和关闭程序
Common:一些库文件
Conf:配置信息。
WebApps:站点放在此
Work:jsp会被译成servlet,放在此目录下
站点的创建:
1。在WebApps目录下创建一个目录,比如:JspStudy。
2。编写first.jsp,内容就是以前的HTML代码。
3。在JspStudy下创建一个文件夹:WEB-INF
4。在WEB-INF下创建一个文件:web.xml
5。编写web.xml的内容为:
6。
7。访问:http://localhost:8080/JspStudy
8080为端口号;JspStudy是你的站点目录名;localhost可以换成IP地址;
更改端口号:
1。打开conf\server.xml文件。
2。找到port="8080"
3。更改。注意:不要与系统中其它软件的端号冲突。
将服务目录创建在任意的目录下,而不是webapps目录下:
1。打开conf\server.xml文件。
2。在前加:
注意:大小写;XML是区分大小写;
3。访问:http://localhost:端口号/站名
比如:
DW中的站点配置:
1。菜单:stie(站点)/manage site(管理站点)
2。对话框上:单击“new”/"site"
3。advance选项卡,local root folder:本地文夹,找到webapps下的你的站点目录;
4。左侧remote info(远程信息):Access(访问)设置为local/network(本地/网络):指定站点根目录,同上。
5。左侧Testing Server(测试服务器),server modal(服务器模型):设置为jsp,
Access(访问):local/network,URL prefix(URL前缀):设置你的站点访问的URL,比如:
http://localhost:6688/JspStudy/
即:http://localhost:端口号/站点名/
JSP嵌入在HTML中,就是使用:<%%>以及其它特定的指令或者动作
<%="输出一条语句"%>:注意:只能是一条语句;
<%out.println("输出语句")%>:注意:可以有N个out.println();区别java没有System
练习:写一段代码,求出1-100和,并输出
JSP输出语句中可以使用HTML
<%
if(3>2)
out.println("3>2");
else
out.println("3<2");
%>
以上代码可以写成:
<%if(3>2){%>
3>2
<%}else{%>
3<2
<%}%>
请理解!
JSP文件的构成元素:
1.HTML 2.注释 3.脚本(scriptLet) 4.指令 5.动作
注释元素:
其实是HTML注释
其实还是HTML注释,只不过是注释的内容是由jsp决定的
<%--注释内容--%> 此种注释不同于上两种,不会显示在客户端的源码中
<%
//单行注释
/*多行注释*/
%>
此种注释是脚本种的注释,即java的注释
脚本元素:
包括三个方面:声明(Declaration);表达式(Expression);小脚本(scriptlets)
声明: 1.可以声明变量,也可声明方法;这种变量和方法会成为成员变量和成员方法;否则,为局部变量和局部方法
2.声明的办法<%! 变量;%> <%! 方法名(){}%>
3.此种声明可以在变量使用前,也可以在变量使用后;
4。而局部变量则必须在使用前声明;方法同理。
如:
<%!String color="green";%>
再如:
<%!String color="green";
publicString getColor()
{
return color;
}
%>
请查看work目录下的java文件,进行理解。
表达式;
用法:<%=表达式%>
注意:无分号;=是输出的作用;
小脚本:
<%这之间的多行java代码,就是小脚本%>
指令元素:
三种:页面指令(page);include指令;taglib指令;指令的特点是<%@ 指令%>
动作元素:
作用:可以理解为sun为我们定义的一些标签,有相应的功能;
特点:
page指令:
格式;
<%@page
[langage="java"] [import="package.class|package.*,package2.class2,....."]
[contentType="TYPE;charset=CHARSET"] [session="true|false"]
[buffer="none|8kb|sizeKB"] [autoFlush="true|false"]
[info="text"] [errorPage="relativeURL"]
[isErrorPage="true|false"] [extends="package.class"]
[pageEncoding="peinfo"]
%>
注意:除import之外,其它指令只能出现一次。
说明:
属性 描述 默认值 比如
langage 定义使用的语言,只有"java" java language="java"]
import 导入包,多包之间用逗号 import="java.io.*,java.util.*"
session 此页面是否在session中有效 true session="false"
buffer 缓冲大小 buffer="64K"
autoFlush 自冲刷新缓冲 true autoFlush="true"
info 可以使用servlet.getServletInfo()
获取信息 info="一个测试"
errorPage 出现异常是,自动跳转的页 errorPage="*.jsp|*.html"
isErrorPage 指定当前页为错误页 isErrorPage="true"
contentType 指页面的MIME类型 contentType="text/html;charset=gb2312"
pageEncoding 页面的编码 pageEncoding="iso-8859-1"
info属性实例:
<%@page contentType="text/html;charset=GB2312" %>
<%@page info="我!张惠妹" %>
谁呀?
<% String s=getServletInfo();
out.print("
"+s);
%>
错误页实例:注意是两个文件
文件一:此文件会产生错误,使用指令:errorPage=""
<%@page contentType="text/html; charset=gb2312" language="java" errorPage="error.jsp" %>
<%
//这个页面一定会出错。
inti=0;
intj=1;
out.println(j/i);
%>
文件二:此文件是显示错误信息的页,使用指令:isErrorPage="true"
<%@page contentType="text/html; charset=gb2312"language="java" isErrorPage="true" %>
出错了!
发生了以下的错误:
1.除数不能为零。
2.<%=exception.getMessage()%>
3.<%=exception.getLocalizedMessage()%>
include指令:
作用:静态的包含一个文件;可是是txt,jsp以及其它浏览器所能识别的文件;被包含文件将成为当前文件的一部分;
注意: 1.若被包含文件修改了,则必须重新编译jsp,否则不能更新.
2.若当前jsp文件已经有某个page指令,则被包含的文件一定不能有相同指令.
3.常应用于多页有重复的内容;比如:导航栏或者版权说明;
格式:<%@ include file="文件的名称"%>
比如:
<%@page contentType="text/html;charset=GB2312"pageEncoding="iso-8859-1"%>
<%@ include file="A.txt" %>
jsp的动作标签:
理解:自定义的标签;所以,要有结束标记;
include动作:
或者
与include指令的区别:
第一:动作标签是在执行时才对包含的文件进行处理;而指令是在编译处理;
第二:动作标签不将被包含的文件实际的合并成当前页面的一部而,而只是告知java解释器去执行被包含的文件;
第三:被包含的文件在语法和逻辑上是独立的;
第四:被包含文件内容的修改会更新在包含文件上.
forward动作:
作用:停止当前页面的执行,跳转到另一个页面;
格式:
实例:产生一个随机数,当随机数大于0.5时自动跳转到1.jsp;否则,跳转到2.jsp
作业:根据不同的星期几跳转到对应的页面;
plugin动作:
作用:用业产生object或者embed标签,使用它可以插入Applet或者JavaBean
格式:
type="bean|applet" code="文件名" codebase="文件目录" > 多参,同上
out对象及方法
jsp内置对象谈讨之二:
request对象
作用:封装了用户提交的信息;所以,可以由对象来获取用户请求的信息。
说明: 第一:它被包装成HttpServletRequest接口。
第二:常用来在单击表单中的提交按钮后,获取信息。
第三:表单的格式:
<各表单对象>
<提交按钮>
在单击提交按钮后,会自动执行action所对应的jsp页面;action对应的页面可以获取表单中的信息;
这些信息就封装在request对象中;
request对象的方法:
getAttribute(Stringname):返回由name指定的属性值;如果属性值不存在,则返回null;
getAttributeNames():返回request对象中的所有属性的名字集合,结果的类型是枚举型;
getCookies():返回客户端所有Cookie对象,结果是一个Cookie数组;
getCharacterEncoding():返回请求的编码方式;
getContentLength():返回请求的body长度;如果不确定长度,则返回-1;
getHeader(Stringname): 返回Http协议定义的文件头信息;
getHeaders(Stringname):返回指定名字的头信息的所有值,结果是一个枚举型;
getHeaderNames():返回所有文件头信息的名字,结果是一个枚举型;
getMethod():返回客户端提交数据的方法;
getParameter(Stringname):重要方法,返回指定表单中提交参数的值;
getParameterNames():返回客户端提交的所有参数的名字,结果是一个枚举型;
getParameterValues(Stringname):获得指定参数的所有值,结果是一个字符数组;
getProtocal():返回客户端提交数据时,所使用的协议;
getQueryString():返回客户端以get方法传递参数的值;
getRequestURI():返回发出请求的页面的地址;
getRemoteAddr():返回客户端的IP;
getRemoteHost():返回客户端的主机名;
getSession([Booleancreate]):返回与请求相关的session;若create参数为true,表示如果客户端没有创建session,则创建;
getServletPath():返回请求的脚本文件的文件路径;
getServerPort():返回服务器的端口号;
removeAttribute(Stringname):删除请求中的一个属性;
setAttribute(Stringname,java.lang.Object obj):设置名字为name的request参数的值;类型由obj决定;
getLocale():返回本土信息;在此返回zh_ch;
举例:
<%@page import="java.io.*"%>
RequestObject Info:
<%
out.println("
getMethod:");
out.println(request.getMethod());
out.println("
getParameter:");
out.println(request.getParameter("name"));
out.println("
getAttributeNames:");
java.util.Enumeratione=request.getAttributeNames();
while(e.hasMoreElements())
out.println(e.nextElement());
out.println("
getCharacterEncoding:");
out.println(request.getCharacterEncoding());
out.println("
getContentLength:");
out.println(request.getContentLength());
out.println("
getContentType:");
out.println(request.getContentType());
out.println("
getLocale:");
out.println(request.getLocale());
out.println("
getProtocol:");
out.println(request.getProtocol());
out.println("
getRemoteAddr:");
out.println(request.getRemoteAddr());
out.println("
getRemoteHost:");
out.println(request.getRemoteHost());
out.println("
getRemoteUser:");
out.println(request.getRemoteUser());
out.println("
getServerName:");
out.println(request.getServerName());
out.println("
getServerPort:");
out.println(request.getServerPort());
out.println("
getSession:");
out.println(request.getSession(true));
out.println("
getHeader('User-Agent')");
out.println(request.getHeader("User-Agent"));
%>
例子:返回所有的文件头信息名称及值
<%
java.util.Enumerationenum_header=request.getHeaderNames();
while(enum_header.hasMoreElements())
{
Strings=(String)enum_header.nextElement();
out.println(s+":");
out.println(request.getHeader(s)+"
");
}
%>
通过这个例子,我们知道request.getHeader(String name)方法的参数可以有:accept,referer,accept-language,
acceptEncoding,user-agent,host,connection,cookie等
例子:返回所有指定头名字cookie的值
<%
java.util.Enumerationenum_cookie=request.getHeaders("cookie");
while(enum_cookie.hasMoreElements())
{
Strings=(String)enum_cookie.nextElement();
out.println(s+"
");
}
%>
表单信息的获取,由request.getParameter("表单元素名")实现:
举例:在一文本框中输入信息,提交后在另一页面中显示
第一个文件:
<%@page contentType="text/html;charset=GB2312" %>
根据分数查询名单:
英语分数在
和
之间
数学分数在
和
之间
文件二://byname.jsp要点: "SELECT * FROM studentsWHERE 姓名 = "+"'"+name+"'";name是文本框提交的值;
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<% //获取提交的姓名:
Stringname=request.getParameter("name");
if(name==null)
{name="";
}
byteb[]=name.getBytes("ISO-8859-1");
name=new String(b);
Connectioncon=null;
Statementsql=null;
ResultSetrs=null;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try { con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
String condition="SELECT * FROM studentsWHERE 姓名 = "+"'"+name+"'";
rs=sql.executeQuery(condition);
out.print("
"+rs.getString("学号")+" | ");"+rs.getString("姓名")+" | ");"+rs.getInt("数学成绩")+" | ");"+rs.getInt("英语成绩")+" | ");"+rs.getInt("物理成绩")+" | ");
con.close();
}
catch(SQLExceptione)
{ }
%>
文件三://byscore.jsp;要点:select * from 表名 where 英语成绩>22 and 英语成绩<33 and 数学成绩>22 and 数学成绩<100
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<% //获取提交的分数的最大值和最小值:
Stringenglishmax=request.getParameter("englishmax");
if(englishmax==null)
{englishmax="100";
}
Stringenglishmin=request.getParameter("englishmin");
if(englishmin==null)
{englishmin="0";
}
Stringmathmax=request.getParameter("mathmax");
if(mathmax==null)
{mathmax="100";
}
Stringmathmin=request.getParameter("mathmin");
if(mathmin==null)
{mathmin="0";
}
Connectioncon=null;
Statementsql=null;
ResultSetrs=null;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try
{ con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
String eCondition="英语成绩 <= "+englishmax+" AND "+"英语成绩 >= "+englishmin;
String mCondition="数学成绩 <= "+mathmax+" AND "+"数学成绩 >= "+mathmin;
String condition="SELECT * FROMstudents WHERE "+mCondition+" and "+eCondition;
rs=sql.executeQuery(condition);
out.print("
"+rs.getString("学号")+" | ");"+rs.getString("姓名")+" | ");"+rs.getInt("数学成绩")+" | ");"+rs.getInt("英语成绩")+" | ");"+rs.getInt("物理成绩")+" | ");
con.close();
}
catch(SQLException e)
{}
%>
实例二://要点:SQL语句中的order by语句
文件一://要点:提供表单三个单选按钮
<%@page contentType="text/html;charset=GB2312" %>
查询成绩:
按姓氏排序
按总分排序
按英语排序
文件二://要点:select * from 表名 order by 姓名
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<% //获取提交的排序方式:
Stringname=request.getParameter("R");
if(name==null)
{name="";}
byteb[]=name.getBytes("ISO-8859-1");
name=new String(b);
Stringnumber,xingming;
Connectioncon=null;
Statementsql=null;
ResultSetrs=null;
intmath,english,physics;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try {con=DriverManager.getConnection("jdbc:odbc:sun","","");
sql=con.createStatement();
String condition="SELECT * FROM studentsORDER BY "+name;
rs=sql.executeQuery(condition);
out.print("
"+number+" | ");"+xingming+" | ");"+math+" | ");"+english+" | ");"+physics+" | ");"+total+" | ");
---|
con.close();
}
catch(SQLExceptione)
{ }
%>
实例三://要点:通配符的使用
文件一://表单,提供一个文本框,将查询此文本框中输入的姓
<%@page contentType="text/html;charset=GB2312" %>
查询成绩:
输入学生的姓氏:
文件二://要点select * from 表名where 姓名 like '毕%'
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<% //获取提交的姓氏:
Stringname=request.getParameter("name");
if(name==null)
{name="";
}
byteb[]=name.getBytes("ISO-8859-1");
name=new String(b);
Connectioncon=null;
Statementsql=null;
ResultSetrs=null;
intmath,english,physics;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try{con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
String condition="SELECT * FROMstudents where 姓名 like'"+name+"n'" ;
rs=sql.executeQuery(condition);
out.print("
"+rs.getString("学号")+" | ");"+rs.getString("姓名")+" | ");"+math+" | ");"+english+" | ");"+physics+" | ");
con.close();
}
catch(SQLExceptione)
{ }
%>
将上面文件改成下面文件,一样通过,请自行分析:
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<% //获取提交的姓氏:
Stringname=request.getParameter("name");
if(name==null)
{name="";
}
byteb[]=name.getBytes("ISO-8859-1");
name=new String(b);
Stringnumber,xingming;
Connectioncon=null;
Statementsql=null;
ResultSetrs=null;
intmath,english,physics;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try{con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
String condition="SELECT * FROMstudents" ;
rs=sql.executeQuery(condition);
out.print("
"+number+" | ");"+xingming+" | ");"+math+" | ");"+english+" | ");"+physics+" | ");
con.close();
}
catch(SQLExceptione)
{ }
%>
小结:通过以上几个例子,说明,只要是标准的SQL语句中的select语句,就可以使用在rs.executeQuery()方法中.
所以,你想要实现什么样的功能,只要了解相应的select语句用法就可以;比如:top n;between and 等;
关于更新记录,插入记录及删除记录:
注意:需要使用Statement对象的executeUpdate()方法;而不是executeQuery()方法;后者用于执行select语句;
实例一://修改
文件一://表单,显示原始数据
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
输入要修改成绩的同学的姓名:
输入新的数学成绩:
输入新的英语成绩:
输入新的物理成绩:
数据库更新前的数据记录是:
<% String name,number;
intmath,physics,english;
Connectioncon;
Statementsql;
ResultSetrs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione){}
try{con=DriverManager.getConnection("jdbc:odbc:sun","sa","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROMstudents");
out.print("
"+number+" | ");"+name+" | ");"+math+" | ");"+english+" | ");"+physics+" | ");
con.close();
}
catch(SQLException e1) {}
%>
文件二://newResult.jsp
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
<% //获取提交的姓名:
Stringname=request.getParameter("name");
if(name==null)
{name="";
}
byte b[]=name.getBytes("ISO-8859-1");
name=new String(b);
System.out.println(name);
//获取提交的新的数学成绩:
StringnewMath=request.getParameter("math");
if(newMath==null || newMath=="")
{newMath="10";
System.out.println("newmath is null");
}
System.out.println(newMath);
//获取提交的新的英语成绩:
StringnewEnglish=request.getParameter("english");
if(newEnglish==null)
{newEnglish="10";
}
System.out.println(newEnglish);
//获取提交的新的物理成绩:
StringnewPhysics=request.getParameter("physics");
if(newPhysics==null)
{newPhysics="10";
}
Connectioncon=null;
Statementsql=null;
ResultSetrs=null;
Stringnumber,xingming;
intmath,english,physics;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){}
try{con=DriverManager.getConnection("jdbc:odbc:sun","","");
sql=con.createStatement();
String condition1="UPDATE students SET 数学成绩 = "+newMath+" WHERE 姓名="+"'"+name+"'";
String condition2="UPDATE students SET 英语成绩 = "+newEnglish+" WHERE 姓名="+"'"+name+"'";
String condition3= "UPDATE students SET物理成绩 = "+newPhysics+" WHERE 姓名="+"'"+name+"'" ;
//执行更新操作:
sql.executeUpdate(condition1);
sql.executeUpdate(condition2);
sql.executeUpdate(condition3);
//显示更新后的表中的记录:
%>
更新后的表的记录:
<%
rs=sql.executeQuery("SELECT * FROMstudents");
out.print("
"+number+" | ");"+xingming+" | ");"+math+" | ");"+english+" | ");"+physics+" | ");
con.close();
}
catch(SQLExceptione)
{ }
%>
实例二://插入记录
文件一:
<%@page contentType="text/html;charset=GB2312" %>
<%@page import="java.sql.*" %>
添加新的记录到数据库:
同学学号:
同学姓名:
数学成绩:
英语成绩:
物理成绩:
数据库添加记录前的数据记录是:
<% String name,number;
intmath,physics,english;
Connectioncon;
Statementsql;
ResultSetrs;
try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundExceptione){}
try{ con=DriverManager.getConnection("jdbc:odbc:sun","","");
sql=con.createStatement();
rs=sql.executeQuery("SELECT * FROMstudents");
out.print("
"+number+" | ");"+name+" | ");"+math+" | ");"+english+" | ");"+physics+" | ");
con.close();
}
catch(SQLException e1) {}
%>