JSP学习

Java web简介

web应用程序是一种通过web访问的应用程序,web应用程序的一个最大的好处是用户很容易访问应用程序。用户只需要啊有浏览器即可,不需要安装其他软件。

为什么要学习web应用程序?

web应用程序是目前软件开发的三大方向之一,javaEE方向需求一直很大,就是就业比较容易和稳定:
在这里插入图片描述

静态网页与动态网页

在这里插入图片描述
搭建javaweb开发环境:JDK7.0,Tomcat7.0,MyEclipse or idea

Tomcat服务器:Apache Jakarta的开源项目,JSP/Servlet容器
tomcat服务器的目录文件:
发布的项目都存储在webapps文件目录下面。
在这里插入图片描述

手工编写一个web程序:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试首页:
1、打开Tomcat服务器
在这里插入图片描述
2、web项目存储在webapps里面,输入网址:
http://localhost8080/SGjavaweb/index.jsp
在这里插入图片描述
在这里插入图片描述

中文乱码问题汇总

1、page中设置contenType为"text/html;charset=UTF-8"
在这里插入图片描述
2、在page页面设置请求的文本编码设置为utf-8
在这里插入图片描述

web项目的虚拟路径

使用工具创建项目后通过网址访问http://localhost8080/SGjavaweb/index.jsp
虚拟路径中的SGjavaweb默认和项目名相同,但是可以修改虚拟路径,
在这里插入图片描述

修改Tomcat服务器默认端口

在这里插入图片描述
在这里插入图片描述

JSP基础语法

JSP简介

JSP全名为Java Server Pages ,其根本是一个简化的Servlet设计,他实现了在Java当中使用HTML标签,JSP是一种动态网页技术,标准也是JAVAEE的标准。JSP与Servlet一样,是在服务端执行的。

常用的:动态网站技术开发对比
在这里插入图片描述

JSP页面元素简介及page指令

JSP页面元素构成
在这里插入图片描述

JSP指令

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

JSP注释

三种注释方式:
在这里插入图片描述

在这里插入图片描述

JSP脚本

<% %> JSP的内置对象out
在这里插入图片描述

JSP声明

在JSP页面中定义申明变量或者方法:
方法:<%! java代码 %>
在这里插入图片描述

JSP表达式

在JSP页面中执行的表达式,表达式不以分号结束,可以通过表达式语句调用声明的变量和函数。
在这里插入图片描述

JSP的生命周期

JSP生命周期:jspService()方法被调用来处理客户端的请求。对每一个请求,JSP引擎创建一个新的线程来处理请求。如果有多个客户端同时请求JSP文件,则JSP引擎会创建多个线程,。每个客户端请求对应一个线程。以多线程方式执行可以大大降低系统的资源需求,提高系统的并发量以及相应时间,由于Servlet始终驻于内存,所以响应快。
在这里插入图片描述

阶段项目

分别使用表达式和脚本实现打印九九乘法表
在这里插入图片描述

JSP内置对象

JSP内置对象简介:JSP 内置对象是web容器创建的一组对象,不使用new关键就可以使用的内置对象。
常用的内置对象简介:
在这里插入图片描述
Web程序的请求响应模式
在这里插入图片描述
在这里插入图片描述

out对象

什么是缓冲区
缓冲区:Buffer,所谓缓冲区就是内存中用来保存临时数据。
在这里插入图片描述
out对象:out对象是JspWriter类的实例,是想客户端输出内容的常用对象。
常用方法如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
flush方法:
使用之前
在这里插入图片描述
在这里插入图片描述
使用后,缓冲区变大了,flush方法将其缓冲区内容输出了:
在这里插入图片描述
flush之后调用clear会出现异常,一旦抛出异常后面不会执行,但是在之后调用clearBuffer不会抛出异常。

表单常用的提交方式

get与post区别:
在这里插入图片描述
表单有两种提交方式:get与post
在这里插入图片描述
post方法:安全性高,数据不会出现在URL中
在这里插入图片描述
get方法:数据会出现在URL中,容易泄露一些用户的个人隐私。
在这里插入图片描述

request对象

客户端请求的信息被封装到request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。常用的方法如下:
在这里插入图片描述
request对象的生命周期:
在这里插入图片描述

创建表单
在这里插入图片描述
request请求页面
在这里插入图片描述
通过URL传参
在这里插入图片描述
传递中文参数可能会出现乱码问题:
解决办法,在Tomcat的conf文件下,有一个server.xml文件,找到其中有一个connecter标签,标签最后面加上一个属性,URIEncoding=“utf-8”,测试中如果没有乱码,那么就是因为已经加上了属性。

其他request对象:
在这里插入图片描述

response对象

response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HTTPServletRequest类的实例。request对象具有页面作用域,即访问一个页面是,该页面内的response对象只能对这次访问有效,,其它页面的response对象对当前页面无效。常用方法如下:

在这里插入图片描述

请求转发与请求重定向(重点)

请求重定向:客服端行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发:服务器行为,request.getRequestDispatcher().forword(req.resp);是一次请求,转发后请求对象会保存,地址栏的URL不会改变

session对象

服务器内存中保存着不同用户的session,每一个用户对应一个session。
在这里插入图片描述常用方法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

session的生命周期

1、通过超链接打开的新页面属于同一次对话。
2、只要当前会话页面没有全部关闭,重新打开新的浏览器窗口访问统一项目资源时,属于同一次会话。
3、本次会话所有的页面都关闭的情况下(包括其他网站的页面,最好关闭浏览器),再重新访问某个JSP或Servlet时会创建新的会话。
4、在不同的浏览器访问同一个项目资源属于不同的会话。
在这里插入图片描述
在这里插入图片描述
总结:
在这里插入图片描述
session销毁方法:
1、调用invalidata()方法来销毁对象。
在这里插入图片描述
2、设置session超时
调用setMaxInactiveInterval(时间);//单位是秒
或者在web.xml配置。
在这里插入图片描述

application对象

application对象
在这里插入图片描述
application对象的方法:
在这里插入图片描述
application对象实现了用户间的数据的共享,可以存放全局变量。
application开始与服务器的启动,终止于服务器的关闭。
在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性进行操作。
在这里插入图片描述

page对象

在这里插入图片描述
当前page页面对象的描述:
在这里插入图片描述

pageContext对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
包含页面操作:
在这里插入图片描述

在这里插入图片描述

Config对象

在这里插入图片描述

Exception对象在这里插入图片描述

exception对象

在这里插入图片描述
在这里插入图片描述

用户登录案例

实现用户登录的小例子:
在这里插入图片描述
登录页面:
在这里插入图片描述
业务页面:使用内部转发和重定向
在这里插入图片描述
登录成功页面:
在这里插入图片描述
失败页面:
在这里插入图片描述
session为空的处理办法:
在这里插入图片描述

Javabean

Javabean简介

Javabeans就是符合某种特定的规范的java类。使用javabenans的好处是解决代码重复编写,减少代码冗余,功能区分明确,调高了代码的维护性。
在这里插入图片描述
符合Javabean设计原则的类:
在这里插入图片描述

JSP的动作

JSP动作元素,动作元素为请求处理阶段提供信息,动作元素遵循XML的语法,有一个包含元素名的开始标签,可以有属性、可以选的内容,与开始标签匹配的结束标签。
在这里插入图片描述
如何使用javabeans
1、像使用普通java类一样,创建Javabean实例
首先创建java.class文件User.java
在这里插入图片描述
然后创建一个jsp文件:
在这里插入图片描述
在jsp页面中通常使用jsp动作标签使用Javabean:useBeans、setProperty、getProperty

使用useBean动作创建Javabean的实例
在这里插入图片描述
在这里插入图片描述
没有初始化,引用类型都是null,需要使用setproperty,来赋值;
在这里插入图片描述
jsp:setProperty
作用:给已经实例化的Javabean对象的属性进行赋值,一共有四种形式。
在这里插入图片描述
第一种:
创建一个表单
在这里插入图片描述
然后编写业务代码:跟表单相关联
在这里插入图片描述
在这里插入图片描述
第二种:跟表单关联,但是是自动指定,属性来进行匹配
在这里插入图片描述
在这里插入图片描述
第三种:手工设置,将value值赋值给属性,而不是通过表单
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第四种:通过URL传参数来给属性赋值
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
jsp:getProperty:作用指定Javabean对象的属性值。
<jsp:getProperty name=“JavaBean实例名” property=“属性名”>
通过使用getProperty来获取用户名和密码
在这里插入图片描述
在这里插入图片描述

Javabean的四个作用域范围

说明:使用useBeans的scope属性可以用来指定Javabean的作用范围
在这里插入图片描述
request范围需要指定请求转发,因为使用超链接的方式相当于又是一次新的请求,获取不了Javabean对象,
使用一个表单:
在这里插入图片描述
使用URL进行传参到dologin_getproperty.jsp中,并实例复制到javabean对象中
在这里插入图片描述
在这里插入图片描述
但是session和application范围可以使用超链接的方式,获取Javabean对象

page范围仅在当前页面有效在其他页面获取不了Javabean对象

总结:application作用于整个web应用,session作用于一个整个会话(服务开始到关闭),request在完成客户端的请求之前,该对象一直有效,page是对当前页面有效。

Model1和Moldel2:

Model1模型出现前,整个Web应用的情况:几乎全部由JSP页面处理,JSP页面接收处理客户请求,对请求处理后直接作出响应。
弊端:在界面层充斥着大量的业务逻辑的代码和数据访问层代码,Web程序的可扩展性和可维护性非常差。
Javabean的出现可以使jsp页面中使用Javabean封装的数据或者调用Javabean的业务逻辑代码,这样大大提升了程序的可维护性。
Javabean既可以封装业务逻辑功能,也可封装数据。
Model1:(javaweb开发的最早的一种模式)
在这里插入图片描述

项目实战:使用JSP+Javabean完成用户登录功能

JSP状态管理

http协议的无状态性

无状态是指,当浏览器发送请求给服务器的时候,服务器响应客服端的请求。但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器。
简单说就是服务器不会去记得你,所以就是无状态协议。

Cookie概述

Cookie:中文名称为“小甜饼”,是Web服务器保存在客户端的一系列 文本信息。
典型应用一:判定注册用户是否已经登录网站。
典型应用二:“购物车”的处理
生活中的Cookie的应用:
系统会自动记录已经浏览过的视频
记住用户名和密码实现自动登录功能

Cookie作用:
对特定对象的跟踪
保存用户网页记录与习惯
简化登录

安全风险:容易泄露用户信息

JSP页面中使用Cookie

创建Cookie对象
写入Cookie对象
读取Cookie对象
在这里插入图片描述
Cookie的常用方法:
在这里插入图片描述

JSP中创建与使用Cookie

实现记忆用户名和密码功能
在这里插入图片描述

问题1?:复制到文件夹中的JSP文件,在服务器上打开时候,出现404源服务器未能找到目标资源的表示或者是不愿公开一个已经存在的资源表示。但是修改一下文件又能打开。为啥?

问题2?IDEA服务器热部署详解(On Update action/On frame deactivation)

一般服务器(比如tomcat,jboss等)启动以后,我们还需要进一步修改java代码,或者是jsp代码。一般来说,改完重启以后才会生效。但如果配置了服务器的热部署,就可以改完代码后立即生效,而不是重启服务器再生效。这样就会节省大量时间!
On Update action : 顾名思义,当代码改变的时候,需要IDEA为你做什么;
Update resources :如果发现有更新,而且更新的是资源文件(.jsp,.xml等,不包括java文件),就会立刻生效
Update classes and resources : 如果发现有更新,这个是同时包含java文件和资源文件的,就会立刻生效
这里需要注意一下:在运行模式下,修改java文件时不会立刻生效的;而debug模式下,修改java文件时可以立刻生效的。当然,两种运行模式下,修改resources资源文件都是可以立刻生效的。
-Redploy : 重新部署,只是把原来的war删掉,不重启服务器
-Restart : 重启服务器
On Frame deactivation : 当失去焦点(比如你最小化了IDEA窗口),需要IDEA为你做什么。
Do nothing : 不做任何事 (一般推荐这个,因为失去焦点的几率太大)
Update resources : 失去焦点后,修改的resources文件都会立刻生效
Update classes and resources : 失去焦点后,修改的java ,resources文件都会立刻生效
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Session与Cookie对比:

在这里插入图片描述

JSP指令与动作元素

include指令

语法:<%@ include file=“URL”%>
include指令的意思就是页面包含的意思
在这里插入图片描述
在这里插入图片描述

include动作

在这里插入图片描述

include指令和include动作比较

在这里插入图片描述

forward动作(请求转发)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

param动作(传参数)

语法:
<jsp:param name=“参数名” value=“参数值”>
常常与<jsp:forward>一起使用,作为其的子标签。

案例:商品浏览记录的实现

项目总体介绍:(采用Model1(jsp+Javabean)实现)
在这里插入图片描述
实现DBHelper类
创建实体类
创建业务逻辑类(DAO)
创建页面层

项目原型:
在这里插入图片描述
在这里插入图片描述
DBHelper类设计:

并且添加:mysql连接到WEB_INF下的lib文件夹在这里插入图片描述
在这里插入图片描述

实现DBHelper类型

String driver = “com.mysql.cj.jdbc.Driver”;//数据库驱动
//连接数据库URL地址
String url = “jdbc:mysql://localhost:3306/mytest?serverTimezone=UTC”
一般出错可能是没有加入时区和数据库驱动写错了。
public class DBHelper {
//连接数据库的驱动
private static final String driver = “com.mysql.cj.jdbc.Driver”;//数据库驱动
//连接数据库的URL地址
private static String url=“jdbc:mysql://localhost:3306/mytest?serverTimezone=UTC”;
private static String username = “root”;//数据库的用户名
private static String password = “admin”;//数据库的密码

private static Connection conn = null;
//加载驱动(静态代码块负责加载驱动)
static {
    try {
        Class.forName(driver);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
//单例模式返回数据库连接对象
public static Connection getConn() throws Exception{
    if(conn==null){
        conn = DriverManager.getConnection(url,username,password);
        return conn;
    }
    return conn;
}

public static void main(String[] args) {
    try {
        Connection conn = DBHelper.getConn();
        if (conn!=null){
            System.out.println("数据库连接正常");
        }else {
            System.out.println("数据库连接异常");
        }
    }catch (Exception ex){
        ex.printStackTrace();
    }
}

}

商品实体类设计

在shopping数据库下建表:
SET FOREIGN_KEY_CHECKS=0;
– Table structure for items
DROP TABLE IF EXISTS items;
CREATE TABLE items (
id int(11) NOT NULL auto_increment,
name varchar(50) default NULL,
city varchar(50) default NULL,
price int(11) default NULL,
number int(11) default NULL,
picture varchar(500) default NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
– Records of items
INSERT INTO items VALUES (‘1’, ‘沃特篮球鞋’, ‘佛山’, ‘180’, ‘500’, ‘001.jpg’);
INSERT INTO items VALUES (‘2’, ‘安踏运动鞋’, ‘福州’, ‘120’, ‘800’, ‘002.jpg’);
INSERT INTO items VALUES (‘3’, ‘耐克运动鞋’, ‘广州’, ‘500’, ‘1000’, ‘003.jpg’);
INSERT INTO items VALUES (‘4’, ‘阿迪达斯T血衫’, ‘上海’, ‘388’, ‘600’, ‘004.jpg’);
INSERT INTO items VALUES (‘5’, ‘李宁文化衫’, ‘广州’, ‘180’, ‘900’, ‘005.jpg’);
INSERT INTO items VALUES (‘6’, ‘小米3’, ‘北京’, ‘1999’, ‘3000’, ‘006.jpg’);
INSERT INTO items VALUES (‘7’, ‘小米2S’, ‘北京’, ‘1299’, ‘1000’, ‘007.jpg’);
INSERT INTO items VALUES (‘8’, ‘thinkpad笔记本’, ‘北京’, ‘6999’, ‘500’, ‘008.jpg’);
INSERT INTO items VALUES (‘9’, ‘dell笔记本’, ‘北京’, ‘3999’, ‘500’, ‘009.jpg’);
INSERT INTO items VALUES (‘10’, ‘ipad5’, ‘北京’, ‘5999’, ‘500’, ‘010.jpg’);
在这里插入图片描述
如何把浏览记录保存在cookie中?
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值