拿出来大家共勉,不足之处请指正。
很久之前的学习笔记了,一直存放在本地中
文章目录
页面基本结构
HTML元素
注释
<%--JSP注释内容在中间,用户在客户端看不到又叫隐藏注释--%>
<!-- html注释在中间,用户在客户端是可见的,又叫输出注释-->
脚本元素
-
声明<%! %>
Java程序段中声明的变量是局部变量,该局部变量在JSP页面后继的所有程序段及表达式中均有效。这些局部变量互不影响(变量是线程安全的),即一个用户改变Java程序段中的局部变量值,不会影响其他用户的Java程序段中的局部变量
<%!
int add(int opt1, int opt2)
{
return opt1+ opt2;
}
%>
- 表达式<%=%>
<%=
上边的是个整体,表达式后不需要加分号
%>
- 脚本片断(java程序段)<%%>
<%
%>
- 等
指令
- page指令(<%@page %>)
此指令位置不固定(通常是顶部),除import属性外,其他属性只能出现一次。
<%@
page language="java" (目前只能说java,是jsp页面脚本语言的名称)
contentType="MIMETpye;
charset=characterSet"
pageEncoding=“characterSet”*UTF-8或者GBK
import=“package.class”*具体引入的Class
extends="package.class"定义此JSP页面产生的Servlet是继承自哪个父类
buffer="none|size kb|8kb" 设定输出流缓存的大小,默认为8kb
errorPage=“URL” 指定该JSP页面发生错误时,网页被重定向指向的错误处理页面
autoFlush="false|true"指定输出流缓存区的内容是否自动清除,默认为true
session=“false|true”*,指定该JSP页面是否需要一个HTTP会话,默认为true
isThreadSafe="false|true"指定该JSP页面是否支持多个用户同时请求(即多线程同步请求),默认为true
isErrorPage="true|false" 指定该JSP页面是否为错误处理页面,默认为false
isELIgnored="true|false" 指定是否忽略EL表达式,默认为false
%>
- taglib指令(<%@taglib%>)
指定该标该jsp页面使用了自定义标签,使得页面更加个性化
<%@ taglib uri="tagURI" prefix="prefix" %>
uri:指定自定义标签文件的路径,可以是绝对或者相对路径,也可以是~**标签库~**的描述文件。
<%@ taglib prefix='fmt' uri="http://java.sun.com/jsp/jstl/fmt" %>
prefix:指定自定义标签的前缀,注意前缀名称不能使用保留字,如java,javax,jsp,servlet,sun等
- include指令(<%@include%>)
页面包含指令,包含的另一个文件(HTML\JSP\普通文件)
<%@ include file="url" %>
url是指根目录下的相对路径
- 等
动作
- jsp:useBean
- jsp:forward
- jsp:include
- 等
JSP内置对象
页面访问过程
1、在浏览器地址栏输入访问资源的位置,统一资源定位(URL).
2、浏览器根据URL对URL所在的服务器发起一次http请求,http报文分为请求行(Request line)、请求首部(header)、空行(blankline)、请求数据(Body)。
3、web服务器根据请求编译相应的jsp页面为class类型文件并执行程序,这是动态过程。
4、将运行的结果封装为response对象返回给客户端。
内置对象定义
不需要声明这些对象就可以在JSP页面中直接使用的对象
request对象
一般请求的为url或者表单,方法method为post\get
response对象
一个HTTP响应报文包括
- 状态行Status Line(由三位数字组成) 第一个数字定义响应类表
1XX:请求被接收到,继续处理;
2XX:被成功地接收;200;
3XX:重发,为了完成请求必须采取下一步动作;
4XX:客户端出错403,404
5XX:服务器端出错。500(语法错误,运行异常RuntimeException)
- 响应头(Header)
- 空行(Blank Line)
- 可选实体内容(数据Body)
reponse.sendRedirect("abc.jsp")
page对象
page对象代表当前正在运行的JSP页面,或者可以认为page代表的是JSP页面被编译后的Servlet,相当于Java语言中的Object类。
pageContext对象
代表当前页面的上下文,即当前页面的所有属性和对象。
out对象
输出各种类型(文本文件)的数据,也可以输出HTML标签和JavaScript脚本
<%
out.print("xxx");
out.print("<br>");
%>
session对象
利用session对象实现储存
product.jsp
<td>西游记</td>
<td><a href="product_action.jsp?bookid=xyj">加入购物车</a></td>
//每个后面的Bookid不同
product_action.jsp
- 接收参数
- 业务逻辑处理
- 跳转到目标JSP页面
<%
String bookid=request.getParameter("bookid");
%>
<%
List<String>books=null;
books=(List<String>)session.getAttribute("books");
//判断这个bookid是否已经存在
if(books!=null){
boolean flag=false;
for(int i=0;i<books.size();i++){
String s=books.get(i);
if(s.equals(bookid)){
flag=true;
}
}
//如果不存在就再添加
if(!flag){
books.add(bookid);
}
}
else{
books=new ArrayList<String>();
books.add(bookid);
}
//将集合重新绑定到session对象的books属性
session.setAttribute("books",books);
%>
<%
//使用response对象的重定向
response.sendRedirect("product.jsp")
%>
cart.jsp
在这个页面进行内容显示
进行遍历
<%
List<String>books=(List<String>)session.getAttribute("books");
for(int i=0;books!=null&&books.size();i++){
<li><%=(i+1) %><%=books.get(i) %></li>
}%>
application对象
生存期要比session对象要长,WEB服务器从启动到终止
利用此对象实现页面点击次数的计数
<%
Object number=application.getAttribute("count");
int num=1;
if(number==null){
application.setAttribute("count",num);
}
else{
num=(Integer)number;
num++;
applicatiom.setAttribute("count",num);
}
%>
访问次数:<%=num %> <br>
config对象
config对象主要用于读取Web应用的初始化参数,在Java
Web应用中,一般使用web.xml配置文件存储Web应用的配置信息。
exception对象
主要用来处理JSP页面执行时产生的异常
JDBC
dbutil.jsp
<body>
<%! String url="jdbc:mysql://127.0.0.1:3306/userdb";
String user="root";
String password="123";
%>
数据库的连接
<%!
Connection getConn()throws Exception{
Connection conn=null;
try{
//1:加载驱动
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url, user, password);
return conn;
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
%>
对数据库进行操作(可以在navicat中进行)
<%
String sql1="insert into tb_users(fd_username,fd_password)values('B"+System.currentTimeMillis()+"','123')";
String sql2="insert into tb_users(fd_username,fd_password)values(?,?)";
int row1=0,row2=0;
try{
Statement stmt=getConn().createStatement();
row1=stmt.executeUpdate(sql1);
PreparedStatement pstmt=getConn().prepareStatement(sql2);
//设置动态参数对应的值
pstmt.setString(1, "C"+System.currentTimeMillis());
pstmt.setString(2, "C"+System.currentTimeMillis());
row2=pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}
%>
插入记录数: <%=(row1+row2) %>
</body>
数据库连接
String url = "jdbc:mysql://127.0.0.1:3306/midterm?characterEncoding=utf8&useSSL=false";
String user = "root";
String pwd = "123456";
public Connection getconn() throws Exception {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, pwd);
return conn;
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
/*全局关闭方法*/
public void close(ResultSet rs, Statement stmt, Connection conn) {
try {
if (rs != null) {
rs.close();
}
if (stmt!=null){
stmt.close();
}
if (conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
中文乱码
public String toUtf8(String content) throws UnsupportedEncodingException {
if (Objects.isNull(content)) {
return "";
}
return new String(content.getBytes("ISO-8859-1"), "UTF-8");
}
本页面数据更新
try {
String action = request.getParameter("action");
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
conn = getconn();
stmt = conn.createStatement();
if ("save".equals(action)) {
String leave_id = request.getParameter("leave_id");
String opinion = request.getParameter("opinion");
String status = request.getParameter("status");
String updSql = "update sys_leave set status = " + status + ",opinion = '" + toUtf8(opinion) + "' WHERE 1=1 " + "and leave_id = '" + leave_id + "'";
stmt.executeUpdate(updSql);
}
String listSql = "SELECT * FROM sys_leave WHERE 1=1";
rs = stmt.executeQuery(listSql);
while (rs.next()) {
<tr>
<td>
<label>
<select id="select<%=rs.getString("leave_id")%>">
<option value="0" <%="0".equals(rs.getString("status")) ? "selected" : ""%>>未审核</option>
<option value="1" <%="1".equals(rs.getString("status")) ? "selected" : ""%>>同意请假</option>
<option value="2" <%="2".equals(rs.getString("status")) ? "selected" : ""%>>不同意请假</option>
</select>
</label>
</td>
<td><label>
<input id="opinion<%=rs.getString("leave_id")%>" type="text" value="<%=rs.getString("opinion")%>"/>
</label></td>
<td colspan="9" align="center">
<input type="submit" value="保存" onclick="javascript:
var myselect = document.getElementById('select<%=rs.getString("leave_id")%>');
var status = myselect.options[myselect.selectedIndex].value;
var opinion = document.getElementById('opinion<%=rs.getString("leave_id")%>').value;
window.location.href='./leave_inst.jsp?action=save&leave_id=<%=rs.getString("leave_id")%>&opinion='+opinion+'&status='+status;return false;"
>
</td>
</tr>
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}