JSP实用教程(Web开发)
2021-07-21 19:05:57 41 举报
AI智能生成
包含Web网页开发基础知识点,学习后可以系统理解好MVC模式的应用,运用到经典案例“手机销售网”中。
作者其他创作
大纲/内容
通过修改conf文件下的主配置文件server.xml来更改端口
8080是默认的端口
可以是80
不可以把Tomcat服务器的端口修改为65536
配置端口
bin:存放启动与关闭Tomcat的脚本文件
conf:存放Tomcat的各种配置文件,其中最主要的配置文件是server.xml
lib:存放Tomcat运行时所需的jar包
logs:存放Tomcat运行时的日志文件
webapps:存放Web应用程序,默认情况下把Web资源放于此目录
temp:存放Tomcat运行时所产生的临时文件
work:存放由JSP生成的Servlet源文件和字节码文件,由Tomcat自动生成
目录
TOMCAT服务器
直接放在Tomcat安装目录的webapps目录下
在Tomcat安装目录下的conf文件夹中,打开server.xml
在</host>标签前面添加Context元素,将Web应用chapter05的配置信息加入Context元素中,如下所示
path属性用于设置要发布的Web应用的访问路径,用于浏览器访问的URL中
docBase属性用于设置Web应用在本地磁盘中的实际路径,此处为D盘下的chapter05目录。
<Context path=\"/chapter05\" docBase=\"D:\\chapter05 \" debug = \"0\" reloadable=\"true\"> </Context>
保存对server.xml的修改,双击startup.bat命令启动Tomcat
打开浏览器,访问http://localhost:8080/chapter05/welcome.html
通过修改server.xml文件进行部署
找到Tomcat安装目录下的conf目录,进入conf\\Catalina\\localhost文件夹
在localhost文件夹新建一个chapter05.xml文件
这是因为此XML文件的名称被默认作为Web应用的访问路径名,无须再次设置path属性,即使强行设置也是无效的。
此处的<Context>元素少了path属性
新建chapter05.xml文件后,双击startup.bat命令启动Tomcat
创建配置文件进行部署
发布Web应用
名字区分大小写
保存
安装目录是D:\\apache-tomcat-9.0.26
根目录是D:\\apache-tomcat-9.0.26\\webapps\oot
必须省略Web根目录的名字root
http :// IP:端口 / JSP页面的名字
访问根目录的JSP页面时,URL格式是
根目录
webapps目录下的任何一个子目录都可以作为一个Web服务目录
http :// IP:端口 / Web服务目录 / JSP页面的名字
JSP保存到webapps下的Web服务目录中的URL格式
在webapps下新建Web服务目录,不必重启Tomcat服务器
webapps下的Web服务目录
<Context path = \"/虚拟目录\" docBase = \"D:\\服务目录\" debug=“0” reloadable=“true”/>
找到</Host>的部分,在前面加入
打开主配置文件server.xml
主配置文件修改后,必须重新启动Tomcat服务器
新建Web服务目录
P8
相对目录
设置Web服务目录
JSP页面
把JSP页面中的HTML标记由客户的浏览器负责解释执行
P9
字节码的主要工作
JSP第一次被请求执行时 → Tomcat服务器根据JSP页面生成Java文件 → 编译成字节码文件 → 执行字节码文件响应用户请求
当这个JSP页面再次被请求执行时,Tomcat服务器直接执行字节码文件来响应用户
JSP页面的首次执行由服务器管理者来执行
JSP运行原理
Java Servlet就是Java类
不是Java Servlet技术的全部
JSP是以Java Servlet为基础
JSP与Java Servlet的关系
编写Web页面的语言
不体现数据的组织结构
描述数据的显示格式/提交方式
HTML
由浏览器解释执行
解释型的脚本语言,和Java语言没有关系
JavaScript
HTML与JavaScript
JSP简介
HTML标记、JavaScript标记
指令标记
动作标记
JSP标记
由服务器处理、执行
变量、方法的声明
Java程序片
Java表达式
组成
用户端浏览器
服务器计算,并将结果化为字符串
JSP页面的基本结构
<HTML>之前 或 <HTML>与</HTML>之间
在JSP指令之后
位置
与写的位置无关,但习惯上写到JSP页面的前面
<%! %>之间的 在整个JSP页面都有效
声明变量
可在Java程序片中调用该方法
方法内声明的变量只在该方法内有效
定义方法
可在Java程序片中使用该类创建对象
定义类
声明变量、定义方法
多个(多次)
所调用的方法必须是JSP曾经定义的方法
可以出现方法调用语句
不可以在这里定义方法
按顺序被执行
与有效范围、声明的位置有关
局部变量
程序片中声明的变量
是各个线程(用户)共享的变量,任何一个线程对JSP页面成员变量操作的结果,都会影响到其他用户
P22
多线程处理程序片的特点
同一时刻只能有一人访问这个变量/方法,以保证信息安全
synchronized修饰
所以可以把Java程序片分割成几个,在这些程序片之间插入其他标记元素
JSP表达式可以直接把Java的表达式结果输出到JSP页面中
表达式的值由服务器计算
因为网页中显示的文字都是字符串,所以表达式的最终运算结果将被转化为字符串类型
在JSP页面中,表达式的值表示成【字符串】的形式,发送给浏览器
插入可求值的表达式
不可插入语句
“<%=”是一个完整的符号,“<%” 和“=”之间不能有空格,表达式结尾处不加分号
Java表达式(JSP表达式)
用户能看到
用户的浏览器负责显示
HTML注释
用户看不到
JSP注释
注释
<%@ page 属性1=“属性1的值”%>
<%@ page 属性1=' 属性1的值 '%>
<%@ page 属性1=“属性1的值”属性2=“属性2的值”…%>
定义整个JSP页面的属性、值
双引号
单引号
多个属性
对整个JSP有效,与其书写的位置无关
<%@ page contentType=“text/html”%>
网页形式
默认值
<%@ page contentType=“application/msword”%>
当前浏览器要打开word文档
指当前是什么类型,拿什么去解析
通知用户,浏览器用怎样的编码解析收到的字符
附加属性charset
JSP页面用page只能为contentType指定一个值
contentType属性
<%@ page Encoding=“utf-8”%>
指编码类型
JSP页面用page只能为pageEncoding指定一个值
pageEncoding属性
<%@ page language=“java”%>
定义脚本语言
只能java
language属性
<%@ page import=“java.io.* ”, “java.time.LocalDate”%>
java.lang.*
javax.servlet.*
javax.servlet.jsp
javax.servlet.http.*
默认
引入Java运行环境提供的包中的类
某包中的所有类 / 一个具体的类
import属性
默认true
是否需要使用内置的session对象
session属性
<%@ page buffer=“8kb”%>
<%@ page buffer=“none”%>
指定out设置的缓冲区的大小/不适用缓冲区
不使用缓冲区
buffer属性
指定out的缓冲区被填满时,是否自动刷新
autoFlush属性
JSP能同时相应多个用户的请求
true
JSP同一时刻只能响应一个用户的请求
false
设置访问JSP页面是否是线程安全的
isThreadSafe属性
可以在JSP中使用方法getServletInnfo( ); 来获取info属性的属性值
<%@ page info=“we are students”%>
为JSP页面准备一个常用但可能要经常修改的【字符串】
info属性
具体某些属性
page
<%@ include file=“文件的URL”%>
如UTF-8
编码要和当前JSP页面一致
可访问/使用的
文件的URL:文件的名字
和JSP在同一Web服务目录中
文件的URL:子目录/文件的名字
在JSP页面所在的Web服务目录的1个子目录中
文件的要求
在JSP页面出现该指令的位置,静态嵌入一个文件,显得简洁
include
JSP指令标记
<jsp:include page=“文件的URL”/>
<jsp:include page=“文件的URL”> param子标记</ jsp:include>
表示方法
将文件的内容发到用户端,由用户端的浏览器显示
普通文本文件
Tomcat服务器执行,然后把执行结果发送到用户端
JSP文件
包含的文件的类型
JSP运行时才将文件加入(动态包含一个文件)
编译阶段就处理所需要的文件
文件的逻辑、语法依赖于当前的JSP
执行速度快
优点
把被包含的文件的内容放于包含文件中,组成一个文件后,编译运行
include指令标记
在JSP页面运行时才处理文件
文件的逻辑、语法独立于当前的JSP
可以用param子标记更灵活地处理所需要的文件
执行速度慢
缺点
把被包含的文件的运行结果放于包含文件运行产生的结果中,这2个文件各自编译运行
include动作标记
include指令标记、动作标记的区别
可以在JSP中使用【String 参数=request.getParameter(“参数”); 】来获取参数的值
有需要的还要将string转为double【double 参数的值=Double.parseDouble(参数); 】
<jsp:param name=“参数” value=“<%=参数的值 %>”/>
以“名字-值”对的形式为其他标记提供附加信息
不能独立使用
param
<jsp:forward page=“要转向的页面”/>
<jsp:forward page=“要转向的页面”> param子标记</ jsp:forward>
从该指令处停止当前页的执行,转向指定的JSP页面
使用forward动作标记转向后,尽管看到了转向后的页面的效果,但浏览器地址栏中显示的仍然是【转向前的JSP页面的URL地址】
forward
useBean
JSP动作标记
JSP语法
和JSP文件很类似,可以被JSP页面动态调用,实现代码的复用,但不希望别人访问
扩展名“.tag”的文本文件
结构
某个Web服务目录下的JSP页面准备调用一个Tag文件,那么必须在该Web服务目录下
一个Tag文件必须保存到tags目录/其下的子目录中
web服务目录 \\ WEB-INF \\ tags
Tag文件所在的目录
<% @ tag pageEncoding = \"utf-8\" %>
Tag文件的编码
Tag文件的保存
Tag文件
某个web服务目录下的Tag文件只能由该Web服务目录中的JSP页面调用
1个Tag文件对应1个Tag标记
Tag标记的名字和Tag文件的名字一致
全体Tag标记
自定义标记库(标记库)
<Tag 文件的名字 />
<Tag 文件的名字 > 其他内容(标题内容) </Tag 文件的名字 >
Tag标记与Tag文件
<% @ taglib tagdir = \"标记的位置\" perfix=\"前缀\" %>
这之前要用taglib指令引入标记库
<computer : oddNumberSum / >
JSP页面通过用Tag标记来调用1个Tag文件
Tag标记的使用
Tag标记
Tag文件、标记
为了简化开发,JSP内置了一些可以直接在脚本和表达式中使用的对象
不用声明就可以在JSP页面的Java程序片和表达式部分使用
封装了用户提交的信息,使用该对象可以获取用户提交的信息
接口:描述基本的动作(吃饭、睡觉)
实现了ServletRequest接口类的一个实例
<form action = \"请求的JSP/servlet\" method=get | post> …… 各种提交手段…… <input type = \"xxx\" name=\"xxx\" value = \"xxx\" size=6 /> …… 提交键…… <input type = \"submit\" id=\"tom\" name=\"submit\" value = \"提交\" /></form>
双引号、单引号中不能有空格
单击submit提交键向当前页面提交信息
<form action = \" \" (或单引号)method=get | post> 提交手段</form>
通常用HTML的form表单请求访问服务器的JSP页面(/servlet),并提交必要信息给所请求的JSP页面(/servlet)
String sideA = request.getParameter( \"input里的name\" );
request获取用户提交的信息
request.setCharacterEncoding( \"utf-8\" );
处理汉字信息
P66
常用的方法举例
提交的信息会在提交的过程中显示在浏览器的地址栏中
get
提交的信息不会显示在浏览器的地址栏中
post
method属性取值
文本框的名字为boy
单击submit提交键向服务器JSP页面提交信息
<input type = \"text\" name=\"boy\" value = \"ok\" size=6 />
文本框
列表
<textArea name=\"boy\" id=\"xxx\" rows=3 cols=50 > <% = content (之前定义了的字符string) %></textArea>
文本区
提交手段(中间那部分)
request.getParameter(\"boy\");
JSP页面可以让request.getParameter(String s)方法,让参数s的取值是input里的文本框的名字“boy”,获取该表单通过文本框提交的value文本信息
< input …/ >
< select …></ select>
< option …></ option>
< textArea …></ textArea>
子标记,实现文本框、下拉列表、滚动列表
<form action = \"请求的JSP/servlet\" method=get | post> …… 各种提交手段…… <input type = \"xxx\" name=\"xxx\" value = \"xxx\" size=6 /> …… 提交键…… <input type = \"submit\" id=\"tom\" name=\"submit\" value = \"提交\" /></form>
form标记
指定form表单中数据的输入方式、提交键
没有开始标签、结束标签
空标记
request获取value的初始值
若value没有指定,则为“”
用户没有在text输入任何信息,就提交
<input type = \"text\" (指定的名字)name=\"xxx\" (初始值)value = \"xxx\" (text的长度)size=\" 5\" (对齐方式)algin=\"left\" (text可输入的最多字符)maxlength=\"9\" />
文本框text
<input type = \"radio\" (指定的名字)name=\"xxx\" (初始值)value = \"xxx\" (对齐方式)algin=\"left\" (验证是否被选上)checked=\"ok\" />
如果radio的name取值相同,那么同一时刻只能有一个被选中
单选框radio
如果radio的name取值相同,那么同一时刻可有多个被选中
复选框checkbox
用户输入的信息会用“*”显示,防止他人偷看口令
口令框password
input没有可见的输入界面,form表单会将value的值提交给所请求的页面
隐藏hidden
单击提交键后,form表单请求的页面才有机会获取form表单提交的各个数据
一个form表单至少包含一个提交键
提交键sumbit
<input type = \"reset\" value = \"重置\" />
重置键reset
……
“aaa”(GUI对象)
request通过name指定的名字“xxx”来获取 \"aaa\" 中提交的数据
<input type = \"aaa\" name=\"xxx\" value = \"xxx\" />
input标记
创建一个下拉式列表、滚动列表
定义
<select id=tom name=\"myName\" size=\"正整数\"> <option value = \"item1\">文本描述</option> <option value = \"item2\">文本描述</option> ……</select>
option是select的子标记
select、option标记
能输入/显示多行文本的文本区
<textArea name=\"boy\" id=\"xxx\" rows=3 cols=50 > <% = content (之前定义了的字符string) %>或文本描述</textArea>
textArea标记
<style> #textstyle{ font-family:宋体;fonnt-size=18;clor:blue }</style>
style样式标记
以行列形式显示数据,不提供输入数据功能
<table border = \"边框的宽度\"> <tr width = \"该行的宽度\"> <th width = \"单元格的宽度\">单元格中的数据</th> …… <td width = \"单元格的宽度\">单元格中的数据</td> </tr>……</table>
table标记
处理HTML标记
<a herf = \"example4_9_receive.jsp ? id=A1001&price=88\"> 购买 </a>
String idStr=request.getParameter(“id”);
获得超链接传来的参数
处理超链接
request对象
P79-80
动态响应contentType属性
用户访问一个页面时,会提交一个HTTP请求给Tomcat服务器
HTTP文件头
Tomcat服务器还是会把当前JSP页面执行完毕再重定向
但Tomcat不再给用户看当前页面的执行效果
重定向
response对象
(记录用户的信息)保存会话信息
用户首次访问JSP页面,Tomcat服务器会生成一个session对象
session对象调用相应的方法可以存储用户在访问JSP页面提交的各种信息
不同的用户的session对象不同
每个用户对应着一个session对象(用户的会话)
同一个用户在不同的Web服务目录中的session对象是互不相同的
session对象的id
因为session对象被分配了一个string类型的id,Tomcat服务器把id存放到用户浏览器的cookie中
用户端浏览器支持cookie,才可以保证在不同网页之间的session是相同的
通过向新的URL添加参数,把session对象的id传带过去
若不支持cookie,JSP页面可以通过URL重写来实现session对象的唯一性
String str=response.encodeRedirectURL(\"example4_13_b . jsp\");
<form action = <% = str %> method=post>
改为
将<form action = \"example4_13_b . jsp\" method=post>
session对象与URL重写
HttpSession session = request.getSession(true);
P164
使用session
session对象
P90-91
application对象
config、pageContext、out、page、exception
如 request、response、session、application、out
概念
JSP内置对象
基于Java语言
是Java类
通过封装属性、方法成为具有某种功能/处理某个业务的对象
不依赖平台
不是JSP内置对象
是一个可重复使用的软件组件
实现代码的重复利用
易编写、维护、使用
可以在任何安装了Java环境的平台上使用,无须重新编译
特点
javaBean(bean)
调用bean完成数据的处理
将有关处理结果存放到bean中
显示bean中的数据
JSP
public double getXxx( ){ return xxx; }
public void setXxx( double aaa){ xxx=aaa ; }
如果类的成员变量(bean的属性)的名字是xxx,为了获取/更改bean的值
类中定义的方法的访问权限都必须是public
类中必须有一个构造方法是public、无参数的
类的命名规则
编写、使用JavaBean
如包名为tom.jiafei,则建立WEB-INF\\classes\\tom\\jiafei
根据包名对应的路径,在WEB-INF\\classes目录下再建立相应的子目录
可以直接按照bean的包名把bean的源文件(Circle.java)保存在子目录
classes > javac tom\\jiafei\\Circle.java
classes > javac -cp servlet - api.jar tom\\jiafei\\Circle.java
用命令行进入父目录classes编译Circle.java
将创建bean的字节码文件,如Circle.class,复制到子目录中
P111
保存bean的字节码(.class)
<jsp: useBean id=\"bean的名字\" class=\"创建bean的类(要带有包名)\" scope=“bean的有效范围”/ >
<jsp: useBean id=\"circle\" class=\"com.servlet.Circle\" scope=“page” / >
使用动作标记useBean
使用(加载)bean
Tomcat服务器管理的pageContent内置对象中存在bean,就复制给JSP页面
没有查找到JSP动作标记要求的bean,就根据class指定的类创建一个bean,并添加到pageContent
修改了字节码文件,必须重新启动Tomcat服务器
bean的加载原理
访问的当前页面
有效范围
直到当前页面执行完毕
存活时间
尽管每个JSP页面的page bean的功能相同,但占用不同的内存空间
不同的
Tomcat服务器分配给每个JSP页面的page bean
当2个用户同时访问一个JSP页面时,一个用户改变自己的page bean属性,不会影响到另一个用户
不同的用户(浏览器)的page bean
page bean
请求的当前页面
只在当前页面有效,直到响应结束
存活时间略>page bean
一个页面改变,其他页面会受到影响
Tomcat服务器分配给每个JSP页面的~
当2个用户同时访问一个Web服务目录时,一个用户改变自己的request bean属性,不会影响到另一个用户
不同的用户(浏览器)的~
request bean
访问的Web服务目录下的各个页面
直到浏览器关闭
相同的
Tomcat服务器分配给每个JSP页面id相同的~
当2个用户同时访问一个Web服务目录时,一个用户改变自己的session bean属性,不会影响到另一个用户
1个用户在不同的Web服务目录的~
使用session bean,要保证用户端支持Cookie
session bean
当前Web服务目录下的各个页面
直到Tomcat服务器关闭
被访问该Web服务目录的所有用户共享
当2个用户同时访问一个Web服务目录时,一个用户改变自己的application bean属性,会影响到另一个用户
不用Web服务目录的application bean是不同的
application bean
外框
bean的有效范围、生命周期
创建、使用bean
获得bean的属性值,并将这个值用串的形式发送给浏览器
使用getProperty动作标记之前,必须要用useBean获得相应的bean
没有value属性!!!
<jsp:getProperty name =\"bean的id(哪个bean)\" property=“bean的属性”/ >
getProperty动作标记
设置bean的属性值
使用setProperty动作标记之前,必须要用useBean获得相应的bean
<jsp:setProperty name =\"bean的id\" property=“bean的属性” value =\"<% = expression %>\" / >
Integer.parseInt( String s )
转化到int
Float.parseFloat( String s )
转化到float
Java将字符序列转化为其他数值类型的方法
<jsp:setProperty name =\"bean的id\" property=“bean的属性” value =\"字符序列\" / >
value的值的类型要和bean的属性的类型一致
将bean属性值设置为一个表达式的值 / 字符序列
<jsp:setProperty name =\"bean的id的名字\" property=“*” / >
用form表单的【所有】参数值设置bean的相对应属性值
<jsp:setProperty name =\"bean的名字\" property=“属性名” param=\"参数名\" / >
不要求bean属性的名字必须和表单中某个参数名字相同
用form表单的【某个】参数的值设置bean的某个属性值
通过HTTP表单的参数值来设置bean的相应属性值
两种方法
setProperty动作标记
获取、修改bean的属性
JSP与JavaBean
获得向用户发送数据的字符流
PrintWriter.out = response.getWriter( );
HttpServlet的子类
Servlet类
保存到WEB-INF\\classes\\……
classes > javac -cp servlet-api.jar moon\\sun\\Example6_1.java
命令行语句(把源文件.java变为字节码.class)
P143类似于P111
字节码文件(.class)的保存
源文件、字节码文件
保存到WEB-INF子目录中
<? xml version=\"1.0\" encoding=\"utf-8\" ?>
XML声明
第一行
<web-app>
根标记
第二行
必须都不一样
servlet的名字
<servlet-name> hello </servlet-name>
用哪个类创建servlet
<servlet-class> moon.sun.Example6 </servlet-class>
子标记
<servlet>……</servlet>
servlet标记
下一行
与上面的name一样
<servlet-name> hello </servlet-name>
在浏览器访问时输入的名字
/xxxxxx
<url-pattern> /lookHello </url-pattern>
<servlet-mapping>……</servlet-mapping>
servlet-mapping标记
下一段
</web-app>
最后一行
对于webapps下的Web服务目录,如果修改web.xml文件,不用重启Tomcat服务器
不是webapps下的Web服务目录,如果修改web.xml文件,重启Tomcat服务器
编写部署文件web.xml
url-pattern ? 参数1=值 & 参数2=值……
浏览器输入url-pattern时,在后面加入参数及其值
request.getParameter(参数n)
被请求的servlet就可以用request对象获取参数的值
向servlet传递参数的值
多个用户同时请求一个servlet时,服务器为每个用户分别启动一个线程
Tomcat服务器通过读取web.xml创建并运行servlet
初始化一次,方法一个,服务多次
public void init( ServletConfig config) throws ServletException
init方法只被调用一次
第一次被请求加载时,创建一个servlet,servlet调用init方法完成必要的初始化工作
初始化servlet
封装了用户的请求信息
HttpServletRequest类的对象
响应用户的请求
HttpServletResponse类的对象
public void service( HttpServletRequest request HttpServletResponse response)
不同线程的service方法中的局部变量互不干扰
每个用户的每次请求都导致service方法被调用执行
新诞生的servlet再调用service方法响应用户的请求
public destroy()
当服务器关闭,调用destroy方法销毁servlet
过程
servlet的生命周期
servlet的工作原理
在浏览器输入url-pattern
通过JSP页面来请求
请求一个servlet的方法
如果url-pattern中写/lookHello,则JSP页面请求servlet时,必须写成lookHello
<form action = \"computer\"></form>
<form action = \"computer ? sideA=10.66 & sideB=26\"></form>
加入参数
如果url-pattern中写/computer
通过表单向servlet提交数据
<a herf = \"computer\"></a>
<a herf = \"computer ? mess=area&radius=<% =r %>\">文本</a>
通过超链接访问servlet
通过JSP页面访问servlet
处理用户的请求、作出响应
作用
doGet方法会把参数传到.xml中,在浏览器的地址栏可以看见参数的增加
补充协议service方法,就需要在Servlet类中重写doPost和doGet方法来响应用户的请求
检查HTTP请求类型(get、post等)
并在service方法中根据用户的请求方式,在service方法中对应地调用doGet和doPost方法
实际上service方法的功能
因此,可以不重写service方法来响应用户,直接继承service方法就行
doGet方法中调用doPost方法
doPost方法中编写处理过程
或
doPost方法中调用doGet方法
doGet方法中编写处理过程
如果不重写service方法,就要在Servlet类中重写doPost和doGet方法来响应用户的请求
servlet的重写方法的规则
doGet方法、doPost方法
不带请求
无法用request获取用户提交的数据
从当前JSP/servlet定向到另一个JSP/servlet
void sendRedirect(String location)
方法
带请求
可以用request获取用户提交的数据
对当前JSP/servlet的请求转发给另一个JSP/servlet
RequestDispatcher dispatcher = request.getRequestDispatcher(\" xxx.jsp 或 xxxServlet \");
得到RequestDispatcher对象
转发
步骤
用户可以看到【转发】到的JSP页面/ servlet 的运行效果;
看到的仍然是当前JSP页面的URL / servlet的url-pattern
但在浏览器的地址栏【看不见】forward方法转发到的JSP页面的地址/ servlet的【地址】
如果刷新浏览器,那么请求将是当前的JSP页面 / servlet
Tomcat会【立刻结束】当前servlet的执行
当servlet执行forward方法实施【转发】时
但Tomcat不给用户看当前servlet执行的效果
时,Tomcat服务器要把【当前的servlet代码执行完毕】才实施重定向(跳转)操作
后,servlet紧接着执行了return语句,那么Tomcat服务器会立刻结束当前servlet的执行
当servlet执行sendRedict方法
JSP只要和吃力转发的servlet打交道
可以让JSP和处理数据的servlet解耦
利于Web应用程序的维护
使用转发的好处
区别
重定向、转发
servlet的部署、创建与运行
Java Servlet基础
setXxx方法
getXxx方法
JavaBean
存储数据的对象
模型(bean,由servlet创建)
向控制器提交必要的数据、显示数据
视图(jsp)
携带请求信息
RequestDispatcher
不携带请求信息
具体的业务逻辑
控制器(servlet)
构成
<jsp:usebean id = \"名字\" class = \"创建bean的类\" scope=\"生命周期\"/>
JSP通过用useBean标记
(获得)创建的bean
JSP+JavaBean模式
由控制器servlet创建bean,并将数据存到bean
创建bean
<jsp: getProperty name = \"名字\" property = \"bean的属性\" />
JSP使用getProperty动作标记
显示bean的数据
BeanClass bean = new BeanClass( );
BeanClass类的某个构造方法创建bean对象
取的id名字可为“keyword\",值为bean的实例化
request.setAttribute(\"名字\
将bean放到HttpServletRequest对象request中,并指定查找bean的id
servlet创建request bean的步骤
<jsp : useBean id = \"名字\" class = \"save.data.BeanClass\" scope=\"request\"/>
可以用如下标记获得servlet创建的request bean
<jsp: getProperty name = \"名字\" property = \"bean的变量\" />
然后用相应的标记/Java程序片,显示request bean的数据
jsp页面
RequestDispatcher dispatcher = request.getRequestDispatcher(\"show.jsp\");
servlet请求一个jsp页面,显示jsp的数据
手段:转发
视图更新(servlet)
HttpSession session = request.getSession(true);
session.setAttribute(\"名字\
将bean放到HttpServletSession对象session中,并指定查找bean的id
servlet创建session bean的步骤
<jsp : useBean id = \"名字\" class = \"save.data.BeanClass\" scope=\"session\"/>
各个jsp页面
HttpServletResponse类中的重定向方法(sendRedirect)重定向到该页面
手段:重定向
getServletContext.setAttribute(\"名字\
将所创建的bean放到服务器ServletContext内置对象中,并指定查找bean的id
servlet创建application bean的步骤
<jsp : useBean id = \"名字\" class = \"save.data.BeanClass\" scope=\"application\"/>
bean的生命周期
MVC模式
模型的生命周期、视图更新
P185
MVC模式的简单实例
Java DataBase Connectivity(Java数据库连接)的简写
它是一套用于执行SQL语句的Java API,由一组用Java语言编写的类和接口组成,是Java程序访问数据库的标准规范
有了JDBC,开发人员无须为访问不同的数据库而编写不同的应用程序,只需要使用JDBC编写一个通用程序即可。
面向程序,供Java程序开发人员使用
提供获取数据库连接、执行SQL语句、获得结果等功能
数据库驱动(连接器)不在JDBC API中,需要额外单独下载
JDBC API
注册数据库驱动,供Java程序开发人员使用。
为应用程序装载数据库驱动,确保使用正确的驱动来访问每个数据源。
支持连接到多个异构数据库的多个并发驱动程序
JDBC Driver Manager
面向数据库,供数据库厂商使用。
提供了数据库厂商编写驱动程序时必须实现的接口
JDBC Driver API
体系结构
JDBC
创建若干个Connection对象放在一起
连接池简介
</Resource……>
连接池的名字
name
javax.sql.DataSource
类型
type
com.mysql.cj.jdbc.Driver
MySQL8.0则为
数据库连接器(数据库驱动的类)
driverClassName
url要小些
里面的“&”要写成“&”
设置连接数据库的URL
url
root
数据库用户名
username
password
连接池的大小
maxActive
maxIdle
minIdle
maxWait
配置文件 context.xml
建立连接池
Context context = new InitialContext( );
创建一个实现Context(上下文)接口的对象
Context contextNeeded = (Context) context.lookup(\"java:comp / env\");
让context去找Tomcat服务器曾绑定在运行环境的另一个Context对象
Context接口
DataSource ds = ( DataSource) contextNeeded.lookup( \"gxy\" );
得到连接池
Connection con = ds.getConnection( );
从连接池获得连接
不会关闭和数据库的TCP连接
仅仅只是把Connection对象返回到连接池
connection.close( );
将连接池返回连接池
使用连接池
P246
数据库
可以读取文件数据
也可以向文件写入数据
对一个文件进行读写操作,就创建一个RandomAccessFile对象
文件名
r(只读)
rw(读写)
mode
File的对象
file
两个构造方法
RandomAccessFile类
文件
WEB开发
0 条评论
下一页