2022 - JSP复习整理

无序列表

<ul type="disc">
    <li>计算机网络</li>
    <li type="circle">数据结构</li>
    <li type="square">专业英语</li>
</ul>

在这里插入图片描述

html引入css

1. 嵌入式样式表

作用范围仅限于本标签。

<p style="color: blue;font-size: 10pt"></p>

2. 内联式样式表

<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>内联式样式表实例</title>
        
        <!--在style标签体中-->
        <style type="text/css">
            div{
            ...
            }
            .class{
            ....
            }
            #id{
            ....
            }
        </style>
        
    </head>
<body>
  1. <style>用来说明标签中的代码用于定义样式表

  2. <style>标签的type属性用于指明样式的类别,默认值为text/css,支持不允许css的浏览器忽略样式表。

3. 外联式样式表

将定义好的css单独放到一个以css为扩展名的纯文本文件中,再使用<link>标签链接到网页中。

<link href="StyleSheet.css" rel="stylesheet" type="text/css"/>

这种方法的最大好处就是,定义一个样式可以用到大量网页中,从而使整个站点风格保持一致,避免重复的CSS属性设置。另外,当遇上站点改版或某些重大调整要对风格进行修改时,可直接修改CSS文件,而不用打开每个网页进行修改。

创建样式表StyleSheet.css:

p {
    background-color: yellow;
    color: black;
}

.text {
    font-family: 宋体;
    font-size: 20pt;
    text-decoration: underline;
}

在网页上引用样式表:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>内联式样式表实例</title>
        <link href="StyleSheet.css" rel="stylesheet" type="text/css"/>
    </head>
    
    <body>
        <h1 class="text">...</h1>
        <p>...</p>
    </body>
</html>

<link>标签中的rel= "stylesheet"指明此处链接的元素是一个样式表单,该值一般不需改动。
<link>标签中的href属性用来设置需要链接的样式表文件地址。

插入图片

<img src="img/1.png" alt="劈叉修勾" width="360" height="200" align="left">

插入超链接

创建超链接标签的属性和作用

<a href="http://www.baidu.com" target="_blank">点我去百度</a>

(1) **href:**指定链接地址。若是链接到网站外部,必须为URL地址;若是链接到网站内部页面,只需指明该页面的绝对路径或相对路径

(2) target:指定显示链接目标的窗口,其值可取

_blank (浏览器总在一个新打开,未命名的窗口中载入目标文档)

_parent (目标文档载入当前窗口的父窗口中)

_self (默认值,目标文档载入并显示在当前窗口中)

_top (清除当前窗口所有被包含的框架并将目标文档载人整个浏览器窗口)

插入视频

<embed src="./video/2.mp4" width="500" height="500" alt="video"></embed>

表格

基本用法

标签作用
<table>进行一个完整表格的声明
<tr>定义表格中的一行
<th>定义表格中列标题的单元格
<td>定义行中的一个单元格
<table>
    <tr>
        <th>表格第一列的标题</th>
        <th>表格第二列的标题</th>
    </tr>
    <tr>
        <td>表格第一行的第一个单元格</td>
        <td>表格第一行的第二个单元格</td>
    </tr>
    <tr>
        <td>表格第二行的第一个单元格</td>
        <td>表格第二行的第二个单元格</td>
    </tr>
</table>

常见属性

<table>

属性作用
border设置表格边框的宽度,非负整数,若为0,则表示边框不可见,单位为像素。
cellspacing单元格边框到表格边框的距离
cellpading单元格内文字到单元格边框的距离
width表格宽度,值可为整数或相对值,20%表示表格宽度为整个页面宽度的20%,100px表示100像素
height表格高度,同width
bgcolor表格背景色
bordercolor表格边框颜色
align水平对齐方式,left,right,center
valign垂直对齐方式,top,middle,baseline

<tr>

属性作用
bordercolor该行的外边框颜色
bgcolor该行单元格的背景颜色
height该行高度
align水平对齐方式,left,right,center
valign垂直对齐方式,top,middle,baseline

<td>

属性作用
colspan单元格所占列数,默认值为1
rowspan单元格所占行数,默认值为1
background设置单元格背景图像
width设置单元格宽度

表单

表单标签

form表单的属性和作用

<form action="url" method="post" name="value" onsubmit="function" onreset="function" target="window"></form>

  1. action:设置服务器上用来处理表单数据的处理程序地址,该属性值可以是 URL地址也可以是电子邮件地址。

    例如:action= "http://localhost:8080/ch03/ShopCart.jsp表示当用户提交表单后,将调用服务器上的JSP页面ShopCart. jsp来处理用户的输入。

    另外,采用电子邮件地址的格式是 action="mailto : youremail@163.com" ,表示把用户的输入信息发送到电子邮件地址 youremail@163.com。

  2. method:设置处理程序从表单中获得信息的方式,取值可为get或 post。

    • get方法将表单中的输入信息作为查询字符串附加在action指定的地址后,传送到服务器,中间用隔开。查询字符串使用key="value"的形式定义,如果有多个域,中间用&隔开。

      如: http://localhost:8080/ch03/ShopCart.jsp?flowerid="o169" &-count="16",get方法在浏览器的地址栏中以明文形式显示表单中各个表单域的值,对数据的长度有限制。

    • post方法将表单中用户输入的数据进行包装,按照HTTP传输协议中的post方式传送到服务器,且对数据的长度基本没有限制,目前大都采用此方式。

  3. name:设置表单的名字

  4. onsubmit , onreset:设置在单击了submit或reset按钮后要执行的脚本函数名

  5. target:设置显示表单内容的窗口名

JSP常用注释

注释名称注意点
<%-- 注释语句 --%>隐藏注释在发布JSP网页时完全被忽略,
也不会发布到客户浏览器上
<%/* 注释语句 */%>
<%// 注释语句 %>
Java注释同上
<!-- 注释语句 -->HTML注释在发布网页时可以浏览器源文件窗口中看到,
注释的内容会被输送到客户端的浏览器上。

注:HTML注释 发布网页时看不到注释,但是在源文件可以看到注释,而且表达式是动态的,根据表达式的值输出结果。

page的常用指令

<%@page key="value"%>

  1. page指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用域为它所在JSP页面和其包含的文件。
  2. 页面指令一般位于JSP页面的顶端,但是可以放在JSP页面的任何位置,无论把<%@ page%>指令放在JSP文件的哪个地方,它的作用范围都是整个JSP页面。为了JSP程序的可读性以及养成良好的编程习惯,最好把它放在JSP文件的顶部。
  3. 在同一个JSP页面中可以有多个page指令。在使用多个page指令时,其属性除import属性外只能使用一次
属性作用
language指定JSP页面使用的脚本语言,默认为Java
import导入JSP页面所使用的Java API类库,是所有page属性中唯一可以多次设置的属性
contentType指定内容MIME类型和JSP页面的编码方式,
通常为"text/html;charset=ISO-8859-1"
pageEncoding指定JSP页面编码方式,默认为ISO-8859-1
errorPage用于指定错误页面,无默认值。
当页面出现一个没有被捕获的异常时,错误信息将以throw语句抛出,而被设置为错误信息网页的JSP页面将利用exception隐含对象,获取错误信息。
relativeURL默认设置为空,即没有错误处理页面。
isErrorPage指定JSP页面是否为处理异常错误的页面,其默认值为 false。
如果将isErrorPage属性设置为true,则固有的exception对象脚本元素可用。
info用于指定JSP页面的相关信息文本,无默认值。
extends用于指定JSP编译器父类的完整限定名,
此JSP页面产生的Servlet将由该父类扩展而来。
buffer用于设定页面的缓冲区大小(字节数),
属性值为none,表示禁用缓冲区,其默认值为8KB。
autoFlush用于指定JSP页面缓冲区是否自动刷新输出,其默认值为true,则页面缓冲区满时自动刷新输出;
否则,当页面缓冲区满时抛出一个异常。
**session **用于指定是否可以使用session对象,若允许页面参与HTTP会话,
就设置为true,否则设为false,其默认值为true。
**isThreadSafe **用于指定JSP页面是否能够处理一个以上的请求,其默认值为true该页面可能同时收到JSP引擎发出的多个请求;
反之, JSP引擎会对收到的请求进行排队,当前页面在同一时刻只能处理一个请求。。

JSP常用动作

include

include指令

**include指令用于在当前JSP页面中加载需要插入的文件代码,即为页面插入一个静态文件,如JSP页面,HTML页面,文本文件或是Java程序,同时解析这个文件中的JSP语句,这些加载的代码和原有的JSP代码合并成一个新的JSP文件。**include指令只有一个file属性,但是一个页面可以有多个include指令。

<%@include file="index.html"%>

<%@include file="main.jsp"%>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>include动作实例</title>
    </head>

    <body>
        下面输出的数据是使用动作指令动态加载的另外一个界面的内容。
        <hr>
        <jsp:include page="hello.jsp"/>
        <hr>
    </body>
</html>

在这里插入图片描述

include动作

如何利用include动作加载文件,并传递参数;如何利用include和指令加载文件。include动作和指令的区别

<jsp:include>动作允许包含静态文件和动态文件,这两种包含文件的结果是不同的。

如果包含文件仅是静态文件,那么这种包含仅仅是把包含文件的内容加到JSP文件中去,这个文件不会被JSP编译器执行;如果包含文件是动态的,那么这个被包含文件也会被JSP编译器执行。

异同点

  1. include指令

    include指令可以在JSP页面转换成Servlet之前,将JSP代码插入其中。

    <%@include file="文件名"%>

  2. include动作

    <jsp:include>动作是在主页面被请求时,将其他页面的输出包含进来。

    <jsp:include> page="文件名" flush="true"

  3. 区别和比较

    根本区别在于他们被调用的时间。

    <jsp:include>动作在请求期间被激活,而include指令在页面转换期间被激活。

    两者之间的差异决定着它们在使用上的区别。

    使用include指令的页面要比使用<jsp:include>动作的页面难于维护。

    <jsp:include>动作相对于include指令在维护上有着明显优势,而include指令的功能更强大,执行速度也稍快。include指令允许所包含的文件中含有影响主页面的JSP代码,如响应内容的设置和属性方法的定义。

实例

includeAction2.jsp:

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <title>动作实例2</title>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
</head>
<body>
以下是hello1.jsp的内容:
<hr>
    
<!--include动作加载页面hello1.jsp,然后通过param动作传递参数,name=QQ-->
<jsp:include page="hello1.jsp">
    <jsp:param name="name" value="QQ"/>
</jsp:include>
    
</body>
</html>

hello1.jsp

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <title>JSP Page</title>
    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
</head>
<body>
<!--通过request对象获取name的参数值-->
<%=request.getParameter("name")%> 你好,欢迎你的访问!
</body>
</html>

<%=request.getParameter("name")%> 你好,欢迎你的访问!request.getParameter("name")是使用内置对象的方法获取name的值

<jsp:useBean>

<jsp:useBean>动作用来加载在JSP界面中使用到的JavaBean,实现JavaBean的重用。

<jsp:useBean>动作的语法格式:

<jsp:useBean id="Bean实例名称" scope="page|request|session|application" class="JavaBean类" type="对象变量的名称" beanName="名字">

在这里插入图片描述

JSP常用的内置对象

out

out对象调用方法把数据输出到网页上,并能够控制管理输出缓冲区和输入流。

方法含义
print()/println()用于输出数据。 print()方法把数据输出到客户端,
而println()方法除了把数据输出到客户端外,还在后面添加一空行
newLine()用于输出一个换行字符,用于实现换行功能
flush()用于输出缓冲区里的数据。该方法先把缓冲区中的数据输出到客户端,然后再清除缓冲区中的数据。
clearBuffer()用于清除缓冲区里的数据,但是不会把缓冲区的数据输出到客户端。
getBufferSize()用于获取缓冲区的大小
getRemaining()用于获取缓冲区剩余空间
isAutoFlush()用于判断是否自动刷新缓冲区。自动刷新返回true,否则返回false。
close()用于关闭输出流
<body>
    <%
        for (int i=0;i<3;i++){
            out.println("<h3>我的理想是什么...</h3>");
        }
        String str = "我一定学好JSP程序设计课程!";
        out.print(str+"<br/>");
        out.println("加油");
    %>
</body>

request

request对象的方法和功能,如果出现乱码应该怎么解决,这个对象的作用和生命周期

request对象

request对象用于获取客户端的各种信息。

request对象的生命周期

request对象的声明周期由JSP容器控制,当客户端通过HTTP请求到一个JSP页面时,JSP容器就会创建request对象并将请求封装到request对象中,当JSP容器处理完请求,request对象将会被销毁。

request对象的作用

当用户请求一个JSP页面时,JSP页面所在的Web服务器会将用户的请求信息封装到内置对象request中。request对象主要用接收客户端通过HTTP传送给服务器端的数据,可以通过其方法对数据进行操作。

解决乱码的问题

request.setCharacterEncoding("UTF-8");

request对象的常用方法

方法含义
getParameter(String name)用于获得客户端传送给服务器端的指定参数的值,返回值是字符串
getParameterValues(String name)返回名为name的请求的所有参数值(Enumeration)
getParameterNames()返回具有name属性的请求的所有参数值(Enumeration)
getAttribute(String name)用于获取request对象中属性为name的值。
getAttributeNames()返回request对象的所有属性值(Enumeration)
setAttribute(String name,Object obj)用于设置request对象中的属性及其属性值。
removeAttribute(String name)用于删除request对象中的属性name及其属性值。

应用实例

request1.jsp 输入信息界面

<body>
    <form action="requestHandle.jsp" method="get">
        请输入数据:<input type="text" name="name">
        <input type="submit" name="submit" value="提交">
    </form>
</body>

requestHandle.jsp 数据处理界面

<body>
    <%
        String text = request.getParameter("name");
        String buttonName = request.getParameter("submit");
    %>

    获取到客户端提交的文本和按钮信息如下:
    <hr>
    文本框输入的信息:<%=text%>
    按钮信息:<%=buttonName%>
</body>

数据库基本操作

JDBC的功能:
(1)同一个数据库建立连接;
(2)向数据库发送SQL语句;
(3)处理数据库返回的结果。

JDBC结构:

  1. 应用程序
    应用程序实现JDBC的连接、发送SQL、然后获取结果的功能,执行以下任务:与数据源请求建立连接;向数据源发送SQL请求;为结果集定义存储应用和数据类型;询问结果;处理错误;控制传输,提交操作;关闭连接。

  2. JDBC API
    JDBC API是一个标准统一的SQL数据存取接口。为Java程序提供统一的操作各种数据库的接口。程序员编程时,不用关心它所要操作的数据库是哪种数据库,从而提高了软件的通用性。只要系统上安装了正确的驱动器组件,JDBC应用程序就可以访问其相关的数据库。

  3. 驱动程序管理器
    JDBC驱动程序管理器的主要作用是代表用户的应用程序调入特定驱动程序,要完成的任务包括:为特定数据库定位驱动程序;处理JDBC初始化调用等。

  4. 驱动程序
    驱动程序实现JDBC的连接,向特定数据源发送SQL声明,并且为应用程序获取结果。

  5. 数据库
    数据库是应用程序想访问的数据源(如Oracle、Microsoft SQL Server、MySQL)。

MYSQL数据库常见中文乱码处理方式

  1. 安装MYSQL时候设置编码方式为gb2312或者UTF-8,

  2. 在创建数据库时将字符集和整理都设置为gb2312。

  3. 创建表时如果有字段需要输入中文,需要把该字段的字符集和整理设置为gb2312。

  4. 获取连接时通过传递参数设置数据库的编码方式,即在数据库url后面指定编码方式,

常用数据库的驱动程序:

连接mysql Driver类:com.mysql.jdbc.Driver URL:jdbc:mysql://localhost:3306/test

连接Oracle Driver类:oracle.jdbc.driver.OracleDriver URL:jdbc:oracle:thin:@localhost:1521:[sid]

连接SQLServer 2000 Driver类:com.microsoft.jdbc.sqlserver.SQLServerDriver URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=[database]

连接SQLServer 2005 Driver类:com.microsoft.sqlserver.jdbc.SQLServerDriver URL:jdbc:sqlserver://localhost;DatabaseName=[database]

应用实例

例题7-1和7-5的关键语句看懂并理解,会考察其中某个语句的意思,代码补充

select语句查询。statement,7-5带参数的例子。type和quercy。

还有关键语句的意思,例如rs.last() 的意思(光标指向查询结果集的最后一行),rs.afterLast()(将光标移动到结果集的最后一行之后),stmt.excute()(返回查询结果集)等。给一个数据库的代码,知道表、用户名和密码、mysql访问的驱动程序(Driver等)

编写JSP文件访问数据库(accessMySQL.jsp)

【例7-1】使用JDBC驱动访问MySQL的JSP页面(accessMySQL.jsp)
<%@page import="java.sql.DriverManager" %>
<%@page import="java.sql.ResultSet" %>
<%@page import="java.sql.Statement" %>
<%@page import="java.sql.Connection" %>
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>通过MySQL的JDBC驱动访问数据库</title>
    </head>
    <body bgcolor="pink">
        <h3 align="center">使用MySQL的JDBC驱动访问MySQL数据库</h3>
        <hr>
        <table border="1" bgcolor="#ccceee" align="center">
            <tr>
                <th width="87" align="center">学号</th>
                <th width="87" align="center">姓名</th>
                <th width="87" align="center">性别</th>
                <th width="87" align="center">年龄</th>
                <th width="87" align="center">体重</th>
            </tr>
            <%
                Connection con = null;
                Statement stmt = null;
                ResultSet rs = null;
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=gbk";
                // 3306为端口号,student为数据库名,url后面添加的?useUnicode=true&characterEncoding=gbk用于处理向数据库中添加中文数据时出现乱码的问题
                con = DriverManager.getConnection(url, "root", "admin");
                stmt = con.createStatement();
                String sql = "select * from stuinfo";
                rs = stmt.executeQuery(sql);
                while (rs.next()) {
            %>
            <tr>
                <td><%=rs.getString("SID")%>
                </td>
                <td><%=rs.getString("SName")%>
                </td>
                <td><%=rs.getString("SSex")%>
                </td>
                <td><%=rs.getString("SAge")%>
                </td>
                <td><%=rs.getString("SWeight")%>
                </td>
            </tr>
            <%
                }
                rs.close();
                stmt.close();
                con.close();
            %>
        </table>
        <hr>
    </body>
</html>
【例7-2】使用驱动访问SQL Server 2000的JSP页面(accessSQLServer.jsp)。
<%@page import="java.sql.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>通过SQL Server的JDBC驱动访问数据库</title>
    </head>
    <body>
    <center>
        <br> <br> <br>
        <h2> 欢迎使用SQL Server的JDBC驱动访问SQL Server数据库 </h2>
        <hr>
        <table border=2 bgcolor="ccceee" align="center">
            <tr>
                <td>job_id</td>
                <td>job_desc</td>
                <td>min_lvl</td>
                <td>max_lvl</td>
            </tr>
            <%
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName = pubs";
                String user = "sa";
                String password = "";
                Connection conn =
                        DriverManager.getConnection(url, user, password);
                Statement stmt = conn.createStatement();
                String sql = "select top 6 * from jobs";
                ResultSet rs = stmt.executeQuery(sql);
                while (rs.next()) {
            %>
            <tr>
                <td><%=rs.getString("job_id")%>
                </td>
                <td><%=rs.getString("job_desc")%>
                </td>
                <td><%=rs.getString("min_lvl")%>
                </td>
                <td><%=rs.getString("max_lvl")%>
                </td>
            </tr>
            <%
                }
                rs.close();
                stmt.close();
                conn.close();
            %>
        </table>
        <hr>
    </center>
    </body>
</html>

7-5 SqlServer + 倒序输出

<%@page import="java.sql.DriverManager" %>
<%@page import="java.sql.ResultSet" %>
<%@page import="java.sql.Statement" %>
<%@page import="java.sql.Connection" %>
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>ResultSet方法使用</title>
    </head>
    <body>
        <h2>使用ResultSet方法访问SQL Server 2008</h2>
        <hr>
    <table border="2" bgcolor="ccceee" align="center">
        <tr>
            <th>学号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
            <th>体重</th>
        </tr>
        <%
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1433;databasename=student";
            String user = "sa";
            String password = "root";
            Connection conn = DriverManager.getConnection(url, user, password);
            Statement stmt = conn.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            String sql = "select * from info";
            ResultSet rs = stmt.executeQuery(sql);
            rs.last();
            
            rs.afterLast();
            while (rs.previous()) {
        %>
        <tr>
            <td><%=rs.getString("studentNumber")%></td>
            <td><%=rs.getString("studentName")%></td>
            <td><%=rs.getString("studentSex")%></td>
        </tr>
        <%
            }
            rs.close();
            stmt.close();
            conn.close();
        %>
    </table>
    </body>
</html>

Statement

使用Statement发送要执行的SQL语句前首先要创建Statement实例对象,然后根据参数type,concurrency的取值情况设置返回不同类型的结果集。

Statement stmt = conn.createStatement(type,concurrency);

type属性用来设置结果集的类型,Concurrency用来设置结果集更新数据库的方式。

常用属性

属性含义
ResultSet.TYPE_FORWARD_ONLY表示结果集只能向下滚动
ResultSet.TYPE_SCROLL_INSENSITIVE表示结果集的游标可以上下滚动,当数据库变化时,当前结果集不变
ResultSet.TYPE_SCROLL_SENSITIVE表示结果集的游标可以上下滚动,当数据库变化时,当前结果集同时改变
ResultSet.CONCUR_READ_ONLY不能用结果集更新数据库中的表
ResultSet.CONCUR_UPDATABLE可以用结果集更新数据库中的表

常见方法

方法说明
executeQuery()用来执行查询
executeUpdate()用来执行更新
execute()用来执行动态的未知操作
setMaxRow()设置结果集容纳的最多行数
getMaxRow()获取结果集的最多行数
setQueryTimeOut()设置一个语句执行的等待时间
getQueryTimeOut()获取一个语句的执行等待时间
close()关闭Statement对象,释放其资源

JavaBean

编写JavaBean的时候要按照面向对象的封装性原理进行编写,同时要遵循JavaBean规范。

JavaBean的定义规范

  1. 必须有一个无参的构造函数。
  2. 对在Bean中定义的所有属性提供getter和setter方法,并且这些方法是公共的。
  3. 对于boolean类型的属性,其getter方法的形式为isXXX的,其中XXX为首字母大写的属性名。
  4. 对于数组类型的属性,要提供形式为getXXX和setXXX的方法。

JavaBean特性

  1. 可以实现代码的重复使用。
  2. 容易维护、容易使用且容易编写。
  3. 可以在支持Java的任何平台上使用,而不需要重新编译。
  4. 可以与其它部件的进行整合。
  5. 使用JavaBean的好处是简化了页面设计,并帮助将表示层和业务逻辑层分离。

使用JavaBean

在JSP页面中使用JavaBean有两种方式。

第一种方式可以通过5.5节中的<jsp:useBean>动作加载JavaBean,使用<jsp:setProperty>动作给JavaBean属性值传送参数,使用<jsp:getProperty>动作获取属性的值。

第二种方式可以直接在JSP页面中以Java脚本的形式直接使用,例如:<jsp:useBean id="login" class="ch09.Login"> 等价于脚本:<%Login login = new Login();%>


第一种方式:使用JSP动作

<jsp:useBean id="login" class="ch.Login"/>
<jsp:setProperty name="login" property="*"/>
<jsp:getProperty name="login" property="userName"/>

第二种方式:使用JSP脚本

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <jsp:useBean id="login" class="ch.Login"/>
    <jsp:setProperty name="login" property="*"/>
    <jsp:getProperty name="login" property="userName"/>
    <%--  等价脚本  --%>
    <%@page import="ch.Login" %>
    <%
        Login login1 = new Login();
        login1.setUserName(request.getParameter("userName"));
        login1.setUserName(request.getParameter("password"));
        out.println(login1.getUserName());
        out.println(login1.getPassword());
    %>
</body>
</html>

JavaBean的作用域及作用

利用<jsp:useBean>的scope属性,可以定义JavaBean的生命周期和使用范围。

<jsp:useBean id="login" class="ch08.Login" scope="page"/>

page作用域

JSP页面内的所有实例的默认作用域都为page,并且允许在为局部变量指定的范围内使用这种数据(仅限于在本页面内使用)

request作用域

JSP页面使用request表示同一次请求所涉及到的服务器资源(可能是页面、 servlet等)中使用,例如,程序中有使用<jsp:forward/> <jsp:include/>这些动作时,所涉及到的页面(或其它类型的资源)与本页面属于同一次的请求。

session作用域

可在同一次会话期间所访问的资源中使用,实际上也就是所有的页面都能访问。如果需要提供有状态的用户,则采用session作用域。在线聊天、在线购物、在线论坛、电子商务、网上银行, session作用域都能满足要求。对用户提供从请求到请求的追踪,为用户提供无缝的、持久的操作环境。

application作用域

application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。

应用实例

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
    <title>用户注册-处理注册信息界面</title>
</head>
<body>
    <%
        request.setCharacterEncoding("UTF-8");
    %>
    <%--相当于UserRegisterBean use = new UserRegisterBean();--%>
    <jsp:useBean id="use" class="userRegister/UserRegisterBean" scope="page">
        <%--*初始化所有的set方法--%>
        <jsp:setProperty name="use" property="*"/>
    </jsp:useBean>
    <ul style="list-style: none">
        <li>姓名:<jsp:getProperty name="use" property="name"/></li>
        <li>年龄:<jsp:getProperty name="use" property="age"/></li>
        <li>性别:<jsp:getProperty name="use" property="sex"/></li>
    </ul>
</body>
</html>

保存用户信息的JavaBean(UserRegisterBean.jsp)

public class UserRegisterBean {
    private String name;
    private int age;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

Servlet

什么是Servlet技术

Servlet是Java Web应用程序中的组件技术,是运行在服务器端的Java应用程序,实现与JSP类似的功能, Servlet本身是一个Java类,可以动态地扩展服务器的能力。

在web服务器执行JSP文件时,首先JSP容器会将其转译为Servlet文件,并自动编译解释执行,JSP中使用到的所有对象都被转换为Servlet,然后被执行。

Servlet接受来自客户端的请求,将处理结果返回给客户端。

Servlet技术的作用

  1. 获取客户端浏览器通过HTML表单提交的数据及相关信息。
  2. 创建并返回对客户端的动态响应页面。
  3. 访问服务端资源,如文件、数据库。
  4. 为JSP页面准备动态数据,与JSP一起协作创建响应页面。

应用实例

通过Servlet获取表单中的数据

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>数据页面</title>
    </head>
    <body>
            <form method="post" action="${pageContext.request.contextPath}/ThreeParams">
                <p>数据1<input type="text" name="gr1"></p>
                <br>
                <p>数据2<input type="text" name="gr2"></p>
                <br>
                <p>数据3<input type="text" name="gr3"></p>
                <br>
                <p>
                    <input type="submit" value="提交">
                    <input type="reset" value="清除">
                </p>
            </form>
    </body>
</html>
import java.io.*;
import javax.servlet.*;

public class ThreeParams extends HttpServlet {

     protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();        
        out.println("<html>");      
        out.println("<body>");        
        out.println(request.getParameter("gr1") +"<br>");
        out.println(request.getParameter("gr2") +"<br>");
        out.println(request.getParameter("gr3") +"<br>");        
        out.println("</body>");
        out.println("</html>");        
        out.close();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
        processRequest(request, response);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet>
        <servlet-name>ThreeParams</servlet-name>
        <servlet-class>twelve.ThreeParams</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ThreeParams</servlet-name>
        <url-pattern>/ThreeParams</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

重定向与转发

重定向是将用户从当前页面或者Servlet定向到另外一个JSP页面或者Servlet;

response.sendRedirect("sendFord.jsp");

转发是用户对当前JSP页面或者Servlet对象的请求转发给另外一个JSP页面或者Servlet对象。

RequestDispatcher dispatcher= request.getRequestDispatcher("ShowMessage");
//转发到另一个servlet文件
dispatcher.forward(request,response);

说明:
对于老师提到过的知识点,都用高亮做了标注。请注意。
2022年JSP考试的重点,马后炮汇总。
妈蛋姐姐下次一定提前整理笔记 (╯▔皿▔)╯

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: CVE-2022-29464是WSO2文件上传漏洞的漏洞编号。该漏洞是一种未经身份验证的无限制任意文件上传漏洞,允许未经身份验证的攻击者通过上传恶意JSP文件在WSO2服务器上获得远程命令执行(RCE)的权限。\[3\]攻击者可以利用该漏洞上传恶意的JSP文件,并通过执行任意命令来控制服务器。这个漏洞的具体利用方式是通过在HTTP POST请求中上传恶意文件来实现的。\[2\]一旦攻击者成功利用该漏洞,他们可以执行任意命令,可能导致服务器被完全控制。因此,对于使用受影响版本的WSO2的用户来说,修复该漏洞是非常重要的。 #### 引用[.reference_title] - *1* *3* [【春秋云境】CVE-2022-29464](https://blog.csdn.net/m0_49025459/article/details/130400369)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [漏洞复现 a.WSO2 文件上传 (CVE-2022-29464)](https://blog.csdn.net/FODKING/article/details/125746993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值