Jsp学习笔记(包括Servlet,MySQL基本语法,JDBC,Struts2简单知识)

用<frameset ></frameset>将页面分为几部分。
<frameset rows(或cols)="20%,*(或x%),x%.....">  (表示将页面分为几部分!rows表示横着分,cols表示竖着fen)
 <frame src="*.html"></frame>
 <frame src="*.html"></frame>
 <frame src="*.html"></frame>
 ..............
</frameset>


<%! %>:只能用来定义变量(成员变量)和方法;
<% %>:所有的java代码都可以写在里面;
<%= %>:把表达式运行的结果显示在网页中,表达式不是语句,没有结束符(;);
<%@ %>:编译指令,jsp转换成java类的时候执行,只执行一次;
  page:对当前页面的一些设置
  include:静态包含
  taglib:

动作指令(标签):
<<jsp:include></jsp:include>:动态包含
服务器跳转:<jsp:forword></jsp:forword>:


动态包含和静态包含的区别:

1、静态包含包含页面和被包含页面在转换成java代码时候只合并生成一个java类;
2、在每次访问页面的时候动态合并,效率比静态包含低。


get请求可以看到URL参数(只能传输URL参数(文本数据));不安全;只能传小数据量的东西
post请求在地址栏上看不到URL参数(method="post")(可以传输URL参数,也可以传输多媒体数据) 安全;可以传输大数据量的东西

只有表单可以是post请求,其他的都是get请求

传输文字的时候首先通过页面中的pageEncoding的编码把文字拆分成字节,接收时候需要把字节组装成文字,组装的时候默认使用的是ISO-8859-1

Post:接收参数之前调用<% request.setCharacterEncoding("utf-8");%>
Get:修改tomcat的sercer.xml配置文件在修改端口号的<Connector>标签中加入属性:URLEncoding="UTF-8"

request:浏览器发送给服务器的请求
response:服务器发送给客户端的响应
客户端跳转:response.sendRedirect(URL);
服务器跳转:<jsp:forword></jsp:forword>;
客户端跳转:跳转之后浏览器的地址栏变;发送给跳转之前的页面的URL参数,跳转之后的页面不能接收到;
服务器跳转:跳转之后浏览器的地址栏不变;发送给跳转之前的页面的URL参数,跳转之后的页面可以接收到;

九大内置对象;

HTTP无状态的协议:
http协议本身是无状态的,就是一个网站页面不能记录你之前做过些什么事的
我们需要一些技术来保存HTTP协议的状态:cookie,session,application

cookie:
1、保存在客户端的机器上
2、有两种保存形式
  1)、文本文件的形式保存,过期看cookie1.setMaxAge()的时间;
  2)、保存在浏览器的内存中(默认),浏览器关闭后过期
3、以名——值对的形式保存数据,只能保存字符串
4、每个浏览器只能查看自己的cookie


cookie的使用:
Cookie cookie1 = new Cookie("名字","值");
设置了cookie1.setMaxAge()才会写成文本文件
写到客户端:response.addCookie(cookie1);
可以往cookie中写入很多东西,但是cookie的名字不能重复,重复的话是覆盖,值是可以重复的

查看cookie的内容:
需要查看客户端中的所以cookie的值:Cookie[] cookies = request.getCookies();

session
1、session保存在服务器的内存中
2、以名——值对的形式保存数据,只能保存字符串
3、session的过期时间看服务器的配置,tomcat默认为30分钟

session的使用:
session.setAttribute("name","value");
session.getAttribute("name");

session和cookie属于同一个级别,一个浏览器对应一个session或cookie,它们相当于一个日记本

application:
相当于一个备忘录,所有的浏览器共享其中的数据,application是服务器开启的时候创建(只有一个),在服务器关闭的时候过期

application的使用:
application.setAttribute("name","value");
application.getAttribute("name");

jsp的四种作用域(小到大):
pageContext:只在一个页面中保存属性,当前页面有效,跳转之后无效
request:只在一次请求中保存属性,(服务器跳转)后依然有效(request.getAttribute()和request.getParameter()不同)
session:浏览器不关的情况下,所有的页面都能获取,在一次会话范围中保存,无论何种跳转都可以使用,但是新开浏览器无法使用
application:只要服务器不关闭,所有的浏览器的所有页面都能获取,在整个服务器上保存,所有用户都可以使用
我们可以往里面存取Attribute(setAttribute(),getAttribute())

MySQL
MySQL语句都以分号结束
查看有多少个database:show databases;
进入数据库:use 数据库名称
进入数据库后,查看表:show tables;
创建自己的表:
create table 表名(
 字段1 数据类型,
 字段2 数据类型,
 …………
)

创建数据库:create database 数据库名;

中文字符在数据库中占3个字节
char(255)可以存85个中文字????

source执行sql脚本

查看表的结构:desc 表名;
删除表:drop table 表名;
向表中插入数据: insert into 表名 values(值1,值2,....);(空值为null)
字符串要用单引号('')括起
查看数据:select 字段1,字段2,... from 表名 [where 条件];
更新数据:update 表名 set 字段1=值,字段2=值,..... [where 条件];
删除数据:delete from 表名 [where 条件];(不加where条件默认删除表中所有数据)

JDBC编程步骤:
1、导入驱动jar包
2、注册驱动:Class.forName("驱动类的名称(包括包)");(MySQL的是com.mysql.jdbc.Driver)
3、创建数据库与java的连接:Connection conn = DriverManager.getConnection("URL","username","password");
 URL:主协议:子协议://IP:端口号/资源地址
 主协议:只能是JDBC
 子协议:数据库产商名称
 端口号:mysql(3306)
 资源地址:数据库名称
4、创建运输工具
Statement stmt = conn.createStatement();
作用:1、把java的sql语句传送给数据库
      2、把数据库中查询的结果返回给java
5、执行SQL语句
 1、更新操作(insert update delete)
  stmt.executeUpdate("sql语句");
 2、查询操作(select)
  stmt.executeQuery("sql语句");
6、关闭所有连接(注意关闭所有连接):
 stmt.close();
 conn.close();
查询结果用Resultset保存:
ResultSet rs = stmt.executeQuery("sql语句");
ResultSet有一个游标,最开始没有指向查询结果中的任何一行,利用rs.next();一次指向第一行结果;
利用rs.next();指向结果的下一行;
游标能向下移动(还有查询结果)返回true,不能向下移动(没有查询结果了)返回false;

Servlet
java最早开发web的技术就是servlet,由于servlet非常麻烦,后来java才用jsp来代替servlet。
servlet目前在web开发的mvc设计模式中可以充当控制层的作用

servlet就是一个java类
1、写一个继承自HttpServlet的类
2、重写(覆盖)service方法,注意覆盖的是带上参数Http的
3、在web.xml中配置如何来访问servlet

注意:
之前我们所写的普通的java类,都是在cmd窗口使用javac先对java源代码进行编译,然后使用java执行。但是我们现在开发的是web工程,服务器中的内容是需要在浏览器中输入对应的url地址来访问,现在的问题是到底我们在浏览器中输入什么样的URL地址才能访问到我们刚刚写的servlet类
web.xml是当前web工程的配置文件,我们可以在web.xml中对servlet进行配置

jsp就是servlet
java服务器中只能运行java类,服务器会自动把jsp转换成servlet,在tomcat的work文件夹中有jsp转换成的servlet文件和编译完成的字节码文件

如何使用servlet来显示网页的效果:
1、浏览器的作用是解析html代码的,浏览器要显示网页的效果需要的是html代码
2、我们只需要在servlet代码中将Html代码发送给浏览器即可
3、在我们往浏览器发送html代码时我们要用到response的IO流PrintWriter对象
  PrintWriter out = resp.getWriter();
  out.print("<center><font color='red' size='7'>Hello SecondServlet!!!</font></center>");
  out.flush();
  out.close();

默认的时候服务器启动不会创建servlet对象,当我们第一次访问这个servlet时会调用构造方法创建对象,然后调用init方法进行初始化,再根据请求的不同调用相应的service方法进行处理。之后再访问这个servlet就不会调用构造方法和init方法,因为servlet在服务器中永远只有一个对象,当服务器重新加载的时候(修改了代码),会调用destory方法销毁对象。

为什么要调用init方法
servletConfig其实就是web.xml在内存中的表现形式。服务器启动的时候会读取一次web.xml,今后再查看配置文件的信息直接从ServletConfig对象中读取,效率高。所以修改了web.xml就一定要重启服务器。

init方法需要读取servletConfig对象中的信息,就是需要知道什么样的URL地址访问当前的Servlet。

HTTP协议的7种请求类型
get
1、只能传递URL参数
2、URL参数会显示在浏览器地址栏上
3、不安全的,只能传输小数据量的数据
post
1、既可以传输URL参数,又可以传递多媒体数据
2、URL参数不会显示在浏览器地址栏上
3、安全的,可以传输大数据量的数据

所有的7种请求类型都可以调用到service方法,所以我们认为service方法是不安全的,今后我们不会用到service方法。

Filter(过滤器)
过滤器可以再请求到达真实的地址之前,对请求进行拦截,并进行一些过滤处理(敏感词的过滤,统一登录的处理)
Filter的编写方法
1、编写一个类实现javax.servlet.Filter接口、需要进行过滤操作的语句写在doFilter方法
2、在web.xml中配置filter可以拦截的请求


开发jsp项目有两种模式:
1、jsp+javaBean(Model1)
缺陷:jsp页面上有大量的java代码,这不利于分布式的开发,使得开发工程的效率很低。

JavaBean
一个java类只要符合三个条件就称为javabean
1、必须有一个参数为空的构造方法
2、所有的成员变量必须私有(private)
3、提供相应的get和set方法对成员变量进行访问
(在web开发中所有的普通java类都应该写成JavaBean)

PO
Persistence Object(持久化对象)
持久化:程序运行过程的数据都是临时保存在内存中的,我们通过一些技术手段(数据库,IO,XML,JSON)把数据保存到硬盘上的过程就称之为持久化。
持久化对象有可以称为实体类(Enitity Class),实体类用来表示实体与对象之间的映射关系,通常情况下工程需要使用多少张表,就需要多少个实体类,实体类的名称与表名相同,实体类中的成员变量与表中的字段一一对应

DAO
Data Access Object(数据访问对象)
用来对数据进行增删改查操作
通常情况下,有多少个PO就有多少个DAO,一个DAO只能针对一个PO进行操作

MVC
view(视图层):由jsp或html等页面组成,作用:显示页面效果,显示数据,提交数据
Model(模型层):javabean组成,作用:1、处理业务逻辑 2、处理数据
Control(控制层):1、接收视图层发送的数据 2、调用模型层来处理数据


fileupload的使用:
1、导入fileupload相关jar包(commaons-fileupload.jar;commons-io.jsr)
2、准备上传页面:表单的method必须是post;enctype指的是当前的表单可以传输什么样的数据,默认值为:
必须把改成enctype="multipart/form-data"


EL&JSTL:
EL:1、使用EL不需要导入任何的jar包可以直接使用,但是低版本的tomcat不能直接用,必须要在page编译指令中加入(isELIgnored="false");
2、EL表达式的语法:${表达式}
3、EL表达式最大的作用是从四种作用域范围中获得相应的属性的值。pageContext.getArrribute("num");--->${num}
4、如果四种作用域的属性名相同
EL表达式在没有指定在何种作用域范围中获取属性值时,默认是按照作用域从小到大的范围依次进行查找的(pageContext<request<session<application)
指定从哪种作用域范围获取属性的值:${作用域范围Scope.属性名}(${pageScope.num}、${requestScope.num}、${sessionScope.num}、${applicationScope.num})
5、表达式的好处
(1)EL表达式获取的值不需要进行类型转换
(2)EL表达式中可以直接进行运算
(3)EL表达式对NULL值显示的是空字符(没什么东西),java显示的是null
6、EL表达式中的一些指令(可以忽略)
(not) empty:判断是否(不)等于空
7、EL表达式接收URL参数
request.getParameter();---->
${parem.URL参数的名称}
8、EL表达式支持对象导航(通过.来访问对象属性)
${user.id}

正则表达式:
. 代表任意字符
[] 代表一个字符,里面写的是范围
[a-z] 小写字母  [^a-z] 不是小写字母
[A-Z] 大写字母
[a-z&&[A-Z]]交集
+ 一到多次
* 零到多次
? 零次或一次
{m} 刚好m次
{m,n} 最少m次,最多n次
{m,} 最少m次
{,n} 最多n次

\d 等于 [0-9]
\D 等于 [^0-9]
\w      [a-zA-Z0-9]
\W [^a-zA-Z0-9]


Struts2(框架技术)
框架本身是由java编写的,供程序员使用,以增加开发效率的工具。
struts1是apache公司开发的管理控制层和视图层的框架。
struts2和struts1是完全不同的两个框架,用的是struts的名字,核心技术使用的是webwork。

struts2工程的搭建
1、将struts2/apps/struts2-blank.war解压出来
2、将解压好的空项目中的WEB-INF/lib中的六个jar包导入到自己的工程中。
3、将解压好的空项目中的WEB-INF/classes/struts.xml文件复制到自己工程的src目录中
4、将解压好的空项目中的WEB-INF/web.xml中关于filter的配置复制到自己工程的web.xml中

Action
Action相当于原来MVC设计模式中的控制层(servlet)。
Action的三种写法:
1、编写一个类,实现Action接口
2、编写一个类,继承自ActionSupport,覆盖execute方法(只会用这种)
3、编写一个类,提供一个public String execute()的方法即可

Action的配置
在src目录下的struts.xml中配置:
<action name="action1" class="com.lin.action.Action1">
            <result name="success">/ok.jsp</result>
            <result name="error">/error.jsp</result>
</action>
以上配置说的是在浏览器中输入
http://localhost:8080/项目名/action1.action会自动调用com.lin.action.Action1中的execute()执行,execute方法执行完成后跳转到哪个页面要看execute方法的返回值是什么(假如Action1中的execute()方法返回的是success则跳转到success.jsp,返回的是error则跳转到error.jsp);


Action中接收URL参数:
1、普通属性接收:把要接收的URL参数设置为Action的成员变量,提供set方法:
2、domainModel:把需要接收的URL参数所属的类设置为成员变量,提供set方法,如User,但是传URL参数的时候需要使用user.username这种方式;(不会使用)
3、drivenModel:把需要接收的URL参数所属的类设置为成员变量(需要new出来),实现ModelDriven接口;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值