jsp:
Java Server Pages 动态网页开发
C/S与B/S区别:
B/S:Brower/Server 浏览器服务器
通过浏览器访问服务器端的代码
C/S: Client/Server 客户端/服务器端
本地安装客户端软件,通过网络与服务器相互通信。
URL:Uniform Resource Locator 统一资源定位符
Tomcat 端口号 默认8080
mysql 端口号 默认 3306
url访问服务器 http://IP:端口号/项目名/文件名/
-------------------------------------------------------------
动态网站:
建立: web project 类型
项目结构:
src:
java代码
web-root: 前段文件: html,css,js,jsp,图片,音频,视频等前段文件
web-inf: 注意: 里面内容用户不能直接访问 ,所以jsp文件建议不要放在这里面
lib
所有的第三方驱动包 .jar
web.xml
驱动包:
项目需要一个服务器来部署下
在MyEclipse中添加外部服务器:
在window-> prefrences中输入tomcat搜索
根据版本选择: 如你下载的tomcat为7.0就点击7.0路径添加.
web服务器: =====tomcat服务器 tomcat端口号: 8080 mysql端口号: 3306
1. 吧项目add delopment 到服务器里面
2. run servers 运行该服务器
---------------------------------------------------------------------------------
jsp 代码是放在.jsp文件里面
jsp本质上===html+java 代码 以html为主,java为辅
web 容器处理JSP文件请求的三个阶段:
翻译阶段 编译阶段 执行阶段
jsp本质上是个servlet,在翻译阶段中会转成一个java文件,而这个java文件就间接的继承了Servlet
jsp中java代码表示方式:
<%@ %>
jsp指令
<%@ page import="" pageEncoding="utf-8" %>
定义页面的相关信息 import 导包 pageEncoding="utf-8" 指明该页面编码方式 utf-8 中文编码
<%@ include file="" %>
引入另外一个jsp文件
<% %>
jsp代码 小脚本
js 运行在客户端 jsp 运行在服务器端
<%! %> 全局变量 属性或方法放在这里面
<%= %> 表达式 取值
<%-- --%> jsp注释
JSP页面组成:静态内容、指令、表达式、小脚本、声明等元素组成
JSP中的注释:
(1)、HTML注释:
(2)、JSP注释标记:
<%--JSP注释(客户端不可以看到源代码)--%>
(3)、JSP脚本中注释
<%//单行注释%>、<%/*多行注释法*/%>
URL的组成部分:1、协议 2、主机名 3、路径
-------------------------------------------------------------------------
格式化时间日期为字符串类型方法:
java.text.*;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String XX=format.format(new Date());
yyyy年 MM月 dd日 hh 时 mm分 ss秒
-----------------------------------------------------------------------------
jsp三大指令:
<%@ page import="" pageEncoding="utf-8"%>
import 导包 pageEncoding="utf-8" 保证该jsp静态页面内容的编码方式 utf-8中文编码
<%@ include file="应用文件路径"%> 引入外部文件 降低代码冗余问题 修改也更加方便
<%@ taglib prefix="c" uri=""%>
================================================================================================================
jsp内置对象:
含义:
out:
输出对象
request:
请求对象
取参数值:(请求页面传过来的) 表单中传输,url中传过来
String request.getParameter(String name) 根据参数名(表单名)取参数值
String[] request.getParameterValues()
取一个参数名对应的多个值
取属性值:(作用域 page, request,session,application)都有这两个方法
request.setAttribute(String name,Object value) 设置属性值
request.getAttribute(String name); 根据属性名取相应的属性值
request.removeAttrbute(Striing name)
根据属性名删除相应的属性值
请求转发:
两个页面之间跳转:
forward()
步骤:
request.setAttribute(String name,Object value);
RequestDispather rd=request.getRequestDispatcher(String path);
rd.forward(request,response);
response:
响应对象
重定向:
sendRedirect()
步骤:
response.sendRedirect(String path);
session:
会话对象
取属性值:(作用域 page, request,session,application)都有这两个方法
session.setAttribute(String name,Object value) 设置属性值
session.getAttribute(String name); 根据属性名取相应的属性值
session.removeAttrbute(Striing name)
根据属性名删除相应的属性值
会话失效:
1. session.setMaxInternal(60*60); 以秒为单位 指定session的有效期 session 的非活动时间
2. session.invalidate() session立即失效
3. 配置方式
10
单位:分钟
每个用户都有一个唯一的session ,每个session 通过 sessionID来区分
application: 所有session都能共享的全局变量 ,代表该项目,在项目中任何地方都能访问
取属性值:(作用域 page, request,session,application)都有这两个方法
application.setAttribute(String name,Object value) 设置属性值
application.getAttribute(String name); 根据属性名取相应的属性值
application.removeAttrbute(Striing name)
根据属性名删除相应的属性值
application.getRealPath() 根据相对路径获取绝对路径
exception: 异常对象 处理异常的相关信息
重定向和请求转发的区别:
重定向:
客户端发挥作用,通过浏览器重新请求地址,通过新的地址实现页面转向,
在地址栏中可以显示转向后的地址,不能共享上一次请求中request内的数据。
转发:
服务器端发挥作用,指在服务器内部控制权的转移,通过forward()方法将提交信息在多个页面间进行传递,
在地址栏不会显示转向后的地址,能共享上一次请求中request内的数据
。
----------------------------------------------------------------------------------------------------
Cookie: 缓存:
步骤:
创建cookie对象:Cookie newCookie = new Cookie(String name,String value);
写入cookie: response.addCookie(newCookie);
读取cookie:Cookie[] cookies = request.getCookies();
方法:
void setMaxAge(); 设置cookie有效期 以秒为单位
void setValue(String value); 对cookie赋值
String getName();获取cookie名称
String getValue();获取cookie值
int getMaxAge() 获取cookie的有效时间,以秒为单位
session和cookie的区别:
session在服务器端保存用户信息,cookie是在客户端保存用户信息。
session中保存的是Object类型,cookie保存的是String类型。
session对象随会话结束而关闭,cookie可以长期保存客户端。
cookie通常用于保存不重要的用户信息,重要的信息使用session保存。
-------------------------------------------------------------------------------------------
页面之间的跳转:
1. 从表单页面 跳转到jsp页面
当点击提交按钮时,跳转到 action 属性执行的地址
2. 超链接方式跳转
xxx
3. 请求转发或者重定向
中文乱码问题:
中文编码有: gbk,gb2312,utf-8,gb18030
request请求:
post请求方式: form表单 method="post" 提交到jsp或者servlet
在请求的最上面设置中文编码
request.setCharacterEncoding("中文编码");
get请求方式:form表单 method="get" 如果没写method,默认为get提交方式,直接敲url也是get方式
1.统一修改
在web服务器即tomcat里面安装文件目录
D:\javasoft\apache-tomcat-7.0.68\conf 下server.xml文件内
大概在73行,加上URIEncoding="中文编码"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
2. 单独处理
先解码,再编码
//1.解码 tomcat服务器编码为iso-8859-1 ,他不支持中文
byte[] bt=abc.getBytes("iso-8859-1");
//2.编码 编成可识别的中文编码 utf-8
abc=new String(bt, "utf-8");
response响应:
直接在响应的最上方设置中文编码
response.setCharacterEncoding("中文编码");
==============================================================================
四大作用域:
(范围)
page:
当前页面
request:
请求响应页面
session:
整个会话过程
application: 整个项目
他们都共有四个方法
setAttribute(String name,Object value) 设置属性值
getAttribute(String name); 根据属性名取相应的属性值
removeAttrbute(Striing name)
根据属性名删除相应的属性值
======================================================================================
Javabean: 就是实体类
属性,构造方法,getter,setter方法
数据封装:
属性私有
业务封装:
公共的getter,setter方法
=====================================================================
JNDI: 全称: Java命名与目录接口(java Naming and Directory Interface)
连接池:
没有close()方法
===============================================================================
JDBC:
java.SQL.*
DriverManager:
Connection:
Statement / PreparedStatement
PreparedStatement能处理动态sql,带参数的sql语句
ResultSet:
查询地时候才会有
JDBC连接数据库的步骤:
加载jdbc
与数据库建立连接
发送SQL语句
并得到返回结果
处理返回结果
数据库访问结束后,进行资源释放
==================================================================================
分页:
分页的步骤:
文件上传:
form 表单属性 设置问题
============================================================================
分层开发:
三层架构: 表示层、业务逻辑层、数据访问层
分层原则:
1、上一层依赖下一层、依赖关系不跨层
2、下一层不能调用上一层
3、下一层不依赖上一层
4、在上一层中不能出现下一层的概念
使用三层架构开发的优点:
职责划分清晰、无损替换、复用代码、降低了系统内部的依赖程度
servlet主要完成业务逻辑层的功能
========================================================================
实现数据的分页显示:
步骤:
1、确定每页显示的数据数量 2、计算显示的总页数 3、编写SQL语句 4. 编写代码
===========================================================================
Servlet
概念:
Servlet是一个平台独立的Java类,它运行在服务器端,接收和处理用户请求,并作出响应。
servlet的继承体系:
参考javaeeAPI文档
javax.servlet包里面
servlet(接口)-----------》 实现类 GenericServlet(抽象类) 通用的一般的servlet-------------------》子类 HttpServlet(抽象类)
-----------------》自定义类,继承HttpServlet,必须重写service()方法,这个是主方法,servlet就是执行此方法的
如何创建Servlet:
new servlet 会自动创建该Servlet以及在web.xml里自动部署配置信息
其实就是让他继承HttpServlet即可
public class AServlet extends HttpServlet{}
访问Servlet 是根据他在web.xml里面配置信息 url-pattern来访问的
Servlet的生命周期:
加载和实例化,初始化,服务,销毁
方法:
init()
servlet初始化时调用此方法
service()
servlet执行时调用该方法
destroy()
容器关闭时即servlet销毁时调用该方法
service()方法: 既能处理get请求又能处理post请求
doGet() 处理表单中的get请求 url中直接输入的访问该servlet的网址属于get请求
doPost() 处理表单中的post请求方式
jsp内置对象在java中的对应类型:
out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request
response 响应对象 类型 javax.servlet.ServletResponse 作用域 Page
session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session
application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
servlet中的初始化参数:
需在web.xml里面配置
LifeServlet
servlet.LifeServlet
name
zhangsan
取初始化参数通过servletConfig对象来调用,每一个servlet都有一个ServletConfig对象
Servlet取初始化参数的方法
:
public ServletConfig getServletConfig() 先获取ServletConfig对象
String getInitParameter(String name) 根据初始化参数的名称取参数的值
HttpServletRequest中取参数值:
String getParameter(String name) 根据参数名来取参数值
String[] getParameterValues(String name) 根据参数名取得所有参数值 一个参数名对用多个值 常用于多选框,下拉选等
servlet之间的跳转:
请求转发: request:
特点:
1. 浏览器地址栏不会发生变化
2. 跳转前后里面的属性值能做到共享
3. 在服务器端实现
RequestDispatcher rd=request.getRequestDispatcher(String path);
请求转发: forward:
rd.forward();
重定向: response:
特点:
1. 浏览器地址栏会发生变化
2,跳转前后两个页面没有关系,属性不能共享
3. 在客户端浏览器起作用
response.sendRedirect(String path);
===========================================================================
EL:
EL表达式的全称是 Expression Language
语法:
${ el表达式 }
操作符:
[], .
关系操作符
==(eq)等于
!=(ne)不等于
<(lt)小于
>(gt)大于
<=(le)小于等于
>=(ge)大于等于
逻辑操作符
&&(and) 与
||(or) 或
!(not)非
隐式对象:
作用域对象:
pageScope 本页面
requestScope 请求
sessionScope 会话
applicationScope 程序
参数访问对象
Param 单一
paramValues 一组
jsp对象: pageContext
JSTL:
英文全称 中文名称
通用标签
条件标签
迭代标签
=========================================================================================
写项目过程中常见的错误:
2XX 3XX 没有问题
---------------------------------
4XX 客户端错误
404 一般url路径敲错比较多,或真是服务器没开启(1. 服务器确实没开启 2.服务器故障 重新配置 注意: 路径不要有中文字样)
5XX
服务器代码错误
按图索骥 常见的会报各种异常,在console里面都会有相应提示,具体到哪一行,直接点定位到该行,查找原因
一个方法可能会调用另外一个方法,该方法报错可能得往他调用的方法找
有些报错不是显示具体代码,显示服务器引擎内部报错 ,这种情况不太好找
报错可以用输出语句测试该方法执行到哪,或又没执行
中文乱码如果数据库中的数据没有乱码,那么就是servlet中的字符编码设置问题
如果没取到值,会报空指针异常,此时查看前台表单name对象和去参数方法取得是不是同一个对象
加入tomcat启动时就报错,没有访问浏览器,此时多数是web.xml里面配置文件有问题
如果找不到该类,说明该类的配置文件有问题,尤其是配置
如果跳转到另外一个页面包404错误,那么查找跳转的路径又没写错
wen-inf里面放的是web.xml 和 lib 包,如果方有其他文件,该文件客户端浏览器访问不到的,但是后台逻辑可以调用