三大领域: B/S(网站)C/S(QQ) 嵌入式开发(苹果,安卓手机)
动态网页/静态网页:
所需技术:html,css,数据库,javascript,xml,一门高级语言(java,C#,PHP)
主流的动态网页技术:jsp/asp.net/php
Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。目前最主流的三个Web服务器是Apache Nginx IIS(Microsoft的Internet信息服务器(Internet Information Services,IIS)
常见的web服务器:
1. weblogic oracle 公司
2. websphere IBM公司
3. Jboss 免费的开源的
4. tomcat 小型的
一、JSP 定义: 1)Java Server Page, Java EE 组件,本质上是 Servlet。
2)运行在 Web Container.接收 Http Request,生成 Http Response(默认协议是 Http 请求和响应)
3)JSP 使得我们能够分离页面的静态 HTML 和动态部分——我们需要的技术。
4)使页面可以混和html代码、Java代码以及JSP标签;允许访问组件
2、JSP出现:servlet做界面比较麻烦
3、JSP是编译运行,PHP为解释运行 (注)解释类:执行方式类似于我们日常生活中的“同声翻译”,应用程序源代码一边由相应语言的解释器“翻译”成目标代码(机器语言),一边执行,因此效率比较低,而且不能生成可独立执行的可执行文件,应用程序不能脱离其解释器,但这种方式比较灵活,可以动态地调整、修改应用程序。编译类:编译是指在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),因此其目标程序可以脱离其语言环境独立执行,使用比较方便、效率较高。但应用程序一旦需要修改,必须先修改源代码,再重新编译生成新的目标文件(*.OBJ)才能执行,只有目标文件而没有源代码,修改很不方便。
4、Tomcat的获取与安装
1. Tomcat安装完毕后要设置TOMCAT_HOME环境变量设置方法与java环境变量步骤类似,设置值为Tomcat的安装目录
2. Tomcat启动与停止
通过服务器实现启动或停止
通过控制面板>管理工具>服务>鼠标右击Apache Tomcat选择启动停止
通过Tomcat菜单中的Monitor Tomcat工具启动或停止Tomcat服务
通过所有程序>Apache Tomcat XX>Monitor Tomcat>General选择启动或停止
5、Tomcat目录结构
/bin 存放各种平台下用于启动和停止Tomcat的脚本文件
/conf 存放Tomcat服务器的各种配置文件,其中最重要的是server.xml
/lib 存放Tomcat服务器所需的各种JAR文件
/logs 存放Tomcat的日志文件
/temp Tomcat运行时用于存放临时文件
/webapps Web应用的发布目录
/work Tomcat把由JSP生成的Servlet放于此目录下
6、server.xml 配置
端口号的配置:
Tomcat目录下>conf>server.xml 打开后找到
http://localhost:8080/
Web应用的目录结构,web应用是位于tomcat/webapps目录下的一个子目录
/ web的根目录存放各类jsp,html
/WEB-INF 存放应用程序所使用的各种资源包括web.xml
/WEB-INF/classes 存放class文件
/WEB-INF/lib 存放JAR文件
配置web应用起始页:
修改web.xml文件中的以下两个标签,注意标签名
JSP的执行过程: 翻译阶段
编译阶段
执行阶段
JSP页面组成:静态内容 ,指令,表达式 ,小脚本 ,声明 ,注释
JSP中的注释:HTML注释,JSP注释标记,
JSP指令元素page
Language属性
Import属性
contentType属性
举例: <%@ page language="java" import="java.util.*,java.text.*" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
jsp表达式:其语法为<%= java表达式%>,容器会先计算表达式的值或者变量的值,然后将结果输出的页面
jsp声明 可以定义变量和方法,其中变量的值会一直保持,页面刷新不会重置该变量的值
定义在小脚本里面的变量,每次刷新页面会重置该变量的值
jsp页面中的代码执行加载顺序
java是在生成页面时在服务器端运行的代码,jsp在服务器的servlet里运行,而javascript和html都是页面生成完在浏览器端运行的代码。所以加载执行顺序是是java>jsp>js。
JSP内置对象:request,response,out,application,session
1. Request对象专门用于处理客户端请求
Request方法:String getParamenter(根据页面表单组件名称获取页面提交数据)
String[] getParamenterValues(获取一个页面表单组件对应多个值时的用户请求数据)
Void setCharacterEncoding(解决中文乱码)
Request.getRequsestDispacher(path)(返回一个javax.servlet.RequestDispacher对象,该对象用forward方法用于转发请求)
2. JSP内置对象response
1. response对象与request对象相对应,它用于响应客户端输出信息
2. response对象几个常用方法
addCookie(Cookie cookie) 在客户端添加Cookie
setContentType(String type) 设置HTTP响应的contentType类型
setCharacterEncoding(String chareet)设置响应所采用的字符编码类型
重点:( sendRedirect(String path) 将请求重新定位到一个不同的URL上)
(注)1. 什么是转发:
使用request的getRequestDispatcher()方法即可实现
转发就是将客户端发送请求到服务器,Web服务器内部的方法在容器内完成处理和请求和转发,然后将目标资源发送给浏览器,不管服务器内部如何处理,浏览器都只提出了一个请求,因而客户端的URL地址不会发生改变,因此可以共享request范围内的数据 转发的作用:在多个页面交互的过程中实现请求术数据的共享。
2. 重定向的执行结果就是客户端重新向服务器请求一个地址链接,由于是发送新的请求因而上次请求中的数据将丢失这种行为就是重定向 response.sendRedirect("welcome.jsp")]
重定向和转发的区别
区别一:
重定向时浏览器上的网址改变
转发是浏览器上的网址不变
区别二:
重定向实际上产生了两次请求
转发只有一次请求
重定向:
发送请求 -->服务器运行-->响应请求,返回给浏览器一个新的地址与响应码-->浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址-->服务器运行-->响应请求给浏览器
转发:
发送请求 -->服务器运行-->进行请求的重新设置,例如通过request.setAttribute(name,value)-->根据转发的地址,获取该地址的网页-->响应请求给浏览器
区别三:
重定向时的网址可以是任何网址
转发的网址必须是本站点的网址
详解:
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起
三、JSP访问数据库
1. JDBC链接数据库
(1) 加载JDBC驱动。
(2) 与数据库建立链接。
(3) 发送SQL语句,并得到返回结果。
(4) 处理返回结果。
(5) 数据库访问结束后,进行资源释放。
使用JSP访问数据库,就是将JDBC访问数据库代码嵌入到JSP页面中,实现步骤与java相同。
一. cookie
(一) 在jsp中使用cookie
1. 使用page指令
<%@page import=”javax.servlet.http.cookie”%>
2. 创建cookie对象
Cookie newCookie=new Cookie(String key,Object value);
3. 写入cookie
Response.addCookie(newCookie);
4. 读取cookie
Cookie[] cookies=request.getCookies();
(二) cookie对象的几个方法60*60*24
void setMaxAge(int expiry) 设置有效期,单位秒
void setValue(String value)
String getName()
String getValue()
Int getMaxAge() 获取有效期,单位秒
二. session
(一) session对象的几个常用方法
void setAttribute(String key,Object value);
Object getAttribute(String key)
void invalidate() 设置session对象失效
String getId() 获取session id
void setMaxInactiveInterval(int interval) 设置session的非活动时间
int getMaxInactiveInterval() 获取session的有效非活动时间
(二) session和cookie的区别
1. session是在服务器端保存用户信息,cookie是在客户端保存用户信息
2. session中保存的是对象,cookie中保存的是字符串
3. session对象随会话结束而关闭,cookie可以长久保存在客户端
4. cookie通常用于保存不重要的用户信息,重要的信息使用session保存
session和cookie
默认情况下,浏览器同一个进程的不同页面共享临时Cookie,这个Cookie保存的SessionID成为服务器端识别Session的依据
Seesion对象有效期:一次会话(浏览器关闭可能导致会话结束)怎么判断会话结束:IE进程结束,重新打开或换个浏览器,否则在桌面上重新打开一个浏览器是指一个seesion对象
类似于生活中 当登录某个网站 关闭了改窗口 重新 打开时 依旧有效
Seesion是保存在服务器中但是通过Cookie来实现
1. 重定向是客户端跳转,共有二次请求 转发是服务器端跳转 只有最开始打开页面的一次请求
对Cookie的赋值只有等下一次浏览请求时才能生效
1.page代表JSP这个实例本身(用的少)
2.PageContext(域对象,存放数据只能在当前页面有效)
3.session(域对象,存放数据在一次会话有效)
4.applaction(域对象 存放数据在整个Web应用运行周期有效)
5.cookie是由服务器端生成,发送给客户端浏览器的,浏览器会将其保存在某个目录下的文本文件中。
通过cookie,可以实现浏览器与服务器之间的数据传递。
就WEB开发来说,一个会话就是用户通过浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。
session与cookie均能实现信息的保存,但是二者的区别如下。
session是在服务器端保存用户信息,cookie是在客户端保存用户信息。
session中保存的是对象,cookie保存的是字符串。
session对象随会话结束而关闭,cookie可以长期保存在客户端。
cookie通常用于保存不重要的用户信息。我们可以降低代码的冗余问题,并且修改起来也更加方便
三.include指令:<%@ include file=”应用文件路径”%>
JSP的四种范围,分别为page、request、session、application
application:
全局作用范围,整个应用程序共享,就是在部署文件中的同一个webApp共享,生命周期为:应用程序启动到停止。
session:
会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记住这个会话状态。生命周期:会话超时,或者服务器端强制使会话失效。
request:
请求作用域,就是客户端的一次请求。
page:
一个JSP页面。
以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward以及filte
四.application
(一)常用方法:
void serAttribute(String key,Object value)
Object getAttribute(String key)
String getRealPath(String path) 返回相对路径的真实路径
五.对象的范围
(一)page范围:单一jsp页面的范围
pageContext.setAttribute(“属性名”,属性值)
(二) request范围:
request.setAttribute(“属性名”,属性值)
(三) session范围,可以跨越多个请求
session.setAttribute(“属性名”,属性值)
(四) application范围,全局有效
application.setAttribute(“属性名”,属性值)
六.jsp的常用内置对象:out,request,response,session,application
1)JavaBean是Java中可以跨平台的重用组件。
(2)JavaBean在应用中主要负责封装数据和封装业务处理。
(3)JavaBean的定义要遵循一定的规则,体现在以下几个方面:
1.公有类,并提供无参的公有构造方法.
2.属性私有。
3.具有公有的访问属性珠getter和setter方法。
分页
分页就是显示数据,能够按照指定格式显示,布局清晰,不受信息数量限制。
目前的分页方式有多种,一种是将所有查询结果保存在session对象或集合中,翻页的时候从session或集合取出一页所需的数据显示。这种方法有两个主要的缺点:一是用户看到的可能是过期数据;二是如果量非常大,查询一次结果集会耗费很长时间,并且存储的数据也会占用大量内存,效率明显下降。
用SmartUpload组件实现文件上传
SmartUpload组件式一个实现文件上传的免费组件,虽然已不再提供更新,但由于使用简单方便依然被非常广泛地使用。
SmartUpload组件的应用:
<% page import=”com.jspsmart.upload.*” %>
<%
SmartUpload su =new SmartUpload();
//初始化SmartUpload对象
Su.initialize(pageContext);
Try{
Su.upload();
} catch(Exception e){
e.printSackTrace();
out.println(“你选择的文件上传失败!”);
}
//得到单个上传文件的信息
Com.jspsmart.upload.File file=su.getFiles().getFile(0);
//设置文件在服务器的保存位置
String filepath=”upload\\”;
Filepath+=file.getFileName();
//文件另存为
File.saveAs(filepath,smartUpload.SAVE_VIRTUAL);
%>
作用:快速定位到作用域中的变量及其属性。
特点:1.自动转换类型。
2.使用简单
语法: ${EL表达式}
操作符:
.操作符: 可以获取对象的某个属性值(例:${employee.computer})
[]操作符: 既可以获取对象的某个属性值,也可以获取数组型对象的某个下标的值(例:${employee[“computer”]}, ${list[0]})
EL隐式对象
作用域访问对象:pageScope,requestScope,sessionScope,applicationScope。与page,request,session,application内置函数用法一致,可以访问作用域内设置的函数。(例requestScope.name)
参数访问对象:param,paramValues。可以访问对应标签的name属性值和JSTL中定义的变量。(例:${param.name} ${paramValues.habits})
JSP隐式对象:pageContext提供对页面信息和JSP内置对象的访问
[注:若查找时不指定作用域范围,则会照pageScope-requestScope―sessionScope―applicationScope顺序查找]
作用:可实现对页面中的逻辑控制
[注:使用前要导入核心标签库:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %> ]
通用标签
1.定义变量或重新赋值
2. 输出内容
3.移除变量
条件标签
内容…
举例
…登录表单
迭代标签
begin=”开始位置,默认为0” end=”结束位置” step=”递增量,默认为1”>
varStatus属性值:
current 当前迭代项
index索引
count 迭代计数
first 是否为第一次迭代
last 是否为最后一迭代
begin/end/step 标签的开始/结束/步长值
style="background-color:rgb(219,241,212);">
${product.name }
${product.area }
${product.price }
1.servlet
1.1 servlet ==>Java类
1.2 该java程序要遵守servlet开发规范(怎么遵守?通过 继承servlet接口)
1.3 servlet 是运行在服务器上的
1.4 servlet是jsp的基础
1.5 tomcat 3个功能: jsp容器 Web服务器 Servlet容器
3.servlet生命周期
3.1当用户第一次访问 servlet时,tomcat会帮忙把servlet对象创造出来(只有一个servlet对象)
3.2 然后调用init()方法 (只执行一次)
3.3以多线程的方式来处理客服端的请求 (调用了service()方法)
3.4 service()会自动根据 客服端来调用 doGet()或doPost()
3.5 servlet退出服务 (正常关闭才会调用,比如 关闭tomcat或更改.class文件 ,直接X掉web(浏览器)不会调用service())
二。servlet表单验证
1.创建web应用程序
2.在jsp文件中编写表单
!-- action提交的文件名与web.xml中标签
3.编写 servlet (Java类)LoginServlet(类名)
在类中获取表单的相关参数,并通过输出流输出
String username = req.getParameter("username");
String password = req.getParameter("password");
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/htmll;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("Login message ");
out.println("");
out.println("username: "+username);
out.println(" password: "+password);
out.println("");
out.println("
4.在web项目的web.xml中添加信息
L
LoginServlet
L
/kevin
5.发布项目 ,启动tomcat
6.在网页中输入地址
http://localhost:8080/jspch1101/index.jsp,输入用户名和密码点提交后会跳转到servlet页面
Servlet是一个符合特定规范的java程序,在服务器端运行,处理客户端请求并作出响应。
一、在调用Servlet时,首先要在程序中导入Servlet所需的包。
1.impoet java.io.*;
2.import javax.servlet.*;
3.import javax.servlet.http.*;
二、创建用于Web应用时Servlet继承自HttpServlet类。
三、实现doGet()或者doPost()方法。
四、Servlet的生命周期
1. 加载和实例化 (Servlet容器根据Servlet类的位置加载Servlet类,成功加载后,由容器创建
Servlet的实例)
2. 初始化 (init()方法只能被调用一次)
3. 服务 (调用Servlet的service()方法处理客户端请求)
4. 销毁 (销毁实例之前调用destroy()方法)
五、Servlet的编译和部署
编译产生的class文件放入web应用的WEB-INF/classes目录下
文件夹层次与包一致
例如 org.jbit.servlet.HelloServlet的class文件全路径为
WEB-INF/classes/org/jbit/servlet/HelloServlet.class
对于GenericServlet类中的init()和init(ServletConfig config)
在开发中我们是使用GenericServlet的子类HttpServlet的,而HttpServlet继承了GenericServlet中
的init()和init(ServletConfig config)方法,而在init(ServletConfig config)中会调用init()的,
而且系统会在init(ServletConfig config)方法中执行下面语句:
public void init(ServletConfig config){
this.config = config;//this.config为GenericServlet类的config
init();
}
其实在父类的有参init方法中会隐式的调用无参的init的方法,仅此而已,没什么难的,初始化时永远都调用的是有参的init的方法。
在GenericServlet中,从servlet接口带来的init(ServletConfig config)对它进行重写时,如果忘了调用super.init(config)时,就会出现空指针异常,为了解决这样的
情况,GenericServlet中于是有了一个无参的init()方法,推荐大家重写init方法时,
重写无参的init()方法.
(第一种init()方法是Servlet接口中init()方法的实现。这种方法中,首先将ServletConfig对象保存在一个transient实例变量中,然后调用第二种不带参数的init()方法。
通常我们在编写集成自GenericServlet的Servlet类时,只需重写第一种不带参数的init()方法就可以了。如果覆盖了第一种init()方法,那么应该在子类的该方法中,包含一句super.init(config)代码调用。)
web.xml文件中Servlet映射路径
对于如下的一些映射关系:
• Servlet1 映射到 /abc/*
• Servlet2 映射到 /*
• Servlet3 映射到 /abc
• Servlet4 映射到 *.do
注意: *.do这种形式优先级别最低
· load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级。
· 它的值表示servlet应该被载入的顺序
· 当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
· 如果值小于0或未指定时,则表示只有在第一次请求的容器才在该servlet调用初始化函数
· 正值越小,servlet的优先级越高,应用启动时就越先加载。
· 值相同时,容器就会自己选择顺序来加载。
一、 什么是Ajax
Ajax是几个单词首字母的缩写:Asynchronous(异步的) JavaScript And Xml。Ajax并不是一种全新的技术,而是整合了几种现在的技术:JavaScript、XML和CSS。主要是JavaScript,我们通过JavaScript的XMLHttpRequest对象完成发送请求到服务器并获得返回结果的任务,然后使用JavaScript更新局部的网页,异步指的是,JavaScript脚本发送请求后并不是一直等着服务器的响应数据。XML一般用于请求数据和响应数据的封装,CSS用于美化页面样式。
二、 XMLHttpRequest
1、 XMLHttpRequest的常用方法
Open(method,URL,async): 建立于服务器的连接,method参数指定请求的HTTP方法;URL参数指定请求的地址;async参数指定是否使用异步请求,其值为true或false。
Send(conetent): 发送请求,content参数指定请求的参数。
SetRequestHeader(header,value): 设置请求的头信息。
2、 XMLHttpRequest的常用属性
Onreadystatechange: 指定XMLHttpRequest对象的回调函数。
ReadyState: XMLHttpRequest的状态信息
0 表示已经创建一个对象,但还没初始化
1 表示对象开始发送信息
2 表示对象的请求发送完成
3 对象开始读取响应
4 对象读取响应结束
Status HTTP的状态码,仅当ReadyState的值为3或4时,status属性才能使用
200 服务器响应正常
400 无法找到请求的资源
403 没有访问权限
404 访问的资源不存在
500 服务器内部错误
ResponseText: 获得响应的文本信息
ResponseXML: 获得响应的XML文档对象
三、 使用Ajax技术实现异步的步骤
1、 创建XMLHttpRequest对象。
2、 通过XMLHttpReuqest对象设置请求信息。
3、 向服务器发送请求。
4、 创建回调函数,当XMLHttpRequest对象状态改变时,根据响应状态动态更新页面。
四、 Ajax的工作过程
1、 通过XMLHttpRquest对象向服务器发送信息。
2、 使用XMLHttpRequets对象解析服务器响应数据
3、 通过JavaScript脚本动态更新页面
举例
function doAjax() {
createXMLHttpRequest();
var name = document.getElementById("uname").value;
var pwd = document.getElementById("upwd").value;
if(XMLHttp!=null){
var url ="LoginServlet?uname="+name+"&upwd="+pwd;
XMLHttp.open("POST",url,true);
XMLHttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded;");
XMLHttp.onreadystatechange=processRequest;
XMLHttp.send(null);
}else{
alert("不能创建XMLHttpRequest对象实例")
}
}
function processRequest() {
var messdiv = document.getElementById(“mess”);
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200) {
//responseText表示请求完成后,返回的字符串信息 if (xmlhttp.responseText == "false")
messdiv.innerHTML = "用户名可以使用";else
messdiv.innerHTML = "用户名已被使用"; } else {
alert("请求处理返回的数据有错误");
}
}
}
1.必须继承自HttpServlet
2.必须实现doGet()或者doPost()
3.必须在web.xml中配置Servlet
例:
函数:
HttpServeltRrequest:请求对象
getParameter():获得表单元素的值
getAttribute():获得request范围中的属性值
setAttribute():设置reqeust范围中的属性值
setCharacterEncoding():设置字符编码
HttpSerletResponse:相应对象
sendRedirect():外部跳转
getWriter():获得输出流对象
setContentType("text/html; charset=utf-8"):设置相应内容格式和编码
1.Session
HttpSession session = request.getSession();
session.setAttribute("name", "zhangsan");
session.setAttribute("pwd", "aaa");
String name = (String) session.getAttribute("name");
2.cookie:
//创建Cookie
Cookie cookie = new Cookie("name", "zhangsan");
//设置Cookie的超时时间
cookie.setMaxAge(24 * 60 * 60 *60);
//把Cookie发送到客户端
response.addCookie(cookie);
//得到客户端发送的Cookie
Cookie [] cookies = request.getCookies();
for(int i=0; i
request.getParameter("name");
4.Url重写
问号传参
LoginServlet?username=zhangsan&pwd=123
String name = request.getParameter("username");
String pwd =request.getPareameter("pwd");
内部跳转:
LoginServlet
request.getRequestDispatcher("index.jsp").forward(request, resposne);
外部跳转:
response.sendRedirect("index.jsp");
内部跳转是一次请求和一次响应
外部跳转是两次请求和两次响应
ServletContext:Servlet上下文对象
它是一个公共区域,可以被所有的客户端共享
setAttribute():向公共区域里放入数据
getAttribute():从公共区域里取数据
三个标准范围:request, session, ServletContext
共同点:都有setAttribute(), getAttribute()
区别:范围不同,request < session < servletContext
服务器上的五大对象
request, response, servlet, session, servletContext
过滤器
生命周期:
1.实例华:
2.初始化:init()
3.过滤:doFilter()
4.销毁:destroy()
5.不可用
配置
1.Filter:init(), doFilter(), destroy()
2.FilterChain: doFilter(request, response)
3.FilterConfig:getFilterName(), getInitParameter(),
--->1--->2--->3--->Servlet 请求
<----1<---2<---3<--- 响应
1.ModelI:jsp+JavaBean
2.ModelII:jsp+Servlet+JavaBean
jsp---view
servlet---control
javabean---model
MVC:
M--Model:模型:访问后台数据库
V--view:视图:展示
C--control:控制器:控制程序流程
ModelII和MVC的关系:
MVC是一种设计模式,ModelII它是MVC的一种具体的实现