第一章 jsp开发基础[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MypxrDJs-1646450536079)(E:\QQ\错误代码.png)]
什么是动态网页?
指的是能够通过不通的操作返回不同的功能及数据,具有交互功能
常见的开发模式:
B/S架构:浏览器和服务器
C/S架构:客户端和服务器
B/S架构的执行原理:
基于请求和响应的内容
客户端====》应用服务器====》数据库服务器
客户端《====应用服务器《====数据库服务器
1、用户输入地址,发送请求应用服务器
2、应用服务器获取数据需要访问(请求)数据库服务器
3、数据库服务器响应数据给应用服务器
4、应用服务器响应给客户端
5、解析数据并进行展示
URL:同一资源定位符
http://localhost:8080/项目地址
协议 主机端口号 目标资源
本地Tomcatlujing -->conf–>server.xml 修改port端口号信息
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
默认启动的路径为根目录:
http://localhost:8080/JSPChapter1_war_exploded/
能直接访问的数据为web下面的内容,也是项目根目录
项目目录结构
WEB-INF:存放了应用的资源信息,不可直接进行访问
WEB-INF/web.xml:相关当前项目的配置信息
WEB-INF/classes:存放编译后的文件
WEB-INF/lib:存放当前项目需要使用的jar文件(架包)
配置当前项目的欢迎界面
在Web/WEB-INF/web.xml添加
<!--配置项目的欢迎界面信息-->
<!--当前的XML文件是应用的配置文件,里面提供了能够发生改变的信息。-->
<welcome-file-list>
<welcome-file>index1.jsp</welcome-file>
</welcome-file-list>
什么是jsp?
java server pages 提供java服务页面(jsp)
jsp:就是在页面中嵌入java代码提供编译和执行
注意:使用方法嵌入,仅支持java代码
<%-- <%@ %>:当前页面的配置信息 page指令--%>
<%--contentType:当前页面类型 --%>
<%--language:当前页面使用的语言--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<body>
<%--使用for循环打印一百以内的偶数--%>
<%--java代码嵌入方式:
1、<% java代码 %> :只能执行的代码
2、<%= 变量 %> :只能用于输出
3、<%! java代码 %> :只能用于定义方法
--%>
<%
for (int i=0; i<=100; i++){
if (i%2==0){
%>
<%=i%>
<%
}
}
%>
</body>
<body>
<%
int num=0;
for (int i=1; i<=1000; i++){
if (i%2!=0){
num=num+i;
%>
<%
}
}
%>
1-1000以内的奇数之和:
<%=num%>
</body>
Jsp页面注释:
HTML页面注释:
JSP页面注释:<%-- --%>
JAVA脚本中注释:
单行:<% // %> 多行<% /**/ %>
HTML注释客户端可见,JSP注释不可见
容器:指能够存放一些你需要的东西,容纳之地
WEB容器:在运行整个项目中,所有的代码都加载到了服务器当中,也就相当于在服务器运行(容纳)整个项目。
使用WEB容器的执行过程:
使用WEB容器的执行过程:
1、用户发送请求至一能用服务器(Tomcat),包含需要请求的页面(index.jsp)
2、应用服务器会进行查找jsp页面资源,找不到资源报错404
3、找到了会把当前的jsp页面翻译为java文件
4、把java文件编译为可执行的class文件
5、执行class文件,相应给客户端
请求——》应用服务器(匹配资源)——》翻译为java文件——》编译为class文件——》执行响应
如果进行第二次请求,过程为:
1、发送请求至应用服务器,包含jsp页面(由于已经请求过一次)
2、直接找到已编译后的class文件
3、执行class文件,响应给客户端
注意:如请求后本地修改了代码,必须得重启服务器才能使用新修改的内容。
常犯的错误:
1、项目未部署
部署步骤(idea):
1、找到edit configurations
2、在右侧找到Deployment (确保有项目挂在上面)
3、点击右侧+号,选中第一个artifact进行部署
2、 404URL(地址栏)错误
1、检查地址栏资源是否能访问到项目中的web目录下的文件(有资源)
2、将根目录和web目录进行匹配访问(WEB-INF文件夹无法直接访问)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-id2Ol8OM-1646450536080)(file:///C:\Users\LENOVO\AppData\Roaming\Tencent\Users\2249065550\QQ\WinTemp\RichOle\663~~BB@A5CZW%[4N~[HAK4.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OUjPlpOV-1646450536081)(file:///D:\QQ消息\2249065550\Image\Group2\TM\XZ\TMXZ2LUUVTUO6DB}GG[X}E8.jpg)]
3、代码错误 500
服务器内部编写的代码问题(语法,变量值,逻辑,输出问题)
观看错误信息,定位到对应的代码文件中的行数进行拍错
4、无法显示该网页
检查Tomcat是否启动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NTZT8T8J-1646450536081)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\image-20200924103749332.png)]
=========================================================================================================
第二章 JSP页面交互 转发、重定向、会话
1、什么是内置对象?
由web容器创建出来的一组对象,可以直接进行使用。
2、常用的内置对象有哪些? (九个内置对象)
out 用于页面输出
request 用于页面数据请求
response 用于页面重定向
page 用于配置当前页面信息
session 用于web应用会话处理
application 用于整个应用数据处理
exception 用于应用异常处理
pageContext 应用上下文信息
config 配置应用程序信息
3、request对象的应用
作用:
用于获取用户请求参数,将请求并携带参数进行转发
常用方法:
//设置当前的编码格式
request.setCharacterEncoding("utf-8");
//根据表单的name属性获取值 根据name获取多个属性值
String user = request.getParameter("user");
String password = request.getParameter("password");
//根据表单name属性获取多个值(多选框)
String[] loves = request.getParameterValues("love");
//将请求参数转发至success.jsp界面 携带请求参数进行转发
request.getRequestDispatcher("success.jsp").forward(request,response);
//根据键进行设置请求参数值
request.setAttribute("user",user);
request.setAttribute("password",password);
request.setAttribute("love",loves)
request.setAttribute("键","值")
request.getAttribute("键"); 根据键获取值
将字符串进行转码:
String name=new String(变量.getBytes(“编码格式”),“转换的编码格式”);
解决服务器乱码问题:
进入Tomcat文件夹,找到conf下面的server.xml,找到
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
4、response对象 重定向响应对象
作用:重新设定方向,可以无需携带参数进行跳转,向客户端发送Cookie数据
执行原理:
二次请求
1、使用response对象进行响应时,会先请求到客户端
2、从客户端发送新的请求至响应的页面
常用方法:
将请求参数转发至success.jsp界面 携带请求参数进行转发
request.getRequestDispatcher(“success.jsp”).forward(request,response);
重定向到某个页面,是新的请求
response.sendRedirect(“success.jsp”);
5、转发和重定向的区别
1、执行原理不同
转发:主要是在服务器端进行数据资源的共享,一次请求共享所有数据资源,会在地址栏显示数据
重定向:服务器端进行相应给客户端,客户端重新发送新的请求,不会在地址栏显示任何数据,是一个新的地址,不共享任何数据
2、地址栏不同
转发只会显示请求的地址栏,不会显示跳转后的地址栏
重定向显示跳转后的新的地址栏
6、会话session
什么是会话?
在一段时间内,和服务器交互的过程
会话的常用方法:
注意:如何区别是否为同一个对话,session对象提供了一个方法可以进行获取当前会话session id来判断是否为同一次
String str = (String) request.getAttribute("test"); 设置会话参数,键值对
String str1=(String)session.getAttribute("test"); 获取会话参数,根据键获取
会话:基于浏览器窗口进行存货,浏览器关闭,会话消失
//设置会话有效时长 单位为秒 时间到后自动消失
session.setMaxInactiveInterval(30);
//获取会话有效时长
int s = session.getMaxInactiveInterval();
System.out.println("活动时长:"+s);
//会话直接失效
session.invalidate();
//获取session id
session.getid();
//移除会话参数
session.removeAttribute("");
应用场景:用户账户的登录后,账户信息设置到请求参数内,等待时间过长需要重新登录(会话有效时长),关闭浏览器需要重新登录(会话存活)
好处:在一定时间内无需再次登录,只需判断会话参数是否存在即可(服务器内部操作)
第三章 jsp页面交互2
javaWeb容器中的四大作用域
* page: 在当前整个页面生效 (当前页面)
* request: 在一次完整的请求中生效 (一次请求)
* session: 在一次会话过程中生效 (浏览器窗口)
* application: 在整个服务器运行期间生效 (服务器运行)
application:
常用方法:
setAttribute(“键”,Object); 以键值对进行保存数据
getAttribute(“键”); 通过键获取值(Object类型)
getRealPath(); 获取项目的真实路径
Cookie的应用:
Cookie是保存在客户端的一系列数据文本信息
作用:
1、简化登录
2、提供个人的个性化服务
3、对特定对象进行追踪
注意:Cookie的安全隐患比较大,不建议保存重要信息。
cookie的常用方法:
创建cookie对象保存数据信息
Cookie cookie=new Cookie("名字","值");
Cookie cookie=new Cookie("username","张三");
添加cookie对象进行相应到客户端
response.addCookie(cookie);
设置cookie的有效时长
cookie.setMaxAge(60*60*24*365);
对cookie重新赋值
cookie.setValue("值");
获取有效时长
int second=cookie.getMaxAge();
System.out.println(second);
获取Cookie对象,得到Cookie数组
request.getCookies();
c.getName(); 遍历获取name名称
c.getValue(); 遍历获取value值‘’‘
什么是javaBean
javaBean就是能够帮助程序进行封住数据和业务的实体类。
封装数据。
封装业务。
组成:
1、共有的get/set方法
2、共有的构造方法
3、属性私有化
4、共有类(public修饰)
创建JavaBean
类名 对象名 = new 类名(); 基本使用javaBean的方式
后期会使用配置文件xml进行创建javaBean
第五章 JNDI
预习:
什么是连接池?为什么要使用连接池
什么是JNDI?JNDI可以做什么?
使用JNDI获取资源的关键代码是什么?
在Tomcat中配置数据源所涉及的文件和标签是什么?
在分层模式中,三层指的是那三层?
1、如何在Tomcat中配置信息能够让所有的项目共享资源?
2、如何在Tomcat中获取BaseDao数据连接信息(JNDI)
3、如何在Web项目中搭建三层架构?
什么是JNDI?
java Naming and Directory Interface, java命名和目录接口
作用:将资源于服务进行关联 (将自己需要提供信息进行配置,为程序提供获取);
好处:
在java对象或资源之间松耦合(降低程序的依赖性),从而达到程序的资源配置以及维护。 可以在更大的范围,等多的应用之间共享资源
Tomcat部署资源:
1、在Tomcat目录文件夹下的conf/context.xml文件中添加
<Context>
<Environment name="tjndi" value="hello this is news project" type="java.lang.String"/>
</context>
name:JNDI的名称 value:设置的值 type:设置值的类型
2、通过java脚本进行获取资源
1、创建上下文对象
Context ctx=new InitialContext(); //初始化上下文信息 系统能拿到所有的上下文信息
通过lookup方法获取到Object类型,参数为Tomcat中配置的jndi-----》name的值
String str=(String) ctx.lookup("java:comp/env/tjndi");
为什么需要连接池?
原因:在原来使用java访问数据库时,会造成平凡对数据库开启和关闭,,导致以下几点不足:
1、安全性能差,执行访问效率较低
2、需要频繁的进行开启链接,关闭连接,消耗资源
3、当多个并发操作访问时,数据库功能性能较低
连接池的作用:
相当于是把建立成功的连接保存在web容器中,不会频繁的进行开启和关闭
DataSource(连接):
作用:为sql语句的执行提供连接服务,负责管理数据库连接的信息,以连接池的形式进行管理
如何从连接池中进行配置,如何获取到DataSource呢?
使用JNDI配置数据库连接池信息:
1、在Tomcat文件夹下的conf下的context.xml文件配置DataSource参数
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root"
password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/user? useUnicode=true&characterEncoding=utf-8" />
name:JNDI名称
auth:DriverManage管理员信息
type:配置的类型 DataSource:数据库连接对象信息
maxActive:设置最大活动数量(同时访问量)
maxIdle:(MAXIDLE是id后面是L)设置最大空闲数量
maxWait:设置最大等待数量
driverClassName:连接的数据库驱动名称
2、在项目中的web.xml配置文件下引入
<!--配置JNDI数据信息引入-->
<resource-ref>
<!--引入jndi名称-->
<res-ref-name>jdbc/test</res-ref-name>
<!--jndi类型-->
<res-type>javax.sql.DataSource</res-type>
<!--jndi管理者-->
<res-auth>Container</res-auth>
</resource-ref>
3、导入数据库连接驱动jar包,直接放到web-info下面的lib文件夹下(没有需要手动创建)
4、通过代码获取数据库连接信息
Context ctx=new InitialContext();
//从jndi中获取DataSource数据源参数连接信息
DataSource dataSource=(DataSource) ctx.lookup("java:comp/env/jdbc/test");
//从JNDI中获取的资源数据来获取连接信息
conn=dataSource.getConnection();
关于开发过程中的数据分层概念:
常用的开发模式分为三层:
第一层:表现层 作用:为用户提供交互,业务逻辑处理,收集数据等。
第二层:业务层 作用:为表现提供数据的请求结果,事务管理
第三层:数据层 作用:为业务层提供结果,一般都比较私密,直接访问数据库
事务管理:一般为用户的数据操作提供安全性,如果用户操作不当,导致数据异常,可以利用事务进行处理解决。(事务回滚)