JSP SERVLET基础笔记

第一章 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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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&amp;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();

关于开发过程中的数据分层概念:

常用的开发模式分为三层:

第一层:表现层 作用:为用户提供交互,业务逻辑处理,收集数据等。

第二层:业务层 作用:为表现提供数据的请求结果,事务管理

第三层:数据层 作用:为业务层提供结果,一般都比较私密,直接访问数据库

事务管理:一般为用户的数据操作提供安全性,如果用户操作不当,导致数据异常,可以利用事务进行处理解决。(事务回滚)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值