Java Web Basic

Baidu-Java Web开发入门

Web开发基本概念

Web开发

Q:

  • Web程序入口在哪?Main方法?
  • 有Web服务器就可以开发Web程序吗?
  • BS与CS有什么区别?
  • Java Web开发有什么特别?
  • JavaScript/CSS/HTML分别是什么?

通信协议:HTTP
Web Server: 专门负责处理HTTP请求,返回HTTP响应
Web应用程序:CGI/FASTCGI
Web容器:Tomcat、Jetty
应用服务器:WAS/JBOSS/Geronimo

Cookie是小段文本信息,包含名字,值,最大存活期(MaxAge)等信息。Cookie由Servlet发送给浏览器,在浏览器端被保存,然后在访问同一网站的时候,再由浏览器发回给服务器。
Cookie 可以用来标识用户,记录用户名和密码,已经用户的偏好等。
Cookie 根据最大存活期(MaxAge)又可以分为以下两种:
- 会话Cookie (MaxAge<0):在浏览器被关闭以后Cookie失效
- 持续性Cookie (MaxAge >0):Cookie在规定MaxAge之前有效,不管是否重启机器或者浏览器

Session

HTTP 协议是一种无状态协议
会话提供了一种方法来识别和保存在多个页面进行访问的用户信息。
从进入网站到浏览器关闭所经过的这段时间
Session可以存放用户信息
例子:购物车

HTTP Method

请求格式:

  http://www.baidu.com/    
  GET / HTTP/1.1   
  Host: www.baidu.com     
  User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070601      
  Ubuntu/dapper-security Firefox/1.5.0.12     
  Accept:text/xml,application/xml,application/xhtml+xml,text/html   
  Accept-Language: en-us   
  Accept-Encoding: gzip,deflate  
  Accept-Charset: ISO-8859-1,utf-8  
  Keep-Alive: 300   
  Connection: keep-alive   
  Cookie: BAIDUID=36DA5FFA1E69B7CD2D8FF62AA7FE8282;

响应格式和状态码

HTTP/1.x 200 OK   
Date: Wed, 28 Nov 2007 13:43:37 GMT  
Server: BWS/1.0   
Content-Length: 1609  
Content-Type: text/html  
Cache-Control: private   
Expires: Wed, 28 Nov 2007 13:43:37 GMT  
Content-Encoding: gzip

Http状态码
- 1xx:信息响应类,表示接收到请求并且继续处理
- 2xx:处理成功响应类,表示动作被成功接收、理解和接受
- 3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
- 4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
- 5xx:服务端错误,服务器不能正确执行一个正确的请求

AJAX

Asynchronous JavaScript and XML
不更新整个页面的前提下, 与服务器交互

JSON

http://www.json.org/json-zh.html
一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
例子
{“name”:”SMITH”,”address”: {“city”:”beijing”,”street”:”chaoyang”,”postcode”:100025}}

层次划分

MVC

层次划分功能示例
Web层处理Web请求、 渲染视图
业务逻辑层*Service/*Manager, 事务控制
数据访问层*DAO
持久化层JDBC/Hibernate/Mybatis

疑问:数据访问层和持久化层的区别?

Java规范

Java SE/Java EE
Servlet/JSP属于Java EE Specification
Java EE 6
- http://www.oracle.com/technetwork/java/javaee/tech/index.html
- Servlet 3.0
- JSP 2.2
- EJB3.0

容器
- Web容器
- EJB容器

Java Application Server
- Websphere
- Jboss
- Geronimo
- ……

Servlet

Servlet就是一个Java语言写成的类。Servlet扩展了Web服务器的功能。

JAVA SERVLET

Servlet 的生命周期由容器来控制
当对应于某个 Servlet 的请求到来的时候,容器会进行如下步骤:
- 如果该 Servlet 的实例不存在:
- 装载 Servlet 的类
- 创建 Servlet 的实例
- 初始化 Servlet 实例 (调用 init 方法)
- 调用service方法 (传入request、response 对象)

  • 如果该 Servlet 的实例已经存在:
    • 直接调用service方法

当容器需要卸载某个Servlet的时候,容器会调用Servlet的destroy方法

event
通过监听Servlet生命周期的event,可以对event进行选择性的响应
- ServletContextEvent v.s. ServletContextListener
- ServletContextAttributeEvent v.s. ServletContextAttributeListener
- HttpSessionEvent v.s. HttpSessionListener
- ServletRequestEvent v.s. ServletRequestListener
- ……

具体可以在部署描述文件(deployment descriptor )中用<listener> 元素来指定event的监听类:

<listener>                     
<listener-class>com.ibm.sample.listeners.MyContextListener</listener-class>   
</listener>

其中,MyContextListener implements javax.servlet.ServletContextListener.
简单Servlet示例:

import javax.servlet.*;  
import java.io.IOException; 
import java.io.PrintWriter;   
public class PrimitiveServlet implements Servlet {     
    public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {      
        System.out.println("From service of PrimitiveServlet");     
        PrintWriter out = response.getWriter();     
        out.print("Hello! Roses are red.");     
        out.print("Violets are blue.");    
    }     
    public void destroy() { }     
    public ServletConfig getServletConfig() {     
       return null;    }     
    public String getServletInfo() {     
       return null;    }     
    public void init(ServletConfig arg0) throws ServletException { }  
} 

接口
- javax.servlet.Servlet
- javax.servlet.ServletContext
- javax.servlet.ServletRequest
- javax.servlet.ServletResponse
- javax.servlet.RequestDispatcher


- javax.servlet.GenericServlet

HTTP协议相关
接口
- javax.servlet.http.HttpSession
- javax.servlet.http.HttpServletRequest
- javax.servlet.http.HttpServletResponse


- javax.servlet.http.HttpServlet

初始化
时间:在web容器加载和实例化 Servlet 类之后,在 Servlet 处理来自客户端的请求之前
方法:public void init() 在 Servlet 整个生命周期中只执行一次
任务:对Servlet进行一次性的初始化工作:读取配置信息、资源的初始化,如数据库连接等
在部署描述文件(web.xml)的 Servlet 元素中添加子元素 init-param,设置 init 参数的名称和值
在 Servlet 的 init 方法中,调用 Servlet.getServletConfig 获取 ServletConfig对象的引用
调用 ServletConfig.getInitParameter 获取 init 参数的值
Servlet的service方法
服务器每次接收到对 Servlet 的请求,都会产生一个新的线程,然后调用 service 方法获取实际服务
在 GenericServlet 中,由如下方法来提供:

public abstract void service (ServletRequest  req, ServletResponse  res)
throws ServletException , IOException

在 HttpServlet 中, 由 doXxx方法来提供, 比如 doPost,doGet 等,根据实际的hTTP 请求类型进行调用

protected void doGet (HttpServletRequest req, HttpServletResponse resp) 
throws ServletException, IOException 

JSP

Web development in Baidu

其他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值