IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> JSP重点 -> 正文阅读

[移动开发]JSP重点

JSP重点

第三章 HTML与CSS简介

列表

有序列表(<ol></ol>)

<ol type="1" start=2>
    <li type="a/A/I/i" value=2 > A </li>
    <li> B </li>
</ol>

无序列表(<ul></ul>)

<ul type="disc">
			<li> a </li>
			<li type="circle"> b </li>
			<li type="square"> c </li>
</ul>

插入内容

插入图片

<img src="./image/1.jpg" alt="picture" width="360" height="200" align="center" />

插入视频

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

插入超链接

<a href="https://www.baidu.com" target="_blank">跳转百度官网</a>
属性内容
_parent目标文档载入当前窗口的父窗口
_self默认值,目标文档载入并显示在当前窗口中
_blank浏览器总在一个新打开、未命名的窗口中载入目标文档

表格

<table border="1" width="90%" bordercolor="red" cellpadding="2">
			<tr height="50" valign="middle" >
				<th width="33%" colspan="2">Java方向</th>
				<th width="36%" colspan="2">软测方向</th>
				<th width="36" colspan="2">.NET方向</th>
			</tr>
			<tr align="center">
				<td width="16%">1</td>
				<td width="16%">2</td>
				<td width="17%">3</td>
				<td width="17%">4</td>
				<td width="17%">5</td>
				<td width="17%">6</td>
			</tr>
		</table>

**<table>**属性

属性内容
border设置表格边框的宽度,若为0,则表示边框不可见
cellspacing单元格边框到表格边框的距离
cellpading单元格内文字到单元格边框的距离
width表格宽度,20%表示表格宽度为整个页面宽度的20%
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 action="url" method="post" name="SubRegisterInfo" onsubmit="function" onreset="function" target="window"></form>
属性内容
action处理表单数据的处理程序地址
method设置处理程序从表单中获取信息的方式,取值为get或post
name表单的名字
onsubmit、onreset点击submit或reset按钮后执行的脚本函数名
target设置显示表单内容的窗口名

表单域

<input type="text" size="20" maxlength="20" />
<br />
<input type="submit" />
<br />
<input type="reset" />
<br />
<input type="checkbox" checked />
<br />
<input type="radio" checked />
<br />
<input type="password" />
属性内容
typetext、submit、reset、checkbox、hidden、image、password、radio
name输入域名字
value默认值
align对齐方式,left,right,middle,top
onclick按下按钮后执行的脚本函数名

HTML中引入CSS的方法

嵌入式样式表

在标签上使用style属性,添加css属性就可,作用范围只限于本标签

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

内联式样式表

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			p{
				font-family: 宋体;
				font-size: 9pt;
				color: blue;
				text-decoration: underline;
			}
			h2{
				font-family: 宋体;
				font-size: 20pt;
				color: red;
			}
		</style>
	</head>
	<body>
		<p> Hello </p>
		<h2> World</h2>
	</body>
</html>

外联式样式表

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link href="./css/p.css" rel="stylesheet" type="text/css" />
	</head>
	<body>
		<p> Hello </p>
		<h2> World</h2>
		<h1 class="text">外联式样式表</h1>
	</body>
</html>
p{
	font-family: 宋体;
	font-size: 9pt;
	color: blue;
	text-decoration: underline;
}
h2{
	font-family: 宋体;
	font-size: 20pt;
	color: red;
}
.text{
	font-family: 宋体;
	font-size: 9pt;
	color: orange;
	text-decoration: blink;
}

CSS的优先级

嵌入式样式表(优先级最高)、内联式样式表、外联式样式表

CSS样式表属性

字体属性
属性内容
font-family字体名称,任意自已名称
font-style字体风格:normal、italic(斜体)、oblique(倾斜)
font-weight字体加粗:normal、bold(一般加粗)、bolder(重加粗)、lighter(轻加粗)
font-size绝对大小:xx-small,x-small,small,medium,large,x-large,xx-large
font字体属性的略写,如font:italic bold 12pt Times,serif
颜色和背景属性
属性内容
font-family前景色:颜色名称、RGB值、16进制值
background-color背景色,颜色名称、RGB值、16进制值
background-image背景图案:url
background-attachment背景图片是否滚动:scroll(背景图片和颜色一起滚动)、fixed
文本属性
属性内容
letter-spacing字母之间间距:normal、长度:设置字间距长度,度量单位:mm、cm、pt、px、em
word-spacing单词之间间距:normal、长度:数值
text-decoration文字装饰样式:underline:下划线、overline:上划线、line-through:删除、blink:闪烁
vertical-align垂直对齐方式:baseline、sub、top、middle、bottom
text-align水平对齐方式:left、right、center、justify
line-height行高:normal、数字、长度、百分比
text-indent文本首行缩进方式:长度、百分比
text-transform文本转换方式:capitalize:元素中每个单词第一个字母大写、uppercase:全部大写、lowercase:全部小写

第五章 JSP基础知识

JSP的三种注释方法

隐藏注释

隐藏注释是JSP的标准注释,在JSO程序中,在发布JSP网页时完全被忽略,也不会发布到客户浏览器上

<%--注释语句--%>

HTML注释

HTML注释在发布网页时可以再浏览器源文件窗口中看到,注释的内容会被输送到客户端的浏览器上。

<!--注释语句-->

Java注释

同隐藏注释

<%/*注释语句*/%><%//注释语句%>

JSP常用脚本元素

变量和方法声明

<%!
	String str = "Hello World";
%>
<%
	String str1 = "world";
%>

<%! %>:全局声明

<% %>:局部声明

表达式和脚本

<%!
    String str="Hello";
%>
<!-- JSP表达式 -->
JSP表达式:<%=str%>
<!-- JSP脚本 -->
JSP脚本:<%out.println(str)%>

JSP常用指令

page指令

page指令用于定义JSP文件中的全局属性,其作用域为它所在的JSP文件页面 和其包含的文件。

属性内容
language用于指定JSP页面中使用的脚本语言,其默认值为Java。
extends用于指定JSP编译器父类的完整限定名,此JSP页面产生的Servlet将由该父类扩展而来。
**import **用于导入JSP页面使用的Java API类库。import属性是所有page属性中唯一可以多次设置的属性,用来指定JSP页面中所用到的类。
**session **用于指定是否可以使用session对象,若允许页面参与HTTP会话,
就设置为true,否则设为false,其默认值为true。
buffer用于设定页面的缓冲区大小(字节数),属性值为none,表示禁
用缓冲区,其默认值为8KB。
autoFlush用于指定JSP页面缓冲区是否自动刷新输出,其默认值为true。
如果该属性设置为true,则页面缓冲区满时自动刷新输出;否则,当页面缓冲
区满时抛出一个异常。
**isThreadSafe **用于指定JSP页面是否能够处理一个以上的请求,如果为
true,则该页面可能同时收到JSP引擎发出的多个请求;反之, JSP引擎会对收
到的请求进行排队,当前页面在同一时刻只能处理一个请求。其默认值为true。
info用于指定JSP页面的相关信息文本,无默认值。
errorPage用于指定错误页面,无默认值。当页面出现一个没有被捕获的
异常时,错误信息将以throw语句抛出,而被设置为错误信息网页的JSP页面,
将利用exception隐含对象,获取错误信息。 relativeURL默认设置为空,即没有
错误处理页面。
isErrorPage指定JSP页面是否为处理异常错误的页面,其默认值为 false。
如果将isErrorPage属性设置为true,则固有的exception对象脚本元素可用。
**contentType **用于指定内容MIME类型和JSP页面的编码方式。对于普通JSP页面,默认的contentType属性值为"text/html;charset=ISO-8859-1"。对于JSP文档,默认的contentType属性值为"text/html;charset=ISO-8859-1 "。
**pageEncoding **用于指定JSP页面的编码方式,默认值为ISO-8859-1,为支持中文可设置为UTF-8。
<%@page language="java" import="java.util.Date"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
taglib指令

taglib指令用来指定页面中使用的标签库以及其自定义标签的前缀。

<%@taglib uri=" tagLibraryURI" prefix=" tagPrefix"%>
属性内容
**uri **统一资源标识符属性用于指定标签库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签。
prefix用于指定标记库中所有动作元素名中使用的前缀,无默认值。
include指令

include指令用于在JSP编译时, 为页面插入一个静态文件,如JSP页面、 HTML页面、 文本文件或是一段Java程序。

<%@ include file="filename"%>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8LLtCg9W-1653395035907)(F:\Sync\大学学习\2021-2022学年第二学期\JSP程序设计\考试\JSP重点.assets\image-20220523190136605.png)]

JSP常用动作

在客户请求JSP页面时, 利用JSP动作可以传递参数、 动态地插入文件、 重用JavaBean组件、 把用户重定向到另外的页面。

<jsp:param>

<jsp:param>动作可以用于<jsp:include>、 < jsp:forward>和<jsp:plugin>动作体中,为其他动作提供附加信息。

<jsp:param name="paramName" value="param Value"/>

name属性用于指定参数名称,不可以接受动态值。
value属性用于指定参数值,可以接受动态值。

<jsp:include>

<jsp:include>动作用来把指定文件插入正在生成的页面中。

<jsp:include page="relative URL" flush="true" />
或者
<jsp:include page="fileName" flush="true">
	<jsp:param name="paramName" value="paramValue"/>
</jsp:include>
  • page属性指定所包含的资源的相对路径,可以接受动态值。
  • flush属性指定在包含目标资源之前是否刷新输出缓冲区,默认值为false。 flush属性不可以接受动态值。
特点 语法格式
include指令 可以在JSP页面转换成Servlet之前,将JSP代码插入其中。 <%@include file="文件名"%>
<\jsp:include>动作 在主页面被请求时,将其它页面的输出包含进来。 <\jsp:include page="文件名"flush="true"/>
根本区别 在于它们被调用的时间。
<\jsp:include>动作在请求期间被激活,而include指令在页面转换期间被激活。
结论 include指令执行时将被导入页面的jsp代码完全融入,两个页面融合 成一个Servlet;而<\jsp:include>动作则在Servlet中使用include方法来 引入被导入页面的内容。因此include指令执行时不需编译,速度快; <\jsp:include>动作需要加载执行,速度慢。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    以下是Hello1.jsp的内容
    <hr>
    <jsp:include page="hello1.jsp">
        <jsp:param name="name" value="Jsp"/>
    </jsp:include>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%=request.getParameter("name")%>你好!
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ftcyYbvG-1653395035908)(F:\Sync\大学学习\2021-2022学年第二学期\JSP程序设计\考试\JSP重点.assets\image-20220523193119435.png)]

<jsp:useBean>

<jsp:useBean>动作用来装载一个将在JSP页面中使用的JavaBean。 这个功能非常有用, 能够实现JavaBean组件重用。

<jsp:useBean id="beanInstanceName" scope="page | request |session | application“ class="package.class" type="package.class" beanName="package.class"/>

属性内容
**id **指定该JavaBean的实例名称, 不可接受动态值。 如果能够找到id和
scope相同的Bean实例, <jsp:useBean>动作将使用已有的Bean实例而不是创建
新的实例。
**scope **指定Bean作用域范围, 不可以接受动态值, 可选作用域有: page、request、 session和application。
page是默认值, 表示该Bean只在当前页面内可用( 保存在当前页面的PageContext内) 。
request: 表示该Bean在当前的客户请求内有效( 保存在ServletRequest对象内) 。
session: 表示该Bean对当前HttpSession内的所有页面都有效, 即会话作用域。
application: 表示该Bean在任何使用相同的application的JSP页面中有效, 即整个应用程序范围内有效。
**class **指定Bean的类路径和类名, 不可接受动态值, 这个class不能是抽象的。
type指定引用该对象的变量的类型, 它必须是Bean类的名字、 超类名字、该类所实现的接口名字之一。 变量的名字是由id属性指定的
beanName指定bean的名字, 可以接受动态值。 beanName属性必须与
type属性结合使用, 不能与class属性同时使用。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <hr>
    <jsp:useBean id="time" class="java.util.Date"/>
    现在时间:<%=time%>
</body>
</html>
<jsp:setProperty>

<jsp: setProperty>动作用来设置、 修改已经实例化的Bean中的属性值。

<jsp:setProperty name=“beanInstanceName” property= “*” |property=“propertyName” [param=“parameterName”| value = “value”]/>

属性内容
**name **必需。 它表示要设置哪个Bean的属性, 不可接受动态值
**property **必需。 它表示要设置哪个属性。 如果property的值是“*” , 表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应属性的set方法。
param可选。 它指定用哪个请求参数作为Bean属性的值。 如果当前请求没有参数, 则什么事情也不做, 系统不会把null传递给Bean属性的set方法。 因此, 可以让Bean自己提供默认属性值, 只有当请求参数明确指定了新值时才修改默认属性值。
value可选。 该属性用来指定Bean属性的值。
<jsp:useBean id="user" scope="page" class="ch.UserRegisterBean"/>
<jsp:setProperty name="use" property="*"/>
<!--  -->
<jsp:getProperty>

<jsp:getProperty>动作获取指定Bean属性的值,转换成字符串,然后输出。

<jsp:getProperty name="beanInstanceName" property="propertyName" />

<jsp:getProperty>元素可以获取Bean的属性值并使用或将其显示在JSP页面中。在使用<jsp:getProperty>前,必须用<jsp:useBean>创建实例化对象。

<hr>
<jsp:useBean id="user" scope="page" class="ch.UserRegisterBean"/>
<jsp:setProperty name="use" property="*"/>
<%--  使用Bean方法获取属性值  --%>   
<%=user.getUserName()%>
<br>
<%--  使用动作获取属性值  --%>
<jsp:getProperty name="user" property="userName">
<jsp:forward>

<jsp:forward>用于引导客户端的请求到另一个页面或者是另一个Servlet。

<jsp:forward page="relativeURL" />

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login.jsp</title>
</head>
<body>
    <form action="loginCheck.jsp">
        <table>
            <tr>
                <td>输入用户名:</td>
                <td><input type="text" name="name" value="<%=request.getParameter("name")%>"/></td>
            </tr>
            <tr>
                <td>输入密码:</td>
                <td><input type="password" name="name"/></td>
            </tr>
            <tr>
                <td><input type="submit" value="登录"/></td>
            </tr>
        </table>
    </form>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>loginCheck.jsp</title>
</head>
<body>
    <%
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        if (name.equals("QQ")&&password.equals("123")){
    %>
    <jsp:forward page="success.jsp">
        <jsp:param name="user" value="<%=name%>"/>
    </jsp:forward>
    <%}else{%>
    <jsp:forward page="login.jsp">
        <jsp:param name="user" value="<%=name%>"/>
    </jsp:forward>>
    <%}%>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success.jsp</title>
</head>
<body>
    <%=request.getParameter("name")%>  登录成功!
</body>
</html>

第六章 JSP常用内置对象

out对象

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

request对象

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

request对象的生命周期

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

request对象的作用

request对象主要用接收客户端通过HTTP传送给服务器端的数据,可以通过其方法对数据进行操作。

解决乱码问题的方法

request.setCharacterEncoding("UTF-8");

request对象的重点方法

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

response对象

session对象

pageContext对象

exception对象

application对象

第七章 数据库基本操作

JDBC使用

流程

  • 注冊驱动 (仅仅做一次)

    Class.forName("com.mysql.jdbc.Driver");

  • 建立连接(Connection)

    Connection conn = DriverManger.getConnection(url,account,password);

  • 创建传输器Statement

    Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY);

  • 运行SQL语句

    ResultSet rs = stmt.executeUpdate(sql);

  • 处理运行结果(ResultSet)

    rs.getString('');/rs.getString(1);

  • 释放资源

    rs.close();

    stmt.close();

    conn.close();

代码

<%@page  import="java.sql.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Connection conn;
        Statement stmt;
        ResultSet rs;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://121.36.86.90:3306/train?useUnicode=true&characterEncoding=utf-8","XXX","XXX");
            // SQL Server数据库
            // Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
            // String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery("select * from info");
            while(rs.next()){
    %>
    <tr>
        <td align="center"><%=rs.getString("studentNumber")%></td>
        <td align="center"><%=rs.getString("studentName")%></td>
        <td align="center"><%=rs.getString("studentSex")%></td>
        <td align="center"><%=rs.getString("studentAge")%></td>
        <td align="center"><%=rs.getString("studentWeight")%></td>
    </tr>
    <%
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    %>
</body>
</html>

Statement属性

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

语句==(重要)==

创建表语句

CREATE TABLE QUESTION(
	QuestionID VARCHAR(9),
	Factor1 INT,
    Operator VARCHAR(2),
    Factor2 INT,
    Result INT,
    CategoryID VARCHAR(9)
);

插入语句

INSERT INTO <表名>(<属性列1><属性列2>) 
VALUES (<常量1><常量2>)

删除语句

DELETE FROM Question
WHERE CategoryID = (Select CategoryID FROM Category where Name = 'Top');

更新语句

UPDATE Question
SET Operator = '*'
WHERE CategoryID = (SELECT CategoryID
                   FROM Category
                   WHERE Name = 'Junior');

查询语句

SELECT Factor1,Operator,Factor2,Result
FROM Question
WHERE Operator = '+'
AND Result<50;


SELECT [ALL | DISTINCT] column1[,column2]
FROM table1[,table2]
[WHERE "conditions"]
[GROUP BY "column-list"]
[HAVING "conditions]
[ORDER BY "column-list" [ASC | DESC] ] 

三种接口发送执行查询语句

Statement用于执行简单的不带参数的SQL语句
PreparedStatement用于执行带有IN类型参数的预编译过的SQL语句
CallableStatement用于执行一个数据库的存储过程

Statement接口的常用方法

方法含义
executeQuery()用来执行查询,返回结果集
executeUpdate()用于获取request对象中属性name的值。返回影响的行数
execute()用于设置request对象中的属性及其属性值。 用于判断该SQL语句是否返回了ResultSet。
setMaxRow()设置结果集容纳的最多行数
getMaxRow()获取结果集的最多行数
setQueryTimeOut()设置一个语句执行的等待时间
getQueryTimeOut()获取一个语句执行的等待时间
close()关闭Statement对象,释放其资源

第九章 JSP与JavaBean

JavaBean代码规范

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

JavaBean特性

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

示例代码

public class Login {
    private String userName;
    private String password;
    public Login(){
        
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

使用JavaBean

在JSP页面中使用JavaBean有两种方式。第一种方式可以通过5.5节中的<jsp:useBean>动作加载JavaBean,使用<jsp:setProperty>动作给JavaBean属性值传送参数,使用<jsp:getProperty>动作获取属性的值。第二种方式可以直接在JSP页面中以Java脚本的形式直接使用。

使用JSP动作

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

使用Java脚本

<%@ 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 id="login" class="ch08.Login" scope="page"/>

page作用域

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

request作用域

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

session作用域

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

application作用域

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

第十章 JavaServlet技术

什么是Servlet技术

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

Servlet技术的作用

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

Servlet技术的优点

  1. 有效性。当CGI程序完成请求的处理工作时, 就会终止程序, 这样就难以缓存计算结果、 保持数据库连接开放, 并允许依赖于永久数据的其它优化操作。 但在完成响应之后, Servlet仍然保留在内存中, 因此可以直接在请求之间存储任意复杂的数据。
  2. 方便。Servlet包含扩展基础结构, 能够自动对HTML表单数据进行分析和解码、 读取和设置 Http头、 处理Cookie、 跟踪会话以及许多其它类似的高级功能。
  3. 强大。Servlet 可以直接与Web服务器对话,与Web服务器的通信更易于将相对URL转换成具体的路径名。 多个Servlet之间还能共享数据, 这更易于实现数据库连接共享和类似资源共享优化操作。
  4. 可移植性。几乎每种主要的Web服务器都可通过插件或直接支持Servlet。
  5. 安全。与传统的CGI程序相比, Servlet更加安全。
  6. 便宜。一旦拥有了某种Web服务器, 不管其成本如何, 添加Servlet支持。

Servlet技术的应用

通过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);

区别:

  1. RequestDispatcher的forward()方法只能将请求转发给同一个Web应用中的组件; HttpServletResponse的sendRedirect()方法不仅可以重定向到当前应用程序中的其它资源, 还可以重定向到同一个站点上的其它应用程序中的资源, 甚至是使用绝对URL重定向到其它站点的资源。
  2. 调用HttpServletResponse的sendRedirect()方法重定向的访问过程结束后, 浏览器地址栏中显示的URL会
    发生改变, 由初始的URL地址变成重定向的目标URL;而调用RequestDispatcher的forward()方法的请求转发过程结束后, 浏览器地址栏保持初始的URL地址不变。
  3. HttpServletResponse的sendRedirect()方法对浏览器的请求直接作出响应, 响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求;而RequestDispatcher的forward()方法在服务器端内部将请求转发给另外一个资源, 浏览器只知道发出了请求并得到了响应结果, 并不知道在服务器程序内部发生了转发
    行为。
  4. RequestDispatcher的forward()方法的调用者与被调用者之间共享相同的request对象和response对象, 它们 属于同一个访问请求和响应过程;而HttpServletResponse的sendRedirect()方法调用者与被调用者使用各自的request对象和response对象, 它们属于两个独立的访问请求和响应过程。
  5. 无论是RequestDispatcher的forward()方法, 还是HttpServletResponse的sendRedirect()方法, 在调用它们之前, 都不能有内容已经被实际输出到了客户端。 如果缓冲区中已经有了一些内容, 这些内容将被从缓冲区中清除。
<%@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 action="${pageContext.request.contextPath}/Verify" method="post">
            请输入一个实数:<input type="text" name="number">
            <input Type="submit" value="确定">
        </form>
    </body>
</html>
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;



public class Verify extends HttpServlet {
     @Override
     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
        String number=request.getParameter("number");
        try{
                //作用是把字符串转换为Double
            double n=Double.parseDouble(number);
            if(n>6000||n<-6000){
                //重定向到sendForward.jsp
                response.sendRedirect("sendForward.jsp");
            } else{
                RequestDispatcher dispatcher= request.getRequestDispatcher("ShowMessage");
                //转发到另一个servlet文件
                dispatcher.forward(request,response);
            }
        }
        catch(NumberFormatException e){
            //重定向到sendForward.jsp
             response.sendRedirect("sendForward.jsp");
         }
     }
     @Override
     public  void  doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException,IOException{
         doPost(request,response);
    }
}
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ShowMessage extends HttpServlet {
    @Override
    public  void  doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
      response.setContentType("text/html;charset=GB2312");
      PrintWriter out=response.getWriter();
        //获取客户提交的信息
      String number=request.getParameter("number");
      double n=Double.parseDouble(number);
      out.println(number+"的平方:"+(n*n));
   }
   @Override
   public  void  doGet(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException,IOException{
      doPost(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>Verify</servlet-name>
        <servlet-class>twelve.Verify</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>ShowMessage</servlet-name>
        <servlet-class>twelve.ShowMessage</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Verify</servlet-name>
        <url-pattern>/Verify</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>ShowMessage</servlet-name>
        <url-pattern>/ShowMessage</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-27 17:21:58  更:2022-05-27 17:22:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:22:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码