jsp是java web开发相关知识。简言之,就是用Java和html相关知识做jsp页面,页面类似html,但是扩展名为.jsp
,并非.html
本次课主要内容:创建jsp项目,jsp注释,jsp指令,jsp脚本元素
通过JavaSE Mysql 可以完成一个简单的控制台项目
jsp第一次课
两种程序设计方式
- C/S 客户端 服务器(如桌面应用QQ)
- B/S 浏览器 服务器
静态网页和动态网页的区别
- 静态和动态最大的区别 数据的交互
- 静态是没有数据的,动态是对数据的增删改查(CURD)
什么是jsp
- 全称:java server pages
- 运用的知识:html+java+数据库+jsp自己的语法+js
什么是3p
- jsp(跨平台,免费) php(论坛,数据量小) asp(微软,收钱)
安装环境
- jsp必须运行在中间插件上(服务器)
- 服务器:apache公司的 Tomcat(开源,免费)
- 其它服务器(了解):resin、 jboss、 glassfish、 weblogic
- 如何安装服务器?只需配置环境变量(Tomcat版本要与jdk匹配)
- 配置方法 添加环境变量
- 变量名:JAVA_HOME(名字不固定)
- 变量值:D:\Program Files\Java\jdk1.8.0_221(路径配置到jdk的根目录)
- 测试 Tomcat是否成功
- 解压Tomcat安装包,bin里面有个startup.bat
- 双击,出现 毫秒数
- 在打开 网页,输入
http://localhost:8080/
出现Tomcat页面就对了 - 关闭服务器 bin 里面 双击 shutdown.bat
利用eclipse开发java web项目
- 打开eclipse,选好工作空间,在工作空间中选择 File>New>Dynamic Web Project
- 输入项目名称,选择Target runtime中Tomcat版本(选自己安装的版本)
- 点击Finsh,项目创建成功
没有Dynamic Web Project解决办法
- 在New>other…中查找,如果依然没有,可能是没有安装相应插件
- 安装插件 Help>Install New Software…>选自己的eclipse版本
- 在 Web, XML, Java EE and OSGi Enterprise Development 中选择(个别没有的表明你已安装)
- Eclipse Java EE Developer Tools
- Eclipse Java Web Developer Tools
- Eclipse Web Developer Tools
- Eclipse XML Editors and Tools
New Runtime中没有Tomcat版本选择
- 安装插件 JST Server Adapters
jsp文件
- 创建文件后,默认不是utf-8编码,会出现中文乱码问题,在Preference中
JSP Files
中修改编码为utf-8 - jsp 必须通过 server 运行
如何创建项目的首页
- index.jsp
jsp文件内容(与html页面相似)1
2
3
4
5
6
7
8
9
10
11
12<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>jsp的 注释有几种?
- html 注释 是显示注释
<!-- -->
- java 注释
//
/* */
- jsp 自己注释
<%-- --%>
隐世注释
jsp的指令有几个?都是什么?做什么的?
- 3个指令
<%@ page %>
作用: 规定这个jsp页面的基本设置 ,例如语言,文本,编码等等
这里唯一一个特殊的 import 可以使用多次<%@ page import="包" %>
包可以通过,
导入多个包<%@ page import="java.util.*","java.io.*","java.awt.*" %>
<%@ include file="文件" %>
作用:包含其他页面
注意:被包含内容,页面基本格式要一样<%@ taglib %>
作用:导入标准标签库>>后面详细讲解标签库- 问题:page 指令是不是必须只能放在第一行?
page指令可以在JSP中的任何地方,以任何顺序出现
jsp 的脚本元素
- <% 这是java代码 %>
中间可以穿插html标签,但需要将java代码截断(可以参考练习中的代码) - <%=表达式%>
输出的作用,切记 千万千万别写分号 - <%!全局内容%>
总结
jsp
- Java + html +mysql +jsp自己语法+js
jsp做什么?
- 动态网页(数据交互)
jsp的3个指令?
<%@ page %>
- 注:import 能使用多次
<%@ include file=""%>
<%@ taglib %>
jsp的3个脚本元素?
- <%java代码%>
- <%! 全局变量%>
- <%=表达式%> 不能有分号
开发设计模式
- jsp(专门做显示工作) +javaBean(业务逻辑的东西)
练习
- 运用jsp打印出九九乘法表
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
- 输出100内能被3整除的数,每行显示3个
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
jsp第二次课
本次课主要内容
包含的相关知识点,两种页面跳转,9个内置对象的部分介绍(四个存值对象,response和out对象),登录模块的简单完成
包含的知识点
- 静态包含
<%@ include file=" " %>
- 动作标签
- 动态包含
<jsp:include page=" "></jsp:include>
静态包含和动态包含的区别?
编译方式不同
- 静态的是 先编译完 再包含到一起,最终只是产生 一个.java文件,如果静态包含的文件里面内容改变,结果就会改变
- 动态的是,各自包含进去,再编译,然后产生多个.java文件,如果动态的包含文件有改变的,结果不一定改变,效率高
动态的能传参数
- 通过
<jsp:param value="jim" name="username"/>
- 通过
跳转
- 服务器跳转
<jsp:forward page="跳转的页面"></jsp:forward>
- 客户端跳转(非jsp标签)
response.sendRedirect("跳转页面");
不需要截断java代码,直接在java代码中实现
9个内置对象
- request、 response、 page、 pageContext、 session、 application、 config、 out、 exception
什么是内置对象?
- new 出来的东西就是对象
- jsp 内部的一个规范,常用的对象 内部封装好了,直接用就可以,不需要用new
4个存值对象都有什么
- page:本页 相当于我们基础的this,代表当前对象
- request: 一次请求,一般就是页面跳转一次
- session:一次会话,只要你不离开这个浏览器,就在session范围内
- application:整个服务器开启都好使
- 它们4个都有2个共同的方法,就是存对象,取对象
- setAttribute(,)/getAttribute(“”)
例如PageTest1.jsp1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<!--存对象页面-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/* page 存对象要用 pageContext对象 */
pageContext.setAttribute("username", "jim");
%>
<%-- <%=pageContext.getAttribute("username")%> --%>
<jsp:forward page="PageTest1.jsp"></jsp:forward>
</body>
</html>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<!--取对象页面-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--输出对象-->
<%=pageContext.getAttribute("username")%>
</body>
</html> - 相当于我们java基础学的 4个权限修饰符:private 缺省的 protected public
response对象
- sendRedirect
response.sendRedirect("跳转的文件")
它不是一次请求,即存值对象request获取不到值 - setCharacterEncoding(“UTF-8”)
request.setCharacterEncoding("UTF-8")
解决乱码问题(这个处理乱码就对post方式好使)
out对象
在浏览器页面输出的 out.println();
服务器跳转和客户端跳转的区别?
1.使用服务器端跳转时,客户浏览器的地址栏并不会显示目标地址的URL,而是用客户端跳转时,地址栏当中会显示目标资源的URL;
2.服务器端跳转是由客户端发送一个请求,请求一个服务器资源——如JSP和Servlet——,这个资源又将请求转到另一个服务器资源,然后再给客户端发送一个响应,也就是说服务器端跳转是客户端发送一次请求,服务器端给出一次响应;而客户端跳转的流程则不同。客户端同样是发送一个请求给服务器端资源,这个服务器资源会首先给客户端一个响应,客户端再根据这个响应当中所包含的地址,再次向服务器端发送一个请求,也就是说客户端跳转是两次请求,两次响应;
3.在进行客户端跳转和服务器端跳转时,都需要指定目标资源的URL,如果这个路径以“”开始。在客户端跳转当中“”代表的是应用服务器根目录,而在服务器端跳转当中代表的是应用程序根目录。
登录模块
分析
- 1、有一个html页面
- 有2个文本框 ,一个按钮
- 2、有一个处理数据的jsp页面
- 3、成功的页面和失败的页面
这里实现用户名和密码是固定的登陆页面
html页面(实现两个文本框,一个按钮,页面跳转)
1 | <!DOCTYPE html> |
jsp数据处理以及跳转页面
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
总结
jsp的三个动作标签
<jsp:include page=" "></jsp:include>
<jsp:param value="jim" name="username"/>
<jsp:forward page="跳转的页面"></jsp:forward>
静态包含和动态包含的区别?
静态包含是先编译再包含,最后产生一个.class,如果一个文件被改变,结果就会被改变
动态包含,先包含,再编译,最后产生多个.class,如果其中一个文件改变,可能结果不会变,但是效率高,而且还可以动态的带值
包含一般多用于,网页的菜单栏,导航栏,底部版权的包含9个内置对象
request response page pageContext out session application exception config4个存值对象的内置对象
- page ==》本页面
- request==》一次请求
- session===》 一次会话
- application==》服务器开启期间
都有共同方法,set/getAttribute
request对象
- 处理乱码
- 表单取值
- 获得路径
- 存对象取对象
- 请求,可以获取一些服务器信息
response对象
- 重定向也是客户端跳转
- 处理乱码和设置文本的格式
- 设置头部信息
服务器跳转和客户端跳转的区别?
- 地址栏
- 服务器地址栏不改变,是原地址
- 客户端是目标地址
- 访问次数
- 服务器端是访问一次服务器
- 客户端是2次访问
- 执行后,后面的代码是否执行?
- 服务器端后面的代码不执行==后面不要写释放资源的代码,肯定是执行不了
- 客户端后面的代码会执行
- session对象
- 一次会话
- session有个安全访问期,一般默认是30分钟,银行系统是15分钟
jsp第三次课
好久没写笔记了。从今天开始继续。
本次课主要内容:
回顾
连接数据库的登录
回顾
每个项目都有一个默认的首页,首页是不用输出到地址栏,访问项目直接识别
国内默认习惯 index.html/.jsp ==>i.jsp
国外默认习惯 default.html/.jsp
jsp的3个指令
<%@ page %>
面试题:page是不是必须放在第一行
答:不是,因为页面一加载,立马执行第一行,page里面写的都是页面的基本配置<%@ page import="包" %>
是唯一一个可以使用多次的属性,2种导包方式,逗号和多写几次<%@ include file="文件" %>
<%@ taglib %>
jsp的3个脚本
- <%java代码%>
- <%! 全局变量%>(不常用)
- <%=表达式%> 表达式后面不能有分号
jsp的3个动作标签
- 动态包含
<jsp:include page=" "></jsp:include>
- 传递参数
<jsp:param value="jim" name="username"/>
- 服务器跳转(request能获取到值)
<jsp:forward page="跳转的页面"></jsp:forward>
9个内置对象
request response page pageContext out session application exception config存值对象的内置对象 4个
- page ==》本页面
- request==》一次请求
- session===》 一次会话
- application==》服务器开启期间
- 都有共同方法, set/getAttribute
java核心是对象,我们整个项目,以对象为核心,到处用对象,那么就涉及2个对象之间的互相调用问题
request对象
1)处理乱码 request.setCharacterEncoding("UTF-8");
2)表单取值 request.getParameter("值");
3)获得路径request.getRequestURI();
获取访问路径: 项目名+servletrequest.getRequestURL();
获取完整路径
4)存对象取对象 set/getAttribute
请求,可以获取一些服务器信息
response对象
1)重定向 也是客户端跳转 response.sendRedirect("跳转的文件")
2)处理乱码和设置文本的格式
设置浏览器默认编码utf8response.setHeader("content-type", "text/html;charset=utf-8");
设置response默认编码response.setCharacterEncoding("utf-8");
字符流输出中文response.getWriter().print("文本");
session对象
一次会话
session有个安全访问期,一般默认是30分钟,银行系统是15分钟
连接数据库的登录
- 1)设计表
- admin
- 2)设计表单
- login.html
- 3)连接数据库
- a)导入jar
- b)加载驱动
- 4)获取表单值,比对从数据库出来的
实现方法
1.将数据库连接驱动导入web项目下的lib文件夹下,加载到项目中
2.在java文件夹下的src文件夹内建立相应的包和类
以上跟java控制台项目连接数据库操作几乎相同
3.建立一个登录页面html文件(表单页面)
4.建立一个获取表单数据的jsp文件,与数据库比较,实现相应的页面跳转
这里附上一部分代码
登录页面html(没加任何样式)
1 | <!DOCTYPE html> |
获取表单数据的jsp
1 | <%-- 导java类 --%> |
jsp第四次课
本次课主要内容:
tomcat目录介绍、创建servlet
doGet、doPost、service区别
servlet生命周期、request、response、servlet里面连接数据库、过滤器
tomcat目录介绍
bin:可执行文件(启动服务、关闭服务等)
conf:配置文件(web.xml等)
lib:依赖库
logs:日志文件
temp:临时文件
webapps:发布项目
work:jsp转成java及class文件
创建servlet
方法1
src下创建包
包下创建servlet(包->右键->servlet->起名->Finish)
Dynamic Web Project 3.0及以上版本创建servlet时自动添加注释
项目中不会自动生成web.xml文件
项目创建的servlet源码
1 | import java.io.IOException; |
启动tomcat直接访问注解中的路径
方法2
src下创建包
包下创建servlet(包->右键->servlet->起名->Finish)
注解删除
web.xml中配置servlet、servlet-mapping(3.0版本之前会创建web.xml)
1 | <servlet> |
方法3
创建一个普通的java文件
继承HttpServlet
重写里面的doGet、doPost、service方法
配置注解@WebServlet(“/TestServ”)
启动服务测试
doGet、doPost、service区别
service:如果重写了,请求一定是service处理
doGet:若果没有重写service,那么请求的方式是get的
doPost:若果没有重写service,那么请求的方式是post的
servlet生命周期
1.init():初始化时候调用一次
2.第一次访问servlet时,对servlet进行初始化
3.destroy():销毁的时候调用一次
4.关闭服务器
5.web.xml
配置servlet时添加<load-on-startup>1</load-on-startup>
:可以使servlet在服务启动时加载
request
携带参数
request.setAttribute("uname", uname);
获取参数的类型--
Object 需要强制类型转换
request.getAttribute("uname");
服务器端跳转(请求转发、类似post)--------
跳转的页面或servlet
request.getRequestDispatcher("success.jsp").forward(request, response);
<jsp:forward page="success.jsp"></jsp:forward>
中文乱码问题
所有的乱码都是由字符编码格式不匹配,统一编码格式
解决乱码的方法(servlet里添加)
post方式提交的乱码问题request.setCharacterEncoding("utf-8");
get方式提交的乱码,或者直接在地址栏提交的乱码String uname = request.getParameter("uname");
uname = new String(uname.getBytes("iso-8859-1"),"utf-8");
response
客户端跳转(请求重定向、get)response.sendRedirect("fail.jsp");
servlet里面连接数据库
1.依赖包复制到WebContent下的WEB-INF的下面
2.JDBC的工具类复制到工程中
3.获取查询时所需要的参数
4.编写sql
5.JDBC工具类创建对象连接数据路查询
1 | import java.io.IOException; |
过滤器
创建方法
右键Filter,起名字,Finish
注解部分需要改成@WebFilter(“/“)
在doFilter方法里面
request.setCharacterEncoding(“utf-8”);
chain.doFilter(request, response);(必须添加,不然会在过滤器卡住)
主要解决乱码问题,@WebFilter(“/“)表示项目中所有的访问都要经过这个过滤器
1 | import java.io.IOException; |
在servlet里面获取session
HttpServletRequestrequest.getSession()
补充
这里附上一个JdbcUtil,数据库的增删改查操作类
JdbcUtil.java
1 | import java.sql.Connection; |
jsp第五次课
本次课主要内容:
过滤器web.xml配置方式、监听器、application
表单空间默认值、表单的正常处理、表单控件回显
MVC模式
过滤器web.xml配置方式(web.xml)
web.xml中添加
1 | <filter> |
监听器
监视某事件的发生,做出响应
右键->Listener->起名字->选择你要监听的事件->finish
web.xml配置(注解二选一)
1 | <listener> |
application
所有用户共享的变量
从服务开启到服务关闭
setAttribute(名字,存放值);
getAttribute(名字);
在servlet中获取applicationrequest.getSession().getServletContext();
session重新初始化session.invalidate
通过session获取网页在线人数
创建session监听器
1 | public void sessionCreated(HttpSessionEvent arg0) { |
在jsp页面添加
1 | 当前网页在线人数:<%=application.getAttribute("num") %> |
通过session获取网页访问量
基于上面的在线人数
在jsp页面添加
1 | <% |
表单控件默认值
通过request.getParameter(name);
获取值
checkbox通过request.getParameterValues("checkbox");
获取值(用字符串数组接值)
input标签type属性 | 值 |
---|---|
password | 空字符串 |
password | 空字符串 |
textArea | 空字符串 |
radio | null |
checkbox | null |
radio的正常处理
一般情况下会有默认值(checked=”checkid”)
checkbox(字符串数组)
先判断是否为null
遍历拼接成字符串(中间需要特殊字符间隔)
1 | // 将多选数据存为字符串,多选数据的值为hobby |
表单控件回显
属性 | 回显方法 |
---|---|
text | value=<%=request.getAttribute(“text”)%> 如果有可能第一次访问当前界面,需要判断值是否是null |
textarea | 两个标签之间 |
radio | 将得到的值,和每一个选项判断,加上checked=”checked” |
checkbox | 将得到的值,和每一个选项判断,加上checked=”checked” |
MVC模式
MVC模式是一种项目开发模式,适合多人开发的一种模式
介绍java web项目经历的几种开发模式
第一种模式jsp,类似php
所有的java代码都写在jsp页面,一个人开发,form表单的值传到jsp页面进行处理
第二种jsp+servlet(model1)
form表单的值提交到servlet中进行处理
第三种model2== MVC
M:model模式(业务bean)
V:view视图,即jsp
C:controller控制,servlet
jsp第六次课
本次课主要内容:
MVC模式、el表达式、jstl表达式
MVC模式
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
java项目MVC模式的开发思路
jsp页面:form表单的传值和回显,提交数据到servlet
servlet包:处理form表单的传值,调用service,进行页面跳转
service包:调用dao包,对dao包获得的数据进行回传
dao包:定义sql语句,调用数据库操作的工具包,返回查询的数据
bean包(或vo包):表中名称私有属性,get/set方法
el表达式
EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。
jsp页面的取值方法(非el)
request.getAttribute("值")
如果传过来的是一个对象,需要对取值进行强制类型转换(UserInfo)request.getAttribute("uinfo")).getUsername()
el取值
${值}
如果传过来的是一个对象${emp.sex }
对象.属性
el表达式可以进行算数运算,直接输出运算后的结果
逻辑运算时,输出true或false
jstl表达式
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。
这里简单介绍一下jstl核心标签
核心标签
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
这个引用在jsp页面添加
介绍几个表单回显需要用到的几个标签<c:out>
用于在JSP中显示数据,就像<%= ... >
<c:if>
与我们在一般程序中用的if一样
比如回显表单中的多选
1 | <input type="checkbox" name="hobby" value="足球" |
<c:forEach>
基础迭代标签,接受多种集合类型
也可以用作form表单回显
1 | <input type="checkbox" name="hobby" value="篮球" |
这el和jstl表达式简化了jsp用java代码的取值方式
jsp第七次课
本次课主要内容:
登录失败的错误提示方法
flieupload文件上传
登录失败错误提示
jsp页面form表单提交用户名和密码
数据库匹配失败,即用户名或密码错误
实现方法
在jsp页面form表单下面添加一个标签,回显servlet登录失败传值
1 | <!-- 登录失败错误提示 --> |
样式根据自己需要更改
servlet判断失败,进行失败传值
1 | import java.io.IOException; |
flieupload文件上传
- 在lib文件夹下导入两个jar包
commons-fileupload-1.2.2.jar
commons-io-2.3.jar
这两个包在官网应该可以下载(版本可能不一样) - jsp页面form表单提交方式为post,
enctype="multipart/form-data"
1 | <%@ page language="java" contentType="text/html; charset=UTF-8" |
将数据提交到servlet
servlet接收上传文件,实现上传
1 | import java.io.FileOutputStream; |
这里以照片为例,上传的文件保存在d:/1.jpg
flieupload文件上传工具类分享
1 | import java.io.File; |