应作者要求:【转】http://www.cnblogs.com/shiyangxt
比较基础,但比较实在;
************************JSP基本语法*****************************
JSP代码的注释:
使用“//”对单行注释
使用“/**/”对多行代码进行注释
使用“/** */”对多行注释
使用“<%-- --%>”多行注释
使用“<!-- -->”多行Html代码进行注释,不要用于Java代码注释
指令标记
page指令
include指令
taglib指令
<%@ page language="java"%>(对JSP页面特性作说明)
<%@ include file="hearder.htm"%>(包含另外的Jsp文件或Html文件)
<%@ taglib url="http://www.cnblogs.com/shiyangxt" prefix="util"%>(用于标记库)
常用page指令
<%@page
[language="java"]
[extends="package.class"]
[import="{package.class|package.*},..."](引用包、类)
[session="true|false"](设定会话是否有效)
[buffer="none|8kb|sizekb"]
[autoFlush="true|fasle"]
[isThreadSafe="true|fasle"]
[info="text"]
[errorPage="relativeURL"]
[isErrorPage="ture|fasle"](表示当前页面是显示错误的)
[errorPage="/..."](转到错误页)
[contentType="text/html";charset=utf-8"](设定内容输出类型,字符编码格式)
[pageEncoding="utf-8"](设定字符编码格式)
[isELIgnored="true|false"]
%>
声明标记(Declaration)(声明全局变量)
<%!
private int getDateCount=0;
private String getDate();
{....}
%>
还可以定义jspInit()(初始化页面的调用方法)
和
jspDestroy()方法(当页面销毁时调用的方法)。
Scriptlet标记(声明局部变量)
<%int i=10;%>
嵌套使用
<%if(time<12){%>
How are you this morning?
<%}else{%>
How are you this afternoon?
<%}%>
表达式标记(Expression)
<%=incrementCounter()%>
动作(action)
<jsp:include>动作
include指令与<jsp:include>动作的区别:include指令直接包含内容而不是调用方法。
<jsp:forword>动作(转向)
*JSP内置对象
说明:
out(输出内容)
request(获取表单参数)
response(完成转向)
session(会话对象,跨页面保存信息)
application(跨用户保存信息)
config(读取设置信息)
page(页面本身)
pageContext(页面上下文)
exception(输出违例)
这里列举的都是最常用的语法,当然会有遗漏,想要更系统掌握JSP,还是要找本书来看。但是一些基本的功能,如新闻发布,小论坛,就可以做了。
下面是实例
*************************JSP留言板******************************
实现插入MYSQL数据库操作的JSP页面源码:
<%@ page language="java" pageEncoding="UTF-8"%> <%@ page import="java.io.IOException,java.io.PrintWriter,java.sql.Connection,java.sql.DriverManager, java.sql.PreparedStatement,java.sql.SQLException,java.text.SimpleDateFormat,javax.servlet.ServletException, javax.servlet.http.HttpServlet,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse, com.sy.util.*" %> <%@ include file="/header.jsp"%> <% String url = "jdbc:mysql://localhost:3306/dbname"; String username = "username"; String password = "password"; String sql = "insert into tablename(name,email,phone,title,content,time) values(?,?,?,?,?,?)"; int result = 0; Connection conn = null; request.setCharacterEncoding("utf-8"); String name = request.getParameter("name"); String title = request.getParameter("title"); if (StringUtil.validateNull(name)) { %> 对不起,姓名不能为空,请您重新输入!<br> <a href="<%=context %>/addMessage.jsp">添加新的留言</a><br> <%} else if (StringUtil.validateNull(title)) {%> 对不起,主题不能为空,请您重新输入!<br> <a href="<%=context %>/addMessage.jsp">添加新的留言</a><br> <%} else { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, StringUtil.filterHtml(name)); pstmt.setString(2, StringUtil.filterHtml(request.getParameter("email"))); pstmt.setString(3, StringUtil.filterHtml(request.getParameter("phone"))); pstmt.setString(4, StringUtil.filterHtml(title)); pstmt.setString(5, request.getParameter("content")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); pstmt.setString(6, sdf.format(new java.util.Date())); result = pstmt.executeUpdate(); pstmt.close(); if (result == 0) { %> 对不起,添加留言不成功,请您重新输入!<br> <a href="<%=context %>/addMessage.jsp">添加新的留言</a><br> <%} else {%> 祝贺您,成功添加留言。<br> <a href="<%=context %>/getMessage.jsp">查看所有留言内容</a><br> <%} }%> <%@ include file="/footer.htm" %>
从数据库提取数据的JSP页面:
<%@ page pageEncoding="UTF-8" %> <%@ page import="java.io.*,java.sql.*,javax.servlet.*,javax.servlet.http.*,com.sy.util.*" %> <%@ include file="header.jsp" %> <style> *{font-family:"宋体";font-size:14px} </style> <a href="<%=context%>/addMessage.jsp">添加新的留言内容</a><br> 留言内容<br><br> <% String url = "jdbc:mysql://localhost:3306/dbname"; String username = "username"; String password = "password"; String sql = "select * from tablename order by id desc"; Connection conn = null; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, username, password); PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { %> <div align="center"> <table width="600" border="1" bordercolor="#000000"> <tr> <td bordercolor="#FFFFFF">编号:</td> <td bordercolor="#FFFFFF"><%=rs.getInt("id")%></td> </tr> <tr> <td bordercolor="#FFFFFF">姓名:</td> <td bordercolor="#FFFFFF"><%=rs.getString("name")%></td> </tr> <tr> <td bordercolor="#FFFFFF">电话:</td> <td bordercolor="#FFFFFF"><%=StringUtil.chanageNull(rs.getString("phone"), "没填")%></td> </tr> <tr> <td bordercolor="#FFFFFF">Email:</td> <td bordercolor="#FFFFFF"><%= StringUtil.chanageNull(rs.getString("email"), "没填")%></td> </tr> <tr> <td bordercolor="#FFFFFF">主题:</td> <td bordercolor="#FFFFFF"><%=rs.getString("title")%></td> </tr> <tr> <td bordercolor="#FFFFFF">内容:</td> <td bordercolor="#FFFFFF"><%=StringUtil.chanageNull(rs.getString("content"), "没填")%></td> </tr> <tr> <td bordercolor="#FFFFFF">时间:</td> <td bordercolor="#FFFFFF"><%=rs.getString("time")%></td> </tr> </table> </div> <br><br> <%} %> <%@ include file="footer.htm" %>
以上两个JSP文件,相信可以让你对JSP的体会更深一步,虽然是一个过时的技术,但是现在很多Java WEB技术,大多都是由它演变来的。