前端-JSP,基本使用、内置对象、页面访问、数据库连接、中文乱码问题解决、本页数据刷新等

拿出来大家共勉,不足之处请指正。
很久之前的学习笔记了,一直存放在本地中

页面基本结构

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 {

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值