第一章
第一节:
1> jsp概念和特点(理解)
2>MyEclipse工具使用,创建项目,配置tomcat,JDK,发布项目(掌握)
访问路径:http://(ip地址):7070/浏览器的访问路径/*.jsp
访问本地服务器的两种特殊方式:localhost 127.0.0.1
第二节:
1> JSP页面组成元素(掌握)
静态内容:HTML静态文本 js css
指令元素: 以“<%@ ” 开始,以“%> ” 结束。比如:<%@ include file = " Filename" %>
脚本元素:
(1)表达式:<%= .表达式.. %>
(2)scriptlet:<% ...任何的java代码.. %>
(3)声明:<%! ..声明常量或函数... %>
动作元素: 以“<jsp: 动作名 ” 开始,以“</jsp:动作名> ” 结束 比如:<jsp:include page=" Filename" />
2>JSP页面运行环境
设置环境变量(注意变量值之间用“;”隔开) (掌握)
JAVA_HOME CLASSPATH PATH TOMCAT_HOME
tomcat的目录结构(理解)
tomcat的主要配置文件
1)server.xml:全局配置文件,它提供组件的初始配置,并且描述了的结构和含义,使得能通过实例化组件完成启动以及自身构建。(掌握tomcat端口修改)
2)web.xml—Web应用程序通过该文件来描述其部署信息,以便tomcat服务器能够知道如何部署该应用程序 (了解)
3)tomcat-users.xml—该文件可以对用户进行管理(了解)
设置WEB服务目录
(1)直接将项目放在tomcat的webapps目录下
访问路径:http://localhost(ip):7070/项目名/*.jsp
(2)将项目放在硬盘其他任何位置,通过配置tomcat的server.xml文件,访问相应的项目
在server.xml文件的</Host>前添加:
<Context path="/浏览器的访问路径" docBase="磁盘的实际位置(如E:/myjsp)" debug="0" reloadable="true" />
【注意】修改了server.xml配置文件,需要重启tomcat服务器 web应用程序的目录结构: (掌握)
第三节
1> JSP执行过程(掌握)
如果是第一次访问JSP页面时过程如下:
(1)客户端发出Request (请求)到tomcat服务器,将请求转发给JSP 容器
(2)JSP Container 将JSP 转译成Servlet 的源代码(即java类)
(3)将产生的Servlet 的源代码经过编译后生成class文件,并加载到内存执行;
(4)把结果Response (响应)至客户端
如果是以后访问jsp那就直接调用内存中的jsp实例,把结果Response (响应)至客户端
2>JSP与Servlet关系(理解)
(1) jsp与servlet对应关系
(2)JSP是以SERVLET为基础
(3)如果是第一次访问.jsp文件被服务器翻译成一个对应的servlet类
第二章
第一节:JSP脚本元素(first文件夹)
jsp中插入java代码段的三种方式:(掌握)
1>表达式: <%= .表达式.. %>
【注意3点】
(1)”<%=“是一个完整的符号,符号中间不可有空格
(2) 不可以插入语句,不能在表达式后添加;号
(3)表达式必须能求值
2>scriptlet:<% ...任何的java代码.. %>
(1)类型:java允许的任何类型
(2)作用范围:局部变量,刷新后,数字不变,反复声明
(3)多个客户操作是否相互影响:不会影响到其它客户
3>声明:<%! ..声明常量或函数... %>
(1)类型:java允许的任何类型
(2)作用范围:全局变量,刷新后,数字逐步增加,并没有反复声明,只声明了一次。
(3)多个客户操作是否相互影响:会影响到其它客户
全局变量线程同步问题(理解)
第二节 jsp指令元素 (second文件夹)
1>Page指令 (理解)
用来定义整个JSP页面的一些属性和这些属性的值。属性值总是用单引号或双引号括起来。
Page指令格式
(1)用一个page指令指定多个属性的值
(2)用多个page指定为每个属性指定值
【注意】只有import属性可以设置多个值,其他属性只能指定一个值,import设置多个值时,用逗号分隔
page指令示例 pageDemo.jsp
errorPage属性示例 errorPageDemo.jsp error.jsp
2>include指令 (掌握)
用于在运行时将 HTML文件或 JSP页面嵌入到另一个 JSP页面
(1)include指令格式
<%@ include file = ”文件名” %>
(2)include指令包含,即静态包含的特点:
1,先包含后处理,生成一个servlet类
即当前jsp页面和插入的文件合并成一个新的jsp页面,然后jsp引擎再将这个新的jsp页面转译成java文件
2,生成一个class文件
3,不能传参
4,同一个request对象
includeDemo1.jsp include1.jsp
include指令,静态包含示例 分别说明了静态包含特点 3>taglib指令 (理解) 可以让JSP页面使用标签 <%@ taglib uri = ”标签库表述符文件” prefix = ”前缀名” %>
JSTL标签示例 taglibDemo.jsp
第三节 jsp动作元素
1>param动作
<jsp:param name=“名字” value=“指定param的值”/>
param标签与jsp:include、jsp:forward、jsp:plugin标签一起使用。 2>include动作 (掌握)
(1)include动作格式
<jsp:include page=“文件的URL”/>
或
<jsp:include page =“文件的URL”>
param子标记
</jsp:include>
(2)include动作包含,即动态包含的特点:
1,先处理后包含,生成多个servlet类
即能自动区分包含的文件是静态文件还是动态文件.
执行时,如果被包含的页面是静态的,则直接将内容包含进来,但是不处理
如果被包含的页面是动态的,则先执行,再把结果包含进来显示 2,生成多个class文件
3,能传参数
4,不同一个request对象,可以取得包含它的页面的参数,并且添加了自己的参数
includeDemo2.jsp include2.jsp include2.txt
include动作,动态包含示例 分别说明了动态包含特点
******乘法和除法计算器,课下练习,下节课讲 ******
3>forward动作 (掌握)
(1)forward动作格式
(2)forward作用实现页面跳转
可以用两种方法实现页面的转发,分别是forward和redirect 但是二者有区别:
1.forward是服务器内部转发,而redirect是通过客户端进行转发
2.如果用forward进行转发的话,客户端的url地址不会改变,但是如果用redirect的话,则url地址会改变
3.如果用forward进行转发,转发页面和被转发页面处于一个request请求内,而redirect不是。
forwardDemo.jsp forwardDemoTo.jsp示例,说明服务器转发和客户端转发区别
4>plugin动作 (了解)
5>useBean动作 (后面讲)
第三章
第一节 JSP内置对象 (掌握)
1>JSP内置对象概述
JSP隐式对象是WEB容器加载的一组类的实例,它不同于一般的JAVA对象那样用“NEW”去获取实例,而是可以直接在JSP页面使用的对象。
【注意】在JSP页面的JAVA程序片和表达式部分使用 声明部分不能用
2>JSP内置对象分类
(1)和输入输出相关:request、response、out
(2)和作用域通信相关:session、application、pageContext
(3)和servlet相关:page、config
(4)和错误相关:exception
3>JSP四种属性的保存范围 (JSP执行时,可以向容器中保存的对象的保存范围)
(1)设置属性和取得属性方法
setAttribute("参数名","参数值");
getAttribute("参数名");
(2)四种范围
page范围:只能在当前页面取得数据
示例: pageContextDemo1.jsp pageContext1.jsp
request范围:
示例: requestDemo1.jsp request1.jsp request11.jsp session范围:
示例: sessionDemo1.jsp session1.jsp session11.jsp application范围:
示例: applicationDemo1.jsp application1.jsp
第二节 request对象
1>功能一 接收客户端请求参数 中文乱码处理, get和post提交方式区别
(1)接收客户端请求参数 (传参方式:form表单数据,param标记数据,url请求重定向参数)
String var=request.getParameter("属性名"); //获取单值的表单元素内容
String var[]=request.getParameterValues("属性名"); //获取多值的表单元素内容
(2)中文乱码处理两种方式:
方式一: 将信息用ISO-8859-1重新编码,把编码放到字节数组中,最后把字节数组再转换成字符串
写成两行代码:
byte b[]=username.getBytes("ISO-8859-1");
username=new String(b,"UTF-8");
写成一行代码: username=new String(username.getBytes("ISO-8859-1"),"UTF-8"); 方式二:调用request对象方法设置统一字符编码 request.setCharacterEncoding("UTF-8");
【注意】:方式二只对post有效,放在getParameter之前才有效
(3)get和post提交方式区别
<1>GET提交的数据会在地址栏中显示出来 POST提交,地址栏不会改变
<2>Get传输的数据有大小限制,不同的浏览器对URL的长度的限制是不同的。如果传递大数据,则无法使用 POST提交没有长度要求
<3>Get安全性低,Post安全性高
示例:requestDemo1.jsp request1.jsp
(4)获取客户端请求参数名 (了解)
Enumeration enu=request.getParameterNames();//获取请求参数名集合 示例:requestDemo4.jsp request4.jsp
2>功能二 保存request范围的属性值(掌握 见第一节)
3>功能三 请求转发(服务器内部转发 功能同forward)(掌握)
request.getRequestDispatcher("转向的页面url").forward(request,response);
【注意】:这里的URL可以为相对路径,如果URL开始为“/”,则认为它是相对于当前WEB应用程序的根目录。
示例:requestDemo2.jsp request2.jsp
4>request常用方法 (了解)
示例:requestDemo3.jsp
第三节 response对象 out对象
response对象功能
1>功能一 设置响应头信息
(1)方式一:调用response对象方法
response.setHeader("refresh",1); //设置本页面每秒刷新一次
reponse.setHeader("refresh","5;url=转到页面的url");//5秒后刷新到要转到的页面
(2)方式二:meta标签
<meta http-equiv="refresh" content="1">
<meta http-equiv="refresh" content="5;url=转到页面的url">
示例:responseDemo1.jsp response1.jsp
2>功能二 请求重定向,即客户端跳转
response.sendRedirect("转到页面的url");
response.sendRedirect("转到页面的url *.jsp?参数名1=参数值1&参数名2=参数值2"); //地址重写传参
回顾:请求转发和请求重定向区别,即服务器端跳转和客户端跳转区别。
示例:responseDemo2.jsp response2.jsp
3>功能三 设置contentType类型
response.setContentType("application/msword;charset=GB2312");
空指针异常处理方式
(1)方式一:str不为空时,再执行
(2)方式二:str为空时,赋默认值
(3)方式三:代码修改,用字符串调用equals,字符串本身是一个匿名对象,所以永远是一个实例化对象.即使str为空,也没关系
示例:responseDemo3.jsp
out对象功能
1>输出信息到页面
out.print(输出的内容)可以输出各种数据类型 (常用)
out.Write(输出的内容)只能输出和字符相关的东西
示例:outDemo.jsp
第四节 sesion对象 cookie
1>什么是会话,保存会话数据的两种技术
会话概念:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
保存会话数据的两种技术:session cookie
2>session对象的主要功能保存用户信息
(1) 获取sessionID session长度;判断是不是一个新的session
session.getId() isNew()
(2) 保存session范围属性(掌握 见第一节)
用户登录站点中增加session,保存用户信息,防止用户非法登录系统 login.jsp --登录界面
loginControl.jsp --验证界面
welcome.jsp --欢迎界面
logout.jsp --注销界面
(3) 设置session有效时间
session.setMaxInactiveInterval(保存时间);
【注意】:这里的时间单位为s 默认在WEB.XML中配置30分钟
3>cookie对象 类:javax.servlet.http.Cookie
(1) cookie创建,增加
创建Cookie:Cookie cookie=new Cookie("cookie名","cookie值"); 添加cookie到客户端:response.addCookie("cookie名");
示例 cookieDemo1.jsp
(2) cookie获取服务器端获取
Cookie:Cookie [] cks=request.getCookies();
【注意】实际上客户端的cookie是通过http协议头信息发送到服务器端上的 示例 cookieDemo2.jsp
用户登录站点中增加cookie,保存用户信息,两周内自动登录
cookie文件夹下
login.jsp --登录界面
loginControl.jsp --验证界面
welcome.jsp --欢迎界面
logout.jsp --注销界面
cookie文件存放路径:C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies
工具,隐藏受保护的文件系统前面的勾去掉,就能看到cookie文件夹了。
4>session 和 cookie区别
session和cookie都可以用于跨页面保存数据,区别如下:
(1)存放位置 session服务器端;cookie客户端
(2)安全性 session安全性高;cookie安全性低
(3)网络传输量 session保存在服务器端不需要传输;cookie通过网络在服务器端和客户端传输
(4)生命周期 session间隔的(19分钟访问,生命周期重新开始)另外关机会造成session生命周期结束;cookie累计的,关机对cookie生命周期无影响
第五节 application pageContext page config
1>application对象的主要功能保存公共信息
(1)功能一:设置application范围属性 (掌握 见第一节)
(2)功能二:获取工作目录的真实路径(掌握)
application.getRealPath("/")
getServletContext().getRealPath("/")
示例:applicationDemo.jsp
2>pageContext对象主要功能保存page范围值
(1)功能一:设置page范围属性 (掌握 见第一节)
(2)功能二:通过pageContext可以获取其他的隐式对象(了解)
示例:pageContextDemo.jsp
3>page对象 (了解)
4>config对象读取初始化配置参数
web.xml中配置servlet参数
示例:configDemo.jsp web.xml
5>exception对象,处理异常 (了解)
示例:exceptionDemo1.jsp exceptionDemo2.jsp
第四章
第一节 javaBean特点,编写,调用方式
1>javaBean概念特点
javaBean是一种特殊的java类(实体类)
特点: 1.类必须是具体的公共的: public class ...
2.具有无参的构造方法
3.类中属性私有,提供公有的get/set方法
2>如何编写javaBean
(1)编写javabean必须满足上面特点
补充:java命名规范
包命名:全部字母小写
类命名:单词的首字母大写
属性名称:第一个单词的首字母小写,之后每个单词的首字母大写:userName
方法命名:与属性名相同:public void setUserName()
常量命名:全部单词大写:public String DBDRIVER="INSPUR"
构造方法特点:
名称与类名相同
不含返回值,不能在方法中用return语句返回一个值
构造方法只能用new运算符调用
set/get方法命名规则:
属性首字母大写,在属性名称前面加上set/get
对于boolean类型成员变量,允许用is代替get
示例:com.inspur.bean Student.java
3>javabean调用 (1)调用方式一:与其他类一样,通过new关键字创建对象 示例:studentBeanDemo1.jsp (2)调用方式二:使用动作标记<jsp:useBean>来加载bean <jsp:useBean>动作: 作用:在指定的作用域内创建javaBean类的对象 特点:先在指定作用域内查找对象,找到直接返回,否则创建新的对象 <jsp:useBean id="实例化对象名称(唯一)" class="包.类" scope="(对象的
作用域即使用范围)page|request|session|application" />
<jsp:setProperty>动作
作用:设置javaBean对象的属性:
<jsp:setProperty name="对象名(和useBean的id相对应)" property="属性名(和javaBean的某个属性名一致)" value="属性值" />
<jsp:getProperty>动作
作用:获取javaBean对象的属性
<jsp:getProperry name="对象名" property="属性名" />
示例:studentBeanDemo2.jsp
第二节
1><jsp:setProperty>动作三种形式:
作用:设置javaBean对象的属性:
(1)用具体的值给javaBean的属性设置值:通过设置setProperty动作value属性 <jsp:setProperty name="对象名(和useBean的id相对应)" property="属性名(和javaBean的某个属性名一致)" value="属性值" />
【注意】用表达式赋值时,传值类型要与bean中属性类型一致
(2)用参数给javaBean的属性设置值:通过设置setProperty动作设置param属性 <jsp:setProperty name="对象名(和useBean的id相对应)" property="属性名(和javaBean的某个属性名一致)" param="参数名" />
(3)属性值自动匹配,用*号自动给javaBean的所有属性赋值
【注意】属性名和参数名要一致
<jsp:setProperty name="对象名" property="*" />
<!-- setProperty 方式一:用具体的值给javabean属性设置值 value="属性值" 表达式的值的类型要与bean中类型一致,并且要写在引号中-->
<jsp:setProperty name="studentBean" property="userName" value="zhangsan"/>
<jsp:setProperty name="studentBean" property="password" value='<%=request.getParameter("password") %>' />
<jsp:setProperty name="studentBean" property="age" value='<%=Integer.parseInt(request.getParameter("age")) %>' />
<jsp:setProperty name="studentBean" property="flag" value="true" />
<!-- setProperty 方式二:用参数给javabean属性设置值 param="参数名"--> <jsp:setProperty name="studentBean" property="userName" param="userName"/>
<jsp:setProperty name="studentBean" property="password" param="password"/>
<jsp:setProperty name="studentBean" property="age" param="age"/> <jsp:setProperty name="studentBean" property="flag" param="flag"/>
<!-- setProperty 方式三:属性值自动匹配 property="*" -->
<jsp:setProperty name="studentBean" property="*"/>
2>javabean四种作用范围
page范围:属性只保存在当前页面,如果跳转到其他页面,则需要重新实例化。 request范围:属性只保存在服务器跳转中;
session范围:属性保存在一次会话中,可以使用任何方式连接到其他页面,则此对象只实例化一次
application范围:属性公有,此对象在整个服务器上只实例化一次。因为application会占用资源,尽量少用
示例:com.inspur.bean Student.java
login.jsp loginControl.jsp welcome.jsp
第五章
第一节 EL表达式简介,作用,获取数据
1>EL简介: expression language,表达式语言
语法:${表达式 }
2>EL表达式作用
获取数据 执行运算 利用el的隐式对象,获取web开发常用的对象 调用java方法
(1) el获取四个范围的数据
获取四个作用域page、request、session、application中的数据:
${pageScope|requestScope|sessionScope|applicationScope.属性名}
${对象名.属性名}
示例: elDataDemo1.jsp
(2)el获取复杂对象的数据,javabean, 数组,list,map
形式:${..Scope.对象名.属性名}或 ${..Scope.对象名["属性名"]}
示例: elDataDemo2.jsp
.和[]区别:
能用点的地方都可以使用[]代替,[]支持特殊字符写法,点不可以
(1)数字不能用.点
(2)特殊字殊不能用点
第二节 EL表达式作用
1>el 执行运算(算术运算,关系运算,逻辑运算,空运算)
算术运算符 5个; 关系运算符 6个;逻辑运算符 3个; 空运算,判断是否为空 empty
【注意】在EL运算中没有字符串运算,运算时将内容转换为数字
示例: elDemo1.jsp
2>el获得web开发常用对象
EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
(1) pageContext 对应于JSP页面中的pageContext对象(了解)
示例:elPageContextDemo.jsp
(2)el表达式中获取page、request、session、application四个作用域数据的对象: (掌握)
pageScope requestScope sessionScope applicationScope
分别获取page域, request域, session域, application域
示例: elDataDemo1.jsp 见第一节
(3)param: 获取单值的表单参数(掌握)
(4)paramValues 获取多值的表单参数 (掌握)
示例: elParamDemo.jsp elParam.jsp
(5)header 获取请求头部信息(了解)
(6)headerValues 获取请求头部信息,存放在字符串数组中(了解)
(7)cookie 获取cookie数据 (掌握)
测试cookie时,例${cookie.key}取的是cookie对象,如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}
示例: elCookieDemo.jsp
(8)initParam 获取web应用初始化参数
【注意】获取的参数为全局的初始化参数 配置初始化参数:WEB-INF/web.xml
<context-param>
<param-name>username</param-name>
<param-value>zhangsan</param-value>
</context-param>
示例: elInitParamDemo.jsp
3>EL调用JAVA方法
(1)使用el函数库(sun公司提供的针对字符串处理的函数,放在JSTL开发包) 使用步骤:
1)导入jstl开发包
方法一:项目名点右键-->选择MyEclipse-->Add JSTL Libraries...选项
方法二:新建项目时,选择JSTL Support 添加JSTL开发包
2)jsp文件导入标签描述文件
<%@taglib uri="/jsp/jstl/functions" prefix="fn"%>
示例: elFnDemo.jsp
(2)自定义函数 (了解)
EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。 步骤:
1)编写静态方法 (编写计算年龄方法 com.inspur.el Utils.java )
2)编写tld标签描述文件,在文件中注册成为EL函数 (WEB-INF/utils.tld)
3)在页面内容引用自定义EL函数 格式:${prefix:method(params)}
示例: elMyUtilDemo.jsp Utils.java utils.tld
第六章
第一节 JDBC简介,编程步骤
1>jdbc的概述 (理解)
JDBC 全称:(Java DataBase Connectivity) Java数据库连接,它是SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。
2>如何开发JDBC (掌握)
(1)使用sun 提供官方 JDBC接口 API
官方API位于JDK两个包里面
java.sql 和 javax.sql (javax 是 java 扩展包)
(2)导入相应JDBC的数据库实现(即数据库驱动)
jdbc驱动:是由不同的数据库厂商提供的
驱动本质是JDBC接口的实现类
3>JDBC编程步骤 (掌握)
(1)加载数据库驱动
Class.forName("包名+驱动类名");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
(2)建立与数据库连接
Connection
conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=inspur","sa","test123!");
(3)操作数据库
1)创建statement对象
Statement stmt = conn.createStatement();
2)通过statement向数据库发sql语句
ResultSet rs = stmt.executeQuery(sql);
3)遍历结果集
while(rs.next()){ //有数据,循环遍历
System.out.println("userid="+rs.getInt(1)+"
username="+rs.getString(2));
}
(4)释放资源
rs.close();
stmt.close();
conn.close();
【注意】释放资源的顺序和开资源的顺序正好是相反的
示例: jdbcUserDemo1.jsp jdbcUserDemo2.jsp
第二节:JDBC常用API
1>DriverManager
(1)DriverManager作用:管理驱动和获取数据库连接
DriverManager.getConnection(url, user, password);
【注意】DriverManager可以管理多个驱动,每个驱动通过URL标识 另外在开发中不要用registerDriver,用class.forName来加载驱动。
(2)URL 包括:协议、子协议、服务器ip、服务器端口、数据库 (掌握) 常见url写法
Oracle ---- jdbc:oracle:thin:@localhost:1521:inspuruptec
SQLServer---jdbc:sqlserver://localhost:1433;DatabaseName=inspuruptec 2>Connection作用:表示一个数据库的连接
功能一: 获得发送sql语句的对象 (掌握)
createStatement() 返回 Statement ----- 传输普通sql 编译执行
prepareStatement(sql) 返回 PreparedStatement ----- 传输预编译SQL语句,提交性能 解决SQL注入问题
prepareCall(sql) 返回 CallableStatement------- 调用存储过程(数据库内部程序) 功能二: 管理数据库事务
3>Statement 可以将sql 语句发送到数据库
功能一 执行单句SQL (掌握)
executeUpdate(String sql) 返回 int 受影响行数 : 执行 insert 、update、delete executeQuery(String sql) 返回 ResultSet 结果集 : 执行 select
execute(String sql) 返回 boolean : 可以执行任何sql 语句
【注意】execute方法:sql执行结果如果ResultSet 返回 true, 如果不是ResultSet 返回 false
示例: statementDemo1.jsp
功能二 支持批处理,连续执行多条SQL (了解)
4>ResultSet 结果集 (掌握)
通过 rs.next 遍历结果集
while(rs.next()){
// 根据 下标或者列名 获得每列数据
数据库类型 与 java类型对应关系
int rs.getInt()
varchar rs.getString()
bigint rs.getLong()
double rs.getDouble
date rs.getDate()
time rs.getTime()
timestamp rs.getTimeStamp()
...
ResultSet 高级特性 --- 滚动结果集 (了解)
5>编写DBConnection工具类 (掌握)
com.inspur.jdbc.DBConnection.java //简化JDBC编程,提供重用代码的公共方法。
dbconfig.properties //数据库连接信息配置文件 为了程序可以连接任何数据库,将连接关键信息 写入配置文件
测试DBConnection工具类 通过JUnit工具编写测试用例
com.inspur.testcast.DBTest.java
第三节:JDBC常用API
1>prepareStatement接口 (掌握)
优点: (1)sql语句经过预处理,运行速度快
(2)可以有效防止SQL注入,安全性更高
实现步骤:
(1)创建数据库连接:conn=DBConnection.getConnection();
(2)编写sql,参数用?占位
(3)通过connection获得预编译Statement对象 PreparedStatement pstmt = conn.prepareStatement(sql); // 已经将sql 发送给数据库进行编译
(4)设置sql语句中? 对应值
pstmt.setXXXX(占位符编号,参数名);
(5) 执行sql
ResultSet rs=pstmt.executeQuery();
int count=pstmt.executeUpdate();
【注意】对于 PreparedStatement 或 CallableStatement,方法 executeUpdate() executeQuery()不能带参数
即一定不要传入sql ,因为使用预编译,sql已经在数据库编译
(6)判断结果:
功能一 执行单句SQL 与statement接口区别,对象创建,设置参数方法,参数类型,防止SQL注入
示例:
com.inspur.testcase.PstmtTest testPstmtAdd --测试PreparedStatement增加操作
com.inspur.testcase.PstmtTest testPstmtUpdate --测试PreparedStatement修改操作
com.inspur.testcase.PstmtTest testPstmtDelete --测试PreparedStatement删除操作
com.inspur.testcase.PstmtTest testPstmtQuery -- 测试PreparedStatement查询操作
功能二 支持批处理,连续执行多条SQL (了解)
2>prepareStatement防止SQL注入 (掌握)
方案一:通过用户名查询密码,与输入密码进行比较
方案二:用PreparedStatement实例 取代statement对象
另外:可以通过输入用户名和密码不允许包括特殊字符,防止SQL注入 用户登录系统验证 以及防止SQL注入
login.jsp
loginControl.jsp //通过statement向数据库发送SQL语句
loginControl1.jsp //方案一,防止SQL注入
loginControl2.jsp //方案二,防止SQL注入
loginControl3.jsp //方案一+方案二,防止SQL注入
logout.jsp
welcome.jsp
3>CallableStatement接口 (理解)
调用存储过程,调用语法格式,设置参数方法,参数类型,注册输出参数方法 示例: com.inspur.testcase.ProcTest testProcDemo1 -- 测试带in,out参的存储过程调用
【注意】对于 PreparedStatement 或 CallableStatement,方法 executeUpdate() executeQuery()不能带参数
4>ResultSetMetaData接口 结果集元数据 (了解)
5>使用JDBC进行批处理 两种方式的优缺点: (了解)
6>事务 JDBC中使用事务 控制事务的方法 (理解)
示例: com.inspur.testcase.TransactionTest demo1
第四节: tomcat数据源配置,封装工具类 (掌握)
配置tomcat数据源连接池
com.inspur.testcase.TomcatDataSource
WebRoot/META-INF/context.xml
tomcatDataSource.jsp
封装tomcat数据源连接池
com.inspur.jdbc.DBConnPool
第五节:JDBC开发用户管理系统
登录页面-->首页(管理用户,增加,查询用户,退出系统)
管理用户-->修改用户信息,删除用户信息
用户登录管理完善 界面美化 增加,删除,修改,查询
第七章
第一节 jstl简介
1>在jsp中使用JSTL标签步骤:
(1)在项目中导入JSTL的jar包
(2)在jsp页面中使用taglib导入标签库:<%@ taglib uri="/jsp/jstl/core" prefix="c" %>
2>表达式标签out,set,remove,catch
out标签 输出四个范围内属性值,提供默认值,对特殊内容进行转义
格式:<c:out value="输出的内容" default="默认值" escapeXml="是否忽略特殊字符" />
示例: out.jsp
set标签 给JSP四个范围定义的属性赋值, 给四个范围内已经存在对象属性赋值 格式:
给变量赋值:<c:set value="值" var="变量名" scope="变量存放的范围"/>
给对象属性赋值:<c:set value="值" target="对象名" property="属性名" />
示例: set.jsp
remove标签 删除四个范围内属性值,没有指定范围的话,则依次从page、request、session、application中查找并删除。
格式:<c:remove var="变量名" scope="变量存放的范围"/>
示例: remove.jsp
catch标签 取代传统try - catch代码块 --- 进行异常捕获
格式:<c:catch>可能发生异常的代码</c:catch>
示例: catch.jsp
第二节 流程控制标签,迭代标签,URL标签
1>流程控制标签
if 标签:取代传统if 条件判断
<c:if test="条件" var="存放结果的变量" scope="变量存放的范围" >
本体内容(java代码段、标签、纯文字)
</c:if>
示例:if.jsp
choose when otherwise标签 : 编写if--else if -- else if --- else 结构 --- 编译switch-case 结构
<c:choose>
<c:when test="判断条件">本体内容</c:when>
<c:when test="判断条件">本体内容</c:when>
....
<c:otherwise>内容</c:otherwise> </c:choose>
示例: choose.jsp
2>迭代标签
forEach标签:取代for(变量:集合) {} --- 变量数组、遍历list、遍历map 求1到100和
<c:forEach var="每次取出的变量" items="集合类或数组等对象">
本体内容
</c:forEach>
示例: foreach.jsp
forTokens 标签:按照制定分隔符,切割字符串,进行循环打印
<c:forTokens var="每次取出的变量" items="遍历的对象" delims="分隔符" > 本体内容
</c:forTokens>
示例: fortoken.jsp
3>URL操作
param标签:访问url时进行数据传递。结合import/rediret/url 三个标签一起使用 import标签:导入目标资源页面代码,导入到当前页面 功能类似<jsp:include>动态包含,区别:import标签可以包含其他项目中的文件
<c:import url="包含的页面url" context="/项目名"/>
示例: import.jsp
url标签: 完成URL重写 * 结合param进行url get方式中文编码
<c:url value="页面的url" context="/项目名" var="存放产生的url" scope="var的范围" />
示例: url.jsp
redirect 标签 : 实现请求重定向,作用和response.sendRedirect("url");一样 <c:redirect url="重定向的页面url" context="/项目名" />
示例: redirect.jsp
***** 重点 c:set c:if c:forEach
第八章
第一节: servlet简介,servlet编写步骤,servlet运行原理
1>什么是servlet (掌握)
Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序。
2>servlet实现方式 (掌握)
(1)实现servlet接口
需要实现init,sevice,destroy,getServletConfig,getServletInfo方法。
(2)继承GenericServlet类,需要重写service方法。
(3)继承HttpServlet类,需要重写doGet, doPost方法,这是目前用的最多的一种方法。 3>servlet编写步骤 (掌握)
(1)编写一个类,继承HttpServlet类,重写doGet, doPost方法
(2)在web工程中web.xml 配置文件中对Servlet进行注册
<servlet>
<servlet-name>servlet名字</servlet-name> <servlet-class>完整包路径+类名</servlet-class> <init-param> <param-name>参数名</param-name> <param-value>参数值</param-value> </init-param> </servlet> <servlet-mapping>
<servlet-name>servlet名字(和上面一致)</servlet-name>
<url-pattern>/虚拟访问路径</url-pattern>
</servlet-mapping>
示例: ServletDemo1.java web.xml配置servlet
4>servlet运行原理 (掌握)
5>servlet接收表单参数
示例:input.jsp InputServlet.java web.xml配置servlet
第二节:servlet生命周期 servlet自动加载
1>servlet生命周期 (掌握)
(1)初始化 服务器加载servlet对象时,执行init()方法进行初始化
默认init()方法只在第一次访问servlet时调用,并且只调用一次
(2)处理请求 初始化完毕,服务器调用service()方法响应客户的请求
每一次请求,都会调用service方法处理用户请求
(3)销毁 服务器调用destroy()方法销毁servlet对象
在服务器关闭或重启的时候调用destroy方法,销毁servlet
示例1:实现servlet接口
ServletDemo2.java
示例2:继承HttpServlet类
LifeCycleServlet.java
1) init方法作用:servlet对象初始化
【注意】父类GerericServlet中带参数初始化方法默认调用无参初始化方法。
如果子类重写了带参init(ServletConfig config) 方法,则不会自动调用无参init()方法。
2) service方法作用:解析客户端发来的HTTP请求为何种方式,根据请求方式,调用相应的doXXX方法。
doXX方法格式:
public void doXXX(HttpServletRequest request, HttpServletResponse response)
{
//方法主体
}
【注意】如果子类重写了service方法,则失去原来的作用。通常在servlet类中,只重写doGet、doPost方法,处理请求即可。
2>servlet自动加载 (掌握)
web.xml中配置<load-on-startup>0</load-on-startup>
3>Servlet虚拟映射路径三种配置方式 (了解)
(1)完全路径匹配 : 以/开始 例如:/demo1、/demo2、/aa/index.html ----- 不存在通配符*
(2)目录匹配 : 以/开始 使用通配符* 例如:/*、/aa/*、/bb/cc/* * 某个目录下所有资源
(3)扩展名匹配:不能以/开始 使用通配符 例如:*.do 、*.action ----- /*.do、/aa/*.action 错误的
课下练习:用户登录网站
Login.java LoginControl.java Welcome.java
第九章
第一节 ServletConfig ServletContext接口API com.inspur.servlet 包下
1> ServletConfig读取servlet初始化参数
(1)web.xml配置servlet初始化参数
<servlet>
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
</servlet>
(2)获取值方法
init(ServletConfig config);
config.getInitParameter("参数名");
getServletConfig().getInitParameter("参数名")
示例: ServletConfigDemo1.java
2> ServletContex应用
(1)应用一:读取WEB应用初始化参数,全局数据
1)web.xml配置ServletContext全局初始化参数
<context-param>
<param-name>参数名</param-name> <param-value>参数值</param-value> </context-param>
2)获取值方法
getServletContext().getInitParameter("参数名称");
示例: ServletContextDemo1.java
思考:ServletContext 与 ServletConfig 提供初始化参数不同 ??
(2)应用二:通过ServletContext对象实现数据共享 --统计站点访问次数 相当于application范围的属性
向ServletContext保存数据 setAttribute() ------- 相当于map.put
取得ServletContext中数据 getAttribute ---- map.get 这里取出数据是 Object 需要强制类型转换
示例:ServletContextCountDemo1.java
ServletContextCountDemo2.java
(3)应用三:利用ServletContext对象读取资源文件 --!!!!!!!!在web 工程读取文件必须使用绝对磁盘路径
示例:ServletContextDemo3.java
!!!!!!!!在web 工程读取文件必须使用绝对磁盘路径 D:\work\myclipse\work20120713\day5\1.txt
1.txt在工程根目录,不在WebRoot 中 --- 只有WebRoot 会被发布 ----
1.txt 不存在无法读取
4.txt 在src目录 --- src中所有java文件编译.class 保存WEB-INF/classes --- src中所有配置文件 会自动复制WEB-INF/classes --- 可以读取
file = getServletContext().getRealPath("/2.txt"); ---- 将网站根目录下2.txt 文件路径 转换为绝对磁盘路径
file = getServletContext().getRealPath("/WEB-INF/3.txt"); ---- 将网站根目录下WEB-INF目录下 3.txt 转换绝对磁盘路径
file = getServletContext().getRealPath("/WEB-INF/classes/4.txt"); ---- 获得网站根目录下WEB-INF下classes 下4.txt 绝对磁盘路径
如果读取文件 在WEB-INF/classes下
file = Demo9Servlet.class.getResource("/4.txt").getFile(); // 这里 / 代表classpath根目录
思考: ServletContext 与 ServletConfig 的联系和区别???
第二节 HttpServletRequest接口API com.inspur.request 包下 (request对象功能见
第三章第二节 request对象)
1>接收客户端请求参数 中文乱码处理, get和post提交方式区别 (掌握)
(1)接收客户端请求参数 (传参方式几种方式?form表单数据,param标记数据,url请求重定向参数)
String var=request.getParameter("属性名"); //获取单值的表单元素内容
String var[]=request.getParameterValues("属性名"); //获取多值的表单元素内容
非空校验
不合法 if (name == null || name.trim().length() == 0) name为null 获得 name为"" 不合法
合法 if(name!=null && name.trim().length() >0 )
(2)中文乱码处理两种方式:
乱码原因:客户端编码字符集与服务器tomcat解码字符集不一样 ---- 出现乱码
解决:
request.setCharacterEncoding 对请求体解码字符集设置 --- 处理post乱码问题
* setCharacterEncoding 必须位于 getParameter 之前
处理get乱码
1)、配置 conf/server.xml --- URLEncoding
<Connector port="80" ... URIEncoding="utf-8"/>
2) 手动转码
// iso 进行 url 编码
username = URLEncoder.encode(username, "ISO-8859-1");
// utf-8 解码
username = URLDecoder.decode(username, "utf-8");
简化 username = new String(username.getBytes("ISO-8859-1"),"utf-8");
* 结论:post处理乱码简单,get处理乱码复杂 ---- 尽量使用post提交方式 少用get
(3)get和post提交方式区别
<1>GET提交的数据会在地址栏中显示出来 POST提交,地址栏不会改变
<2>Get传输的数据有大小限制,不同的浏览器对URL的长度的限制是不同的。如果传递大数据,则无法使用 POST提交没有长度要求
<3>Get安全性低,Post安全性高
(4)获取客户端请求参数名 (了解)
Enumeration enu=request.getParameterNames();//获取请求参数名集合 getParameterMap--Map<String,String[ ]> key :name value: 多值
示例: WebRoot/request/login.jsp welcome.jsp
com.inspur.request LoginServlet.java
2>请求转发 在服务器内部通过request传递数据 (服务器内部转发 功能同forward)(掌握)
request范围设置值:request.setAttribute("参数名","参数值");
request范围取值:request.getAtrribute("参数名");
request.getRequestDispatcher("转向的页面url").forward(request,response);
【注意】:这里的URL可以为相对路径,如果URL开始为“/”,则认为它是相对于当前WEB应用程序的根目录。
示例: WebRoot/request/login.jsp welcome.jsp
com.inspur.request LoginServlet.java
3>request常用方法 客户请求信息获得(客户机,请求方式、请求资源路径) (了解) request.getRequestURL();//获取完整的请求路径:http://...
request.getRequestURI();//获取相对路径:/项目名/请求资源名
request.getContextPath();//获取项目名 /项目名
request.getMethod(); //获取http请求方式:默认get
request.getRemoteAddr();//获取客户端IP地址
示例:com.inspur.request RequestServletDemo1.java
4>获得头信息数据 (了解)
第十章
第一节: filter简介,filter实现,filter生命周期
1>filter简介
* Filter 对目标资源拦截,拦截HTTP请求和HTTP响应
* Filter 拦截本质上拦截url访问
2>filter实现 编写步骤
(1)编写类 实现Filter 接口 重写 init doFilter destroy 方法
(2)在web.xml中 注册过滤器,配置Filter拦截哪个web资源
<filter>
<filter-name>filter名</filter-name>
<filter-class>完整包路径+类名</filter-class>
</filter>
<filter-mapping>
<filter-name>filter名(和上面一致)</filter-name>
<url-pattern>/要拦截的web资源名称</url-pattern>
</filter-mapping>
3>filter生命周期 编写第一个filter 过滤hello.jsp
(1)初始化 在启动服务器时,Filter对象被创建,执行过滤器init 方法 init(FilterConfig) 方法
FilteConfig 作用和ServletConfig 类似---- 为过滤器提供初始化参数 *String getInitParameter(String name) 获得初始化信息
*public ServletContext getServletContext() 获得ServletContext对象 保存全局数据、读取web资源文件
(2)拦截请求 配置拦截后,访问hello.jsp --- 过滤器中doFilter方法获得执行
每请求一次,doFilter 过滤一次
* 没有配置过滤器之前,直接访问hello.jsp,当配置过滤器后,过滤器先于hello.jsp执行 ----- 此时FilterDemo1和hello.jsp组成 请求调用链FilterChain
* 拦截目标资源后,如果想目标资源执行: chain.doFilter ;如果不执行chain.doFilter 目标资源不会得到执行
doFilter(ServletRequest, ServletResponse, FilterChain )
WEB服务器每次在调用web资源之前,都会先调用一下filter的doFilter方法,
在doFilter方法内编写代码可达到如下目的:
1)调用目标资源之前,让一段代码执行
2)是否调用目标资源(即是否让用户访问web资源)
web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,
它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,
调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问,否则web资源不会被访问。
3)调用目标资源之后,让一段代码执行
(3)销毁 服务器调用destroy()方法销毁filter对象
destroy方法和Servlet的destroy 一样,在正常关闭服务器情况下执行
示例:WebRoot/first/hello.jsp
com.inspur.filter FilterDemo1.java
4>配置filter-mapping
(1)对同一web资源配置多个过滤器
当配置多个Filter 拦截hello.jsp 组成新的请求调用链 FilterDemo1 --- FilterDemo2 --- hello.jsp
* 过滤器链会根据mapping 的顺序组成 <filter-mapping> 顺序调用过滤器执行
(2)一个过滤器可以用来过滤多个web 资源
(3)关于url-pattern 写法和Servlet相同 有三种 完全匹配、目录匹配、扩展名匹配
* 在filter-mapping中存在 <servlet-name> 过滤Servlet时,可以通过url 和 name两种配置方式
<url-pattern>/hello</url-pattern>
<servlet-name>HelloServlet</servlet-name>
(4)<dispatcher> 标签及意义
配置在什么情况下、在什么调用方式下拦截目标资源
WebRoot/first/forward.jsp
WebRoot/first/hello.jsp
request,forward、include、error 四种方式,服务器调用资源方式 * 默认dispatcher值是request (请求时调用)
request ---- 在请求时过滤
forward ---- 在转发时过滤
include ---- 在包含时过滤
error --- 在错误页面跳转时过滤
如果想让过滤器执行,必须满足过滤方式 !!!! 如果forward、include 、error跳转时执行过滤 必须配置 dispatcher
示例:com.inspur.filter FilterDemo2.java
com.inspur.servlet HelloServlet.java
第二节: filter案例
用户登录网站
com.inspur.servlet LoginServlet.java
WebRoot/second/login.jsp welcome.jsp
1>案例一:关于编码集统一处理 解决中文乱码的过滤器
功能描述:编写 login.jsp 提供输入姓名表单,在Servlet获得表单数据,将数据打印页面上
分析:过滤器在目标资源之前执行 ,过滤器拦截多个目标资源,多个目标资源相同代码,抽取过滤器中 ----- 经常写代码放入过滤器
示例:com.inspur.filter EncodingFilter.java
2>案例二:验证用户是否合法登录,防止非法访问页面 过滤器链实例,双重验证 示例:com.inspur.filter IdentifyFilter.java
3>案例三:控制用户权限的过滤器 过滤用户的IP地址以进行访问控制
示例:com.inspur.filter IPFilter.java --固定IP进行访问控制 --读取配置文件中的IP地址进行访问控制
4>案例四:禁用缓存过滤器
分析:在web开发中,存在很多动态web资源,经常需要更新,为了保证客户端第一时间获得更新后结果,禁止动态web资源缓存
禁止缓存三个头信息
示例:com.inspur.filter NoCacheFilter.java
扩展案例:自动登陆过滤器 (了解)
com.inspur.demo AutoLoginFilter.java AutoLoginServlet.java
com.inspur.utils CookieUtils.java
com.inspur.utils DBConnPool.java
WebRoot/demo/login.jsp
WebRoot/demo/welcome.jsp
WebRoot/demo/inspur_ora.sql
功能:第一次登陆时,勾选自动登陆,关闭浏览器,再次打开,系统会自动进行用户已经登陆状态
AutoLoginFilter 在什么情况下需要自动登陆 ??
1、当前用户必须未登陆
2、存在自动登陆cookie信息
* 自动登陆过滤器,过滤页面一定不包括登陆和注册 页面
自动登陆案例问题:
1、 如果用户名中文怎么办?
insert into user values(1,'小红','123','user');
解决方案:保存cookie时进行手动编码 URL编码
生成cookie 时 new Cookie(URLEncoder.encode(用户名,"utf-8")); ------ AutoLoginServlet
读取cookie时, 对用户进行解码 URLDecoder.decode(用户名,"utf-8"); ---- AutoLoginFilter
2、 中文名和密码安全问题
* cookie 是一个文本类型文件,内容非常容易泄露
实际开发中数据库中密码和cookie中密码 都应该 加密后保存 ---- 单向加密算法 MD5
第十一章
第一节: JavaEE体系结构,如何编写DAO模式
1>JavaEE 体系结构 (了解)
Sun公司在JavaEE规范中定义了一套体系结构。
分成四层:客户端层,web层,业务层,数据持久层
其中: web层,业务层,数据持久层 都属于服务器 经典三层结构,或者叫三层模式
三层架构和MVC关系:
servlet 是C JSP 是V 业务层和数据层是M
2>DAO 模式
(1)JavaEE 设计模式 目的是解决 javaee 软件开发中的常见问题,和传统23种经典设计模式 不同的(工厂,单例等)
* DAO 模式就是 JavaEE(数据层)设计模式
DAO是一种JavaEE设计模式,位于数据层。
DAO封装了数据源增删改查操作,以简单接口API暴露业务层,业务层通过对象方式间接操作数据源。
(2)DAO(Data Access Object) 数据访问对象模式:
功能一 封装数据源CURD,提供简单API个业务层,
功能二 业务层可以通过对Java对象操作,间接操作数据源
(3) DAO模式中的对象 (掌握)
Business Object 代表数据的使用者
DataAccessObject 抽象并封装了对底层数据源的操作
DataSource 数据源
TransferObject 表示数据的Java Bean
3> 编写DAO步骤: (掌握)
(1)编写DataSource 数据源 见 第六章 JSP中使用数据库 第四节: tomcat数据源配置,封装工具类
示例:com.inspur.db DBConnPool.java
WebRoot/META-INF/context.xml
(2)编写 TransferObject --- 传输对象、也叫做值对象
User类用来存储user表中数据 四个属性,生成setter getter方法 * User类成员变量 和 users表字段一一对应
* VO对象 用来给业务层和数据层进行数据交互
示例: com.inspur.vo User.java
(3)编写DAO 程序 DataAccessObject
这是数据层DAO对象,功能:提供对数据源增删改查
* 提供操作数据源方法,方法参数和返回值 大多是TO对象
封装对数据源实现,让业务层对数据源不可见的(隐藏业务实现) 在企业中分工更加明确。
示例: com.inspur.dao UserDao.java
(4)编写Service 业务层对象 Business Object
模拟三层中的业务层。
* 业务层对象,提供数据对象给DAO 或者 从DAO查询数据对象
* DAO程序完成对数据源增删改查封装,业务层将对象传递数据层进行增删改查,接收DAO返回结果也是对象或者对象集合 ---- 简化业务层编程
* 业务层可以通过对象,操作数据源
示例: com.inspur.service UserService.java
4>测试DAO封装的增删改查方法:
WebRoot/testService.jsp
第二节:JSP模式发展过程 model1/model2
1>开发模式一 : JSP + JavaBean
* 适合开发业务逻辑不特别复杂的web应用
* JSP 负责javabean调度,负责页面显示
* JavaBean 封装数据,编写数据处理逻辑代码
优点:实现页面显示和业务逻辑处理分离
缺点:1.需要在jsp页面处理界面转向、调用javabeans代码(jsp页面嵌入大量java代码)
2.业务逻辑复杂时,jsp界面编写复杂,维护比较困难。 2>开发模式一 JSP+ JavaBean 综合案例计算器
1、浏览器直接和JSP进行通信
2、JSP获得客户端数据后,传递数据给JavaBean,由JavaBean来完成数据处理
3、JavaBean会将数据处理结果返回JSP,JSP根据JavaBean处理结果生成HTML页面,返回客户端
示例: com.inspur.model1.bean Calculator.java
WebRoot/model1/calculator.jsp
1、实现加减乘除
2、对form数据进行有效性校验 --- JavaScript
1) 在form 中添加 onsubmit="return checkForm();"
2) 编写函数
<script type="text/javascript">
function checkForm(){ ... } </script> 3) 通过isNaN 判断输入的是不是数字 3、除数不能为0 4、重大精度问题 --- java.math.BigDecimal * 除法 除不尽循环 ---- 精确 --- 保留位数
第三节:JSP模式发展过程 模式一优点,缺点 , 模式二优点,缺点
1>MVC设计模式
(1) MVC设计思想(架构设计模式)
按功能把对象划分为三个部分 , Model 模型 View 视图 Controller 控制器 目的: 耦合程度降至最低。
MVC是一种通过3个不同部分构造一个软件或组件的理想办法:
模型(Model):封装了最核心的功能,用于存储数据以及处理用户请求的业务逻辑。
视图(View):系统和用户交互的界面,向控制器提交所需数据,显示模型中的数据。
控制器(Controller):扮演调度者的角色,即控制器根据视图提出的请求判断将请求和数据交给那个模型处理,处理后的有关结果交给哪个视图更新显示。
(2) 在JSP技术中,“视图”,“模型”和“控制器” 的具体实现
模型(Model):一个或多个JavaBean对象,用于存储数据和处理数据;
视图(View):一个或多个JSP页面,为模型提供数据显示,JSP页面主要使用 HTML标记和JavaBean标记来显示数据;
控制器(Controller):一个或多个Servlet对象,根据视图提交的请求进行控制,生成JavaBean实例输出给JSP页面。
2>开发模式二 : JSP + JavaBean + Servlet
*V : JSP 负责页面显示
*M: JavaBean 封装数据、处理数据
*C: Servlet 负责JSP和JavaBean调度控制
----------- 现在互联网中大多使用该结构开发网站(满足MVC设计思想) 优点:按功能将对象进行分割,降低对象间的耦合程度,便于代码维护。 3>JSP 开发模式二:JSP + JavaBean + Servlet 综合案例: 用户登录注册
JSP 负责页面显示 JavaBean 数据封装和处理 Servlet 负责何时调用JavaBean 封装数据、处理数据,调用JSP显示页面
1、客户端请求 提交给Servlet
2、Servlet 将数据封装到JavaBean对象
3、Servlet 调用JavaBean对数据进行处理
4、JavaBean 将数据处理结果 返回Servlet
5、Servlet根据处理结果,选择传递数据给哪个JSP 显示
6、客户端响应 由JSP生成
com.inspur.model2.model User.java
com.inspur.model2.model UserModel.java
com.inspur.model2.servlet LoginServlet.java com.inspur.model2.servlet AddUserServlet.java WebRoot/model2/login.jsp WebRoot/model2/index.jsp WebRoot/model2/adduser.jsp WebRoot/model2/success.jsp WebRoot/model2/error.jsp
各章内容第二次总结
第一章 jsp简介
jsp概念和特点
安装配置JSP运行环境 配置文件修改:server.xml 端口号修改,虚拟目录配置 web应用程序的目录结构:
JSP页面的执行过程,即运行原理
第二章 jsp页面的各种构成元素
JSP 脚本元素的组成, jsp中插入java代码段的三种方式?
Jsp页面的指令有哪些?每个指令常用属性及作用?
Jsp页面的动作标记有哪些,作用是什么?静态包含和动态包含的区别是什么?
第三章 jsp内置对象
JSP四种属性的保存范围 page,request,session,application
Jsp隐式对象有哪些?掌握常用隐式对象(request,response,session,application)的作用、常用方法等?
第四章 javaBean
什么是javaBean 会用jsp+javaBean编程
jsp提供的三个动作标签作用,语法格式:useBean,setProperty,getProperty
第五章 el表达式
El表达式的隐式对象有哪些?
掌握常用隐式对象的用法和用途(pageScope,requestScope、sessionScope、applicationScope、param、paramValues)。
会使用el表达式从复杂对象中取值(javaBean,数组,list,map)?
第六章 jsp中使用数据库
开发JDBC程序需要具备的条件?
Jdbc连接数据库的步骤?每一步的代码?
涉及到的类或者接口以及相应的方法? Statement PreparedStatement CallableStatement 三者的区别?
第七章JSTL
Jstl标签库如何使用?核心标签库的分类以及每类中包含哪些标签?
重点掌握 c:set c:if c:forEach
第八章servlet概述
掌握servlet的实现方式? servlet编写步骤 Servlet部署文件,如何编写?每个标签的含义?
Servlet的生命周期?在生命周期中涉及到的方法,以及方法什么时候执行?HttpRequest、HttpResponse对象有谁负责创建?
第九章servletAPI
掌握ServletConfig和ServletContext的用法,及二者之间的区别和联系?
请求转发和请求重定向的定义及它们区别?
第十章 过滤器
过滤器编写步骤 过滤器部署文件,如何编写?每个标签的含义?
过滤器的生命周期?在生命周期中涉及到的方法,以及方法什么时候执行? 第十一章servlet MVC模式
JavaEE体系结构分几层?DAO位于哪一层?如何编写DAO模式
掌握JSP 两种开发模式 模式一:jsp+javabean 模式二:jsp+javabean+servlet
理解mvc设计模式,每个字母代表什么意思,每一层用什么技术实现?每一层的作用是什么?