JavaWeb开发技术基础概念回顾篇

JavaWeb开发技术基础概念回顾篇

第一章 动态网页开发技术概述

1.JSP技术:JSPJava Server Page的缩写,指的是基于Java服务器端动态网页。

2.JSP的运行原理:当用户第一次请求某个JSP文件时,容器首先检查JSP文件的语法是否正确,然后将JSP文件转换成Servlet原文件,并调用Java工具类将Servlet原文件编译成字节码文件。接下来,容器加载转换后的Servlet类,实例化一个该类的对象处理客户端的请求,请求处理完成后,容器将HTML格式的相应信息发送给客户端,执行过程如图所示:

 

 

3.JSP的特点:A.将内容的生成和现实分离  B.使用可重用的组件  C.采用标签简化页面开发   D.完善的存储管理和安全性  F.一次编写,处处运行

4.JSP2.0 新功能 A.引入表达式语言 B.简单标签  C.使用JSP fragment

第二章 静态网页开发技术

1.JavaScript简介:JavaScript是一种动态的、弱类型的、基于对象和事件驱动的脚本语言,它的解释器被称为JavaScript引擎,是浏览器的一部分。

2.JavaScript中的事件:是指某个对象发出的消息,标志着某个特定行为的发生或某个特定的条件成立。常见的事件:A.点击事件onClick  B.改变事件onChange  C.选中事件onSelect   D.聚焦事件 对事件处理的代码叫做:事件处理程序,它通常有函数实现。

3.常见的对象:String对象、document对象、window对象。

4.CSS概述:Cascading Style Sheets即层叠样式表,简称样式表,CSS是一种为网站添加布局效果的出色工具。为我们的网站披上一件华丽的外衣。

5.CSS的优点:A.通过单个样式表控制多个文档的布局 B.更精确的布局控制  C.为不同的媒体类型采取不同的布局。

第三章 JSP基本语法

1.页面构成:脚本元素:声明、脚本段、表达式;注释:HTML注释、Java注释、JSP隐藏注释;指令元素:pageincludetaglib等;动作元素:jsp:includejsp:forwardjsp:useBean等。

2.page指令:页面指令,用来定义整个JSP页面的属性和相关功能。Language属性(指定脚本元素中使用的脚本语言,默认为Java)、contentType属性(指定JSP页面输出内容的类型和字符编码方式)、pageEncoding属性(指定JSP页面的字符编码)、info属性(页面的描述信息)、import属性(导入脚本元素中用到的Java类)、session属性(指定当前页面中内置对象是否可用)、errorPage属性(指定当前页面在运行过程中发生异常时,转向哪里进行异常处理)、isErrorPage属性(指定当前页面是否是异常处理页面)、buffer属性(设置JSP内置对象out的缓冲区大小或不使用缓冲区)、autoFlush属性(指定当out对象的缓冲区填满时,缓冲区是否自动刷新)、isELgnored属性(指定JSP页面中是执行还是忽略EL表达式,属性的值为布尔类型)

3.include指令:作用是在JSP页面中静态包含一个文件,被包含的文件必须和当前JSP也处于同一个Web应用中。<%@ include file=”” %>先包含后编译。而<jsp:include page=”” />是动态包含其他资源即先编译后包含。

第四章 JSP内置对象
1.九大内置对象:

对象名

类型

对象说明

out

javax.servlet.jsp.JspWriter

HTML标准输出

request

javax.servlet.http.HttpServletRequest

封装请求消息

response

javax.servlet.http.HttpServletResponse

封装响应消息

session

javax.servlet.http.HttpSession

封装会话消息

application

javax.servlet.ServletContext

封装应用信息

pageContext

javax.servlet.jsp.PageContext

封装当前JSP页面的上下文信息

exception

java.lang.Throwable

封装异常处理信息

config

javax.servlet.ServletConfig

封装JSP页面的Servlet配置信息

page

java.lang.Object

如同Java中的this

 

out对象

向浏览器输出数据的方法:A.void print()  B.void println()  C.void newline()输出新的一行

操作缓冲区的方法:void flush() 刷新缓冲区的数据到客户端   void close()刷新缓冲区,并关闭输出流。

request对象

reqeust对象封装了浏览器的请求消息,通过request对象的各种方法可以获取客户端以及用户提交的各项请求信息,请求信息包括请求的头部信息、请求方式、请求的参数名称、参数之等。

获取请求参数信息的方法:String getParameter(String name):获取请求参数name的值,并以字符串形式返回,如果参数name不存在则返回null

String[] getParameterValues(String name):获取请求参数name的所有参数值,返回的是字符串数组,如果参数name不存在则返回null

Enumeration<String>getParameterNames():获取请求中所有参数的名称

Map<String,String[]> getParameterMap():以Map类型返回请求的所有参数,其中参数名作为MapkeyMapvalue是这个参数名对应的所有参数值的字符串数组。

Object getAttribute(String name):返回指定名称的属性值,如果指定的属性不存在,则返回null

void setAttribute(String name, Object o):在请求对象中存储名称为name,值为o 的属性。

void removeAttribute(String name):删除指定名称的属性。

response对象

void sendReridect(String url):将页面重新定向到url指定的地址。这个方法必须在响应被提交之前调用,否则会抛出异常。

session对象

session对象是在会话范围内,记录每一个客户端的访问状态,以便于跟踪每一个客户端的操作。

工作原理:当客户端首次访问服务器的JSP页面时,服务器会为该客户端分配一个session对象,同时为该session对象指定一个唯一的ID,这个ID被存储在Cookie对象中随着响应对象返回给客户端,使得客户端与服务器的session对象建立一一对应关系。当客户端继续请求服务器上的其他资源时,存储着session IDCookie对象会随着请求对象一起发送到服务器,此时服务器通过session ID找到客户端所对应的session对象。客户端的session ID 一直有效,直到客户端浏览器关闭、超时或调用sessioninvalidate()方法使其失效。 session ID 失效表示客户端与服务器的会话结束,客户端再次连接服务器时,会为其重新分配session对象。

常用方法:

void setAttribute(String name, Object value)Object getAttribute(String name)void removeAttribute(String name)getId():获取session对象ID boolean isNew():判断是否为新的会话、setMaxInactiveInterval(int interval):设置session对象的最大持续时间,单位是秒。void invalidate():使session对象失效.

Cookie简介

Cookie通常用于浏览器端保存会话过程中的一些信息,如登陆信息、会话ID等。他不属于JSP内置对象。

功能:Cookie可以实现让站点跟踪特定访问者的访问次数,最后访问时间以及访问者最后进入站点的路径;Cookie能够帮助站点统计用户个人资料以实现各种各样的个性化服务;Cookie在同一站点实现自动登陆功能,使得用户不用输入用户名和密码就可以进入曾经浏览的站点。

Cookiesession对象的区别:

A.存放地点:Cookie对象存放在客户端的硬盘里,属于离线存放;session对象存放在服务器的内存中;B.存活时间:Cookie对象可以长时间存放在客户端,具体时间由setMaxAge()方法所指定的数值决定;sessino对象随着用户访问服务器而产生,虽客户端的超时或下线而消失。 C.安全性:Cookie对象存放在客户端,可能会被别有用心的网站读取,安全性较差,session对象存放在服务器的内存中,用户不能修改,安全性较好。

application对象

application对象负责为JSP页面提供在服务器运行的一些全局信息,它在服务器启动时创建,直到服务器关闭时消失。

第五章JDBC访问数据库

JDBC访问数据库的步骤:导入java.sql--->加载数据库驱动--->定义数据库的连接地址,用户名和密码---->得到与数据库的连接对象--->声明SQL语句--->得到语句对象--->执行SQL语句---->处理SQL语句的返回结果--->关闭对象。

JDBC连接mysql代码:

package com.jinzhi.db;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

public class DBManager {

private Connection conn;

 

private PreparedStatement ps;

 

protected ResultSet rs;

/**

 * 拿到数据库连接

 * @return

 */

protected Connection getConn() {

Connection conn = null;

try {

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/book?characterEncoding=utf-8", "root", "");

System.out.println("连接成功!");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return conn;

}

/**

 * 查询数据库

 * @param sql

 * @param obj

 * @return

 */

public ResultSet query(String sql, Object[] obj) {

this.conn = this.getConn();

try {

ps = this.conn.prepareStatement(sql);

if(obj != null && obj.length > 0) {

for (int i = 0; i < obj.length; i++) {

ps.setObject(i + 1, obj[i]);

}

}

rs = ps.executeQuery();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return rs;

}

/**

 * 数据更新方法

 * @param sql

 * @param obj

 * @return

 */

public int update(String sql, Object[] obj) {

this.conn = this.getConn();

int count = 0;

try {

ps = this.conn.prepareStatement(sql);

if(obj != null && obj.length > 0) {

for (int i = 0; i < obj.length; i++) {

ps.setObject(i + 1, obj[i]);

}

}

count = ps.executeUpdate();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return count;

}

 

/**

 * 关闭数据库

 */

public void closeAll() {

try {

if(rs != null) {

rs.close();

rs = null;

}

if(ps != null) {

ps.close();

ps = null;

}

if(conn != null) {

conn.close();

conn = null;

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static void main(String[] args) {

DBManager manager = new DBManager();

System.out.println(manager.getConn());

}

}

 

 

使用JavaBean组件

软件可重用技术的核心在于可重用组件,JavaBean提供了通用功能,可以在Java应用中重复使用。

使用JavaBean的好处:可以使得JSP页面变得清晰;节省软件开发时间;降低系统维护的难度;为JSP也能够用带来了更多的伸缩性,使系统变得健壮和灵活。

第六章Servlet技术

ServletJava语言编写的程序,运行于支持JavaWeb服务器或应用服务器中。它优于JSP出现,提供和客户端动态交互的功能。

优点:可移植性、安全、高效。

Servlet生命周期

1)当客户端第一次请求Servlet时,Servlet被加载到内存,容器会创建这个Servlet的实例,并调用init方法进行初始化工作。

2)容器创建请求对象和响应对象,然后调用Servletservice方法为客户端提供服务。

3)Servlet不在被需要时,容器调用Servletdestroy()方法将Servlet实例销毁。

4)Servlet的整个生命周期中,init方法和destroy方法只会被调用一次。

如下图:

Servlet过滤器,

Servlet过滤器是一种Java组件,它位于客户端和处理程序之间,能够对请求和响应进行检查修改。它通常用来完成一些通用的操作,如统一字符编码、字符编码、加密、实施安全控制等。摘网上图,如下图:

 

Servlet监听器

Java中的监听器类似,Servlet监听器也用来监听重要事件的发生,只不过它监听的对象是Web组件。

有关Servlet监听器接口及事件类参考网址:http://blog.csdn.net/b_qxzb/article/details/47402095博客

Jspservlet的相同点和不同点:

JSPServlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"servlet"ServletJSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是JavaHTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

 

什么事MVC模式,使用MVC模式开发系统有哪些优缺点?

1MVC原理

  mvc是一种程序开发设计模式,它实现了显示模块与功能模块的分离。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分模型、视图、控制器三层。

1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块(web项目中的Action,dao类)和数据模块(pojo类)。模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性

2、视图(view) 用户与之交互的界面、在web中视图一般由jsp,html组成

3、控制器(controller)接收来自界面的请求 并交给模型进行处理 在这个过程中控制器不做任何处理只是起到了一个连接的做用

 

2MVC的优点

1、可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。

2、视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。

3、模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。

4、潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。

 

3MVC的不足之处

1、增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。

2、视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。

3、视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。

4、目前,一般高级的界面工具或构造器不支持模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。

 

第七章EL表达式

EL隐含对象

隐含对象

描述

pageContext

页面上下文对象,用于访问JSP的内置对象,如:applicationresponseout

param

Map对象,存储参数名和单个值的映射

paramValues

Map对象,存储参数名和一个数组的映射

header

Map对象,存储请求头中的信息名和单个值的映射

headerValues

Map对象,存储请求头中的信息名和一个数组的映射

cookie

Map对象,存储请求中cookie名和单个值的映射

initParam

Map对象,存储Web应用在上下文初始参数和单个值得映射

pageScope

Map对象,存储页内有效范围内的命和值得映射

reqeustScope

Map对象,存储请求有效范围内的命和值得映射

sessionScope

Map对象,存储会话有效范围内的命和值得映射

applicationScope

Map对象,存储应用范围内的命和值得映射

JSTL标签 

核心标签库

完成JSP页面的常用功能

格式标签库

国际化标记

SQL标签库

访问基本的关系型数据库的能力

XML标签

处理和生成XML的标记

函数标签库

字符串操作函数

JSTL 标签大全详解参考博客:http://blog.csdn.net/qq_25827845/article/details/53311722

补充一个知识点:

关于jQuery.ajax()使用实例:

使用jQuery.ajax()方法获取数据,下边给个常用写法,并做了相应的注释。

 代码如下

$.ajax({

 url: "http://www.hzhuti.com", //请求的url地址

 dataType: "json", //返回格式为json

 async: true, //请求是否异步,默认为异步,这也是ajax重要特性

 data: { "id": "value" }, //参数值

 type: "GET", //请求方式

 beforeSend: function() {

  //请求前的处理

 },

 success: function(req) {

  //请求成功时处理

 },

 complete: function() {

  //请求完成的处理

 },

 error: function() {

  //请求出错处理

 }

});

使用jQuery.ajax()

这里将显示数据

$.ajax我的实际应用例子

//1.$.ajax带json数据的异步请求

var aj = $.ajax( {

 url:'productManager_reverseUpdate',// 跳转到 action

 data:{

    selRollBack : selRollBack,

    selOperatorsCode : selOperatorsCode,

    PROVINCECODE : PROVINCECODE,

    pass2 : pass2

 },

 type:'post',

 cache:false,

 dataType:'json',

 success:function(data) {

  if(data.msg =="true" ){

   // view("修改成功!");

   alert("修改成功!");

   window.location.reload();

  }else{

   view(data.msg);

  }

  },

  error : function() {

   // view("异常!");

   alert("异常!");

  }

});

//2.$.ajax序列化表格内容为字符串的异步请求

function noTips(){

 var formParam = $("#form1").serialize();//序列化表格内容为字符串

 $.ajax({

  type:'post',  

  url:'Notice_noTipsNotice',

  data:formParam,

  cache:false,

  dataType:'json',

  success:function(data){

  }

 });

}

//3.$.ajax拼接url的异步请求

var yz=$.ajax({

  type:'post',

  url:'validatePwd2_checkPwd2?password2='+password2,

  data:{},

  cache:false,

  dataType:'json',

  success:function(data){

   if( data.msg =="false" ) //服务器返回false,就将validatePassword2的值改为pwd2Error,这是异步,需要考虑返回时间

   {

    textPassword2.html("<font color='red'>业务密码不正确!</font>");

    $("#validatePassword2").val("pwd2Error");

    checkPassword2 = false;

    return;

   }

  },

  error:function(){}

});

//4.$.ajax拼接data的异步请求

$.ajax({

 url:'<%=request.getContextPath()%>/kc/kc_checkMerNameUnique.action',

 type:'post',

 data:'merName='+values,

 async : false, //默认为true 异步

 error:function(){

  alert('error');

 },

 success:function(data){

  $("#"+divs).html(data);

 }

});

 

 

 

 

posted @ 2017-06-25 15:16  懒得烧蛇吃  阅读(564)  评论(0编辑  收藏  举报