【Java Web初级系列教程】Web基础知识

前言:刚上手Java Web的时候,想寻找好一点的网上教程,发现网上资源鱼龙混杂,框架满天飞,对于新手刚开始就希望从基础的原理性的开始一步步了解,索性自己搜集材料开始写。

      本系列教程专门为Java Web初级开发者设计,阶梯式的循序渐进,没有用到任何框架,都是基础篇,一步步带你揭开Java Web应用的面纱,这是第一篇。

       背景说明

            任何事物的产生都是有原因的,为什么会有Java Web应用程序呢?

            话说女娲补石、盘古开天辟地。。算了,不扯蛋了,认真讲,Java Web应用程序解决了一件事:创建可交互的动态网页。为什么这么说?如果你想创建一个静态网页,用HTML就可以了,不用创建Java Web应用,HTML是超文本标记语言,直接存在服务器上,一个URL定位到HTML文件就好了,但是要想产生动态交互,你就需要Java Web应用。Java Web应用呢,就是通过Servlet和JSP来实现动态交互的。好,大家暂且先记住:1.Java Web是用来创建动态网页的;2.Java Web通过Servlet和JSP来创建动态网页。后面我会慢慢解释。

     目录:

           1.Web服务器和客户端

           2.HTML和HTTP

           3.URL

           4.为什么是Servlet和JSP?

           5.通过Servlet和JSP实现的第一个Web应用(***)

           6.Web容器

           7.Web应用目录结构

           8.发布描述Web.xml


  1.Web服务器和客户端  

Web服务器说白了就是个软件,这个软件能够处理来自客户端的请求,能够将客户端想要的东西发给客户端。就是这么地简单,例如:Apache就是用的很广泛的Web服务器,服务器软件是运行在物理机上的,同时一直监听着某个端口,这个端口就是客户端发送数据过来的入口。

         客户端就更简单了,浏览器就是我们最常用的客户端软件,Chrome、Safari、火狐等等。客户端的作用就是将我们的请求发给服务器,最常见的比如通过URL(浏览器地址栏输入网址),然后将服务器发送回来的数据解析后展现出来,方便我们看,我们现在看到的网页都是浏览器解析后展现出来的。

  2.HTML和HTTP

     有了Web服务器和客户端,他们需要交流互动啊!这二个是不同的软件,就好像是二个不同国家的人,他们之间怎么沟通呢?这个时候就需要一种互相都能理解的语言,对二个不同国家的人,通用的语言就是英语,对于Web服务器和客户端,通用的语言就是HTML(HyperText Markup Language)超文本标记语言,比简单文本说的多就叫“超文本”,那这二个人约定好语言之后,又有了新的问题,他们不站在一起,一个在中国,一个在美国,怎么沟通呢?客户端和服务器也是一样,约定好语言之后,还需要一套协议,定义好谁先开始讲话,说什么话,另一个人应该怎么回应?那这套讲话的标准就是HTTP,HTTP就规定了客户端先开始讲话,先说的内容包括:HTTP Method、URL等等,告诉服务器我想通过什么样的方法(get/post)从你这取什么数据(URL),下面是一个客户端请求的例子:
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache

服务器接收到通过HTTP讲话方式讲的话之后,也通过HTTP方式回应客户端,包括有:状态码、日期、服务器类型、内容长度、内容类型等,例子如下:

200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII

<!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=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>
注意,服务器按照HTTP方式在回应客户端时候,有一项
Content-Type: text/html;charset=US-ASCII
“Content-Type”是告诉客户端我讲的是什么类型的话,chartset就是话的规范,就好像说我用的美式英语跟你讲的,服务器你要注意切换一下听的方式。

3.URL

   URL是Universal Resource Locator (通用资源定位符),URL就是用来定位服务器上资源的。服务器上的每一个资源都有它唯一的地址,URL就是找到它的线路。让我们看一条URL:
http://localhost:8080/FirstServletProject/jsps/hello.jsp
http://  - 这部分是URL的第一部分,就是我们上面说的服务器和客户端沟通的标准(协议);
localhost  -这部分是服务器的标识,很多时候是IP地址或者域名,域名(例如www.baidu.com)最后也会被DNS(域名解析服务)转成IP,是用来定位资源在哪台服务器的。
8080 -这个也是我们上面提到过的Web服务器会监听一个网络端口,看这个端口是否有数据进来,这个端口是可选的,如果我们不提供的话,客户端的请求数据会根据使用的协议进默认的端口(HTTP协议是80,HTTPS是443,FTP是21),这些提前规定好的端口0-1023是系统保留端口。
FirstServletProject/jsps/hello.jsp  -这个就是被请求的资源。他可以是静态的资源,例如html、pdf,也可以是动态的,例如JSP、Servlet、PHP等。

4.为什么是Servlet和JSP?

    对于HTML,服务器处理起来很简单,静态的资源,你客户端请求我就直接给你,不用做任何复杂操作,但是在生成动态内容和数据持久化(把数据保存下来)上有问题,比如你在页面上选了个商品,想直接查看商品详情,如果是静态的你需要用另一个URL去查看商品详情,服务器不能动态根据你的操作动态给你反馈,这个是动态的问题,那还有你精心编辑好的微博发送到后台,后台也没法给你存下来(因为后台没有处理程序,都是静态的HTML),这个是持久化的问题,Servlet和JSPs就是干动态和持久化的,他们扩展了服务器的功能,为动态数据更新和数据持久化提供了支持。

5.通过Servlet和JSP实现的第一个Web应用

     接下来是重头戏,我会用MyEclipse和Tomcat构建我们第一个Demo。因为Servlet是服务端技术,我们需要Web容器来支持Servlet运行,这里我们用Apache Tomcat充当Web容器。Tomcat很容易装,这部分工作留给你自己。

在MyEclipse 中点击File->New->Web Project  输入“MyFirstServlet”创建新的Web应用程序,如下图


创建好之后点击工程,右键New Servlet,如下图所示:


       现在我们在doGet()方法内添加一些动态数据代码,我们第一个Servlet就像下面这样:

package com.jige.first;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(
		description = "My First Servlet", 
		urlPatterns = { "/FirstServlet" , "/FirstServlet.do"},
		initParams = {
			@WebInitParam (name="id",value="1"),
			@WebInitParam(name="name",value="Jack")
		}
)
public class FirstServlet extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	public static final String HTML_START="<html><body>";
	public static final String HTML_END="</body></html>";
	
	public FirstServlet() {
		super();
	}

	public void destroy() {
		super.destroy(); 
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		Date date = new Date();
		out.println(HTML_START + "<h2>Hi There!</h2><br/><h3>Date="+date +"</h3>"+HTML_END);
	}

	public void init() throws ServletException {
		// Put your code here
	}

}
这里要说的一点是在Servlet 3之前,我们需要在应用部署描述(web.xml)文件中提供Servlet声明和映射,但是Servlet 3使用java annotations告诉Servlet Container(Apache)这是一个Servlet,既简单又容易维护。

我们点右键,运行  Run As->MyEclipse Server,在浏览器输入地址http://localhost:8080/MyFirstServlet/FirstServlet,效果如下:



你可以刷新网页,数据是动态变化的。

因此Servlet这里就是用来生成HTML,并返回给response对象,容器将response返回给客户端。通过Servlet创建动态网页很简单,但是也很容易出错,遇到大数据量更是如此(你想啊,你用Java写html,估计没几个人会这么做吧!),因此就有了JSP,JSP语法结构上和HTML类似,只是添加了我们需要的动态内容。

JSP很容易看懂,长得像HTML嘛。那下面我们通过JSP实现刚才的效果:

<%@page import="java.util.Date" %>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>hello</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  
  <body>
    <h2>Hi There!</h2> <br>
    <h3>Date=<%= new Date() %>
  </body>
</html>
实现后效果一样。后面我会更详细的介绍Servlet和JSP,现在我们先还是把Java Web基础知识看完。

6.Web容器

Tomcat是个Web容器,它处理来自客户端的请求。具体流程是这样的,当请求过来的时候,如果这个请求是请求servlet的,web容器会创建二个对象HTTPServletRequest and HTTPServletResponse,然后,根据请求的URL找到对应的Servlet,为这个请求创建一个线程,然后调用Servlet的service()方法,在service()方法基础上调用doGet()和doPost()方法,Servlet doGet()和doPost()生成动态网页然后将它传递给response。一旦servlet线程完成,容器将response发给客户端。
Web容器几个核心功能:
      1.通信支持  - 容器提供了Web服务器和Servlet/JSP之间最简单的沟通方式,因为容器的存在,我们不需要自己写一个程序去监听服务器端口(就像上面说的HTTP:80),也不需要自己解析来自客户端HTTP请求,生成发给客户端的HTTP应答内容,这些工作容器都给做好了,我们只需要关系核心业务逻辑的实现;
      2.生命周期和资源管理 - 容器来负责管理Servlet的生命周期。容器创建线程,将Servlet加载到内存,调用Servlet的方法,销毁它们,不需要程序开发者自己维护Servlet的生命周期。容器还提供了像JNDI来实现资源池的管理。
      3.多线程的支持 - 容器为每一个到Servlet的请求创建一个线程,当处理完请求后结束线程。容器不会为每一个请求创建一个Servlet,因此Servlet是共用的,在Servlet中应当注意共享资源的同步问题,以及资源的死锁,这个后面会讲到。
      4.JSP的支持  - JSP不像一般的Java 类一样,容器会将每一个JSP编译成Servlet,然后容器会像管理其他Servlet一样管理JSP编译成的Servlet。
      5.其他任务  - 容器还提供了资源池管理、内存优化、垃圾回收、安全配置、多个应用支持、热部署和幕后的任务等等。

 7.Web应用目录结构

      Java Web应用可以被打包成Web Archive(WAR),它有一个定义好的结构。你可以把上面写的应用程序导出成War包,然后解压检查目录。目录结构如下:

8.发布描述Web.xml

        web.xml文件是Web容器的部署描述,同时包含了servlets的映射(在3.0之前),欢迎首页,安全配置,session timeout配置等等,这些我会在系列教程的后面讲到。

嗯嗯嗯,最后的话,机哥留个QQ:493967121  欢迎Java Web开发工程师互相学习交流。

<>人民邮电出版社的教程哦,所以,好书,你懂的!! 第1章web应用开发简介 1 1.1何为web应用 1 1.1.1web的概念及发展 1 1.1.2web应用程序 2 1.2使用java开发web应用 3 1.2.1面向对象的编程语言 3 1.2.2丰富的框架技术 4 1.2.3xml、css的应用 4 1.2.4使用javascript与ajax提升用户体验 7 1.3多种集成开发环境 9 1.3.1集成开发环境简介 9 1.3.2web应用服务器说明 11 本章小结 14 课后练习 14 第2章 javaee运行及开发环境 15 2.1jdk的下载与安装 15 2.1.1jdk的下载与安装 15 2.1.2配置环境变量 17 >2.2tomcat的下载与安装 19 2.2.1下载并安装tomcat服务器 19 .2.2.2基本配置 22 2.2.3服务器页面介绍 23 2.3eclipse的下载与安装 24 2.3.1eclipse的下载与安装 24 2.3.2熟悉eclipse开发环境 24 2.4项目实战——第一个javaee应用:helloworld 28 2.4.1开始创建第一个javaee应用 28 2.4.2熟悉helloworld框架结构 29 本章小结 32 课后练习 32 第3章jsp和servlet 33 3.1开发第一个jsp+servlet应用 33 3.1.1创建工程 33 3.1.2编写程序 34 3.1.3部署应用 35 3.2认识jsp 36 3.2.1jsp的工作原理 37 3.2.2jsp注释方式 37 3.2.3jsp声明方式 38 3.2.4jsp表达式的应用 39 3.2.5jsp的脚本段 39 3.2.6jsp的编译指令 40 3.2.7jsp的动作指令 41 3.2.8jsp的内置对象 43 3.3认识servlet 46 3.3.1servlet的开发 46 3.3.2使用httpservlet 47 3.3.3servlet的生命周期 49 3.3.4load-on-startupservlet 50 3.4自定义标签库 51 3.5预处理用户请求:filter 53 3.6使用listener 56 3.7项目实战——用户登录 59 本章小结 62 课后练习 63 第4章sql与jdbc 64 4.1sql 64 4.1.1sql概述 64 4.1.2ddl与dml简介 64 4.1.3sql使用方法 65 4.2jdbc 67 4.2.1jdbc概述 67 4.2.2jdbc驱动程序 68 4.2.3使用jdbc读取数据 69 4.3项目实战——存储图书信息 73 本章小结 78 课后练习 79 第5章struts2框架基础 80 5.1mvc框架 80 5.1.1model1与model2 80 5.1.2mvc设计模式 81 5.1.3struts2框架的mvc架构 82 5.2struts2概览 84 5.2.1struts2的工作流程 84 5.2.2struts2的简单应用 85 5.3struts2基础 87 5.3.1action详解 88 5.3.2结果与视图 91 5.3.3struts.xml的配置 94 5.4值栈与ognl表达式 100 5.5struts2的标签库 103 5.5.1控制标签 103 5.5.2数据标签 104 5.5.3表单标签 105 5.5.4非表单ui标签 107 本章小结 108 课后练习 109 第6章struts2高级应用 110 6.1拦截器 110 6.1.1拦截器工作机制 110 6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3输入校验 123 6.3.1输入校验的必要性 123 6.3.2编程方式实现输入校验 125 6.3.3应用struts2输入校验框架 128 6.3.4自定义校验器 130 6.4国际化 131 6.4.1国际化实现原理 131 6.4.2准备国际化资源文件 131 6.4.3调用国际化资源文件 134 6.5上传和下载 135 6.5.1文件上传的实现原理 135 6.5.2struts2文件上传实现方式 136 6.5.3struts2文件下载实现方式 141 本章小结 143 课后练习 144 第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2struts2对velocity的支持 153 7.3应用freemarker 155 7.3.1freemarker基础 155 7.3.2struts2整合freemarker 166 7.3.3使用struts2标签设计模板 170 7.4freemarker与velocity的比较 171 本章小结 171 课后练习 172 第8章hibernate框架基础 173 8.1orm简介 173 8.1.1应用orm的意义 173 8.1.2流行的orm框架 174 8.2准备hibernate运行环境 174 8.2.1下载与安装hibernate 175 8.2.2hibernate发布包介绍 175 8.3认识hibernate 176 8.3.1hibernate框架结构 176 8.3.2hibernate配置文件 177 8.3.3configuration与sessionfactory 178 8.3.4session类 179 8.3.5hibernate中的关联关系 179 8.3.6hibernate映射文件 180 8.3.7hibernate工作原理 182 8.4项目实战——新闻内容显示 183 本章小结 186 课后练习 187 第9章hibernate查询 188 9.1hibernate的数据检索策略 188 9.1.1立即检索 188 9.1.2延迟检索 189 9.1.3预先检索 190 9.1.4批量检索 191 9.2hibernate的数据查询方式 193 9.2.1hql方式 193 9.2.2qbc方式 194 9.2.3原生sql方式 195 9.3hibernate的关联查询 196 9.3.1一对一关联关系的使用 196 9.3.2一对多、多对一关联关系的使用 197 9.3.3多对多关联关系的使用 199 9.4hibernate过滤 201 9.4.1session过滤 201 9.4.2filter过滤 201 9.5项目实战——客户订单管理 202 本章小结 207 课后练习 207 第10章hibernate性能优化 208 10.1hibernate事务与并发 208 10.1.1什么是事务 208 10.1.2hibernate中的事务处理 209 10.1.3在hibernate中使用jta事务 210 10.1.4并发控制 211 10.2hibernate缓存 213 10.2.1缓存的工作原理 213 10.2.2应用一级缓存 214 10.2.3应用二级缓存 214 10.2.4应用第三方缓存 216 10.3项目实战——借还图书 217 本章小结 224 课后练习 224 第11章spring框架基础 226 11.1spring框架概述 226 11.1.1认识spring框架 226 11.1.2spring框架特点 226 11.1.3spring框架核心架构 227 11.2建立spring开发环境 228 11.2.1下载spring框架 228 11.2.2spring发布包与软件包 229 11.2.3创建spring应用环境 230 11.3bean的装配 231 11.3.1bean基本配置 232 11.3.2为bean添加属性 232 11.3.3简化配置 233 11.4理解spring的核心——ioc 234 11.4.1控制反转 234 11.4.2依赖注入的3种方式 236 11.5beanfactory与applicationcontext 238 11.5.1认识beanfactory 238 11.5.2使用applicationcontext 238 11.6项目实战——spring问候程序 239 本章小结 241 课后练习 241 第12章springaop 242 12.1aop基础 242 12.1.1aop与oop的比较 242 12.1.2aop的核心概念 243 12.1.3java动态代理与aop 244 12.1.4springaop简介 245 12.2使用spring的通知 246 12.2.1beforeadvice 246 12.2.2afterreturningadvice 248 12.2.3methodinterceptor 249 12.2.4throwadvice 250 12.3使用spring的切入点 251 12.3.1静态切入点 251 12.3.2动态切入点 253 12.4springaop的代理工厂 253 12.4.1选择合适的代理 253 12.4.2proxyfactory 254 12.4.3proxyfactorybean 254 12.5项目实战——输出日志 256 本章小结 258 课后练习 259 第13章 spring与javaee持久化数据访问 260 13.1spring对dao模式的支持 260 13.1.1统一的数据访问异常 260 13.1.2通用的数据访问模板及抽象支持类 261 13.2spring的jdbc 262 13.2.1为什么需要jdbctemplate 262 13.2.2通过jdbcdaosupport使用jdbctemplate 263 13.2.3jdbctemplate提供的常用数据操作方法 264 13.3spring中的事务处理 265 13.3.1spring事务处理概述 266 13.3.2编程式事务处理 266 13.3.3声明式事务处理 267 13.3.4标注式事务处理 268 13.4项目实战——公司人事管理 269 本章小结 276 课后练习 276 第14章spring与struts2、hibernate框架的整合基础 277 14.1spring与struts2的整合方式 277 14.1.1struts2应用的扩展方式 277 14.1.2spring插件的应用 278 14.2spring和hibernate的整合 279 14.2.1spring对hibernate的支持 279 14.2.2管理sessionfactory 279 14.2.3hibernate的dao实现 281 14.2.4使用hibernatetemplate 281 14.2.5管理hibernate事务 282 14.3项目实战——学生成绩查询系统 283 本章小结 292 课后练习 293 第15章图书馆管理系统 294 15.1系统功能解析 294 15.2系统数据库设计 295 15.2.1数据库分析 295 15.2.2数据表关联关系分析 298 15.3系统框架搭建 300 15.3.1创建工程 300 15.3.2工程目录结构 300 15.4系统代码实现 302 15.4.1数据库连接的实现 303 15.4.2工具类的实现 304 15.4.3管理员登录与退出实现 306 15.4.4系统管理实现 313 15.4.5图书管理实现 319 15.4.6读者管理实现 329 15.4.7借还管理实现 333 15.4.8前台功能实现 336 本章小结 342
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值