1.
用户登录:
Index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" %>
<head>
<title>用户登录</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="page2.jsp">
用户名:
<input name="username" type="text" id="username"/>
<br/>
<br/>
密 码:
<input name="pwd" type="password" id="pwd"/>
<br/>
<br/>
<input type="submit" name="submit" value="提交"/>
<input type="reset" name="reset" value="重置"/>
</form>
</body>
</html>
Page2.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=GB2312"%>
<head>
<title>Insert Title in here.</title>
</head>
<body>
<%
request.setCharacterEncoding("gb2312");
String username=request.getParameter("username");
String pwd=request.getParameter("pwd");
out.println("用户名为:"+username);
out.println("密码为:"+pwd);
%>
</br>
</br/>
<input type="button" a herf="index.jsp" value="返回"/>
</body>
</html>
注意:被包含的文件中最好不要使用等标签,这回影响到原JSP文件中同样的标签,有时会导致错误。并且要避免所涉及的变量名重复。
2.Tag文件中的Tag指令
GetArea.tag
<%@ attribute name="numberA" required="true" %>
<%@ attribute name="numberB" required="true" %>
<%@ attribute name="numberC" required="true" %>
<%@ attribute name="condition" required="true" %>
<%@ variable name-given="area" variable-class="java.lang.Double" scope="AT_END"%>
<%@ variable name-given="message" scope="AT_END"%>
<%!
public double getTiangleArea(double a,double b,double c){
if(a+b>c&&b+c>a&&c+a>b){
double p=(a+b+c)/2.0;
double area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
return area;
}else
return -1;
}
public double getLaderArea(double above,double bottom,double h){
double area=(above+bottom)*h/2.0;
return area;
}
%>
<%
try{
double a=Double.parseDouble(numberA);
double b=Double.parseDouble(numberB);
double c=Double.parseDouble(numberC);
double result=0;
if(condition.equals("triangle")){
result=getTiangleArea(a,b,c);
jspContext.setAttribute("area", new Double(result));
jspContext.setAttribute("message", "Arear of Triangle");
}
else if(condition.equals("lader")){
result=getLaderArea(a,b,c);
jspContext.setAttribute("area", new Double(result));
jspContext.setAttribute("message", "Arear of Trapeziod");
}
}
catch(Exception e)
{
jspContext.setAttribute("area", new Double(-1.0));
jspContext.setAttribute("message", e.toString());
}
%>
Index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=gb2312"%>
<%@ taglib prefix="computer" tagdir="/WEB-INF/tags" %>
<head>
<title>
Area
</title>
</head>
<body>
<form action="" method=get name=form>
<font color="blue">
输入的三个数值a,b,c分别代表三角形的三边或者梯形的上底,下底,高:
</font>
<br>
<table>
<tr > <td>输入数值a:</td>
<td> <input type="text" name="a"></td></tr>
<tr > <td>输入数值b:</td>
<td> <input type="text" name="b"></td></tr>
<tr > <td>输入数值c:</td>
<td> <input type="text" name="c"></td></tr>
</table>
<input type="radio" name="R" value="triangle">三角形
<input type="radio" name="R" value="lader">梯形
<br>
<input type="submit" value="提交" name=submit>
</form>
<%
String a=request.getParameter("a");
String b=request.getParameter("b");
String c=request.getParameter("c");
String cd=request.getParameter("R");
if(a==null||b==null||c==null){
a="0";
b="0";
c="0";
cd="0";
}
if(a.length()>0&&b.length()>0&&c.length()>0){
%>
<computer:GetArea numberA="<%=a %>" numberB="<%=b %>"
numberC="<%=c %>" condition="<%=cd %>"
/>
<br><%=message %>
<br><%=area %>
<%}%>
}
</body>
</html>
注:
Attribute指令:
<%@ attribute name=”numberA” required=”true” %>
可以让使用它的JSP页面向该Tag文件传递需要的数据。
1.name:指定对象传递引用。
2.Required:true时必须对name的属性指定一个对象引用
3.Type:对象的类型
JSP页面调用其指令:
Variable指令:
<%@ variable name-given=”area” variable-class=”java.lang.Double” scope=”AT_END”%>
通过只用variable指令可以将Tag文件中的对象返回给调用该Tag文件中的JSP页面。
1.name-given:给定对象的名称
2.Variable-class对象的类型带有的包名
3.AT_BEGIN、NESTED和AT_END
第二个可以在标记体内使用对象,第三个在标记体结束后才能使用对象。
3.
一个简单的网站计数器:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<head>
<title>Jishuqi</title>
</head>
<%!
int num=0;
synchronized void add()
{
num++;
}
%>
<% add(); %>
<body>
<center>
您是第<%=num %>位访问该页面的游客!
</center>
<br>
</body>
</html>
注:
Synchronized void add(){num++};
其中的synchronized :
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
二、然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
四、第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
五、以上规则对其它对象锁同样适用.
举例说明:
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
package ths;
public class Thread1 implements Runnable {
public void run() {
synchronized(this) {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + " synchronized loop " + i);
}
}
}
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread ta = new Thread(t1, "A");
Thread tb = new Thread(t1, "B");
ta.start();
tb.start();
}
}
结果:
A synchronized loop 0
A synchronized loop 1
A synchronized loop 2
A synchronized loop 3
A synchronized loop 4
B synchronized loop 0
B synchronized loop 1
B synchronized loop 2
B synchronized loop 3
B synchronized loop 4
4.脚本程序(scriptlet)
脚本程序是使用<% %>标记起来的额一段JAVA代码。可以定义变量、调用方法、进行各种表达式运算,并且每行语句后面要加入分号。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
<head>
<title>
脚本标识的使用
</title>
</head>
<% boolean admin=true; %>
<body>
<table>
<% if(admin){
admin=!admin;%>
<tr><td>欢迎登录!您的身份为“普通管理员。”</td></tr>
<% }
else if(admin){
admin=!admin;
%>
<tr><td>欢迎登录!您的身份为“系统管理员。”</td></tr>
<% } %>
</table>
</body>
</html>
5.JSP动作元素
在JSP中,提供了一系列使用XML语法写成的动作元素。与指令不同的是JSP页面执行时,先进入翻译阶段,程序先查找页面中的指令元素并转换为Servlet,这些元素是会被首先执行的。
动作元素的格式为:
<动作元素名 属性1=“值1” 属性2=“值2”…/>或者是
<动作元素名 属性1=“值1” 属性2=“值2”…>
<子动作 属性1=“值1” 属性2=“值2”…/>