Java Web基础

Java Web

Servlet规范

EJB Java官方唯一服务器

Servlet容器的实现:

  • Tomcat(免费)
  • Jboss
  • WebLogic
  • WebSphere
  • Oracle9i AS

Tomcat

  • bin启动服务项 默认启动的入口放置在bin包
  • conf所有配置项 脏有的配置文件都放置在conf包
  • lib所有驱动包 tomcat默认需要支持的驱动全部放在这里
  • logs所有日志包 所有的日志记录都存放在这里
  • temp 临时包 默认没有内容
  • webapps工程包 所有的工程都放置在这目录(我们开发的所有代码都放置在这里)
  • work缓存包 只存放jsp的缓存
  • LICENSE文件 开源免费授权文件
  • NOTICE公告通知 默认信息文件(说明文件)
  • RELEAS-NOTES 最终版本说明
  • ROOT目录 不需要路径访问,直接访问更路径即可
  • ctrl+F5 清除缓存强制刷新页面
  • 根路径
    • http://127.0.0.1:8080/
    • http://localhost:8080/
  • src目录是所有开发源码服务
  • web目录是最终上线的工程目录,会放置两种内容
    1. WEB-INF
    2. 所有的页面(图片、文件、js、css、html、jsp)
  • 在实际交付工程时,默认只会交付web目录,不会交付src目录
  • WEB-INF(不用手动管理,idea会自动管理)放置的内容:
    1. web.xml配置文件
    2. 所有src源代码编译的class文件
    3. src中添加的xml配置文件
    4. lib文件夹 所有的jar包驱动 还有一些第三方驱动

web目录默认会存放两种内容:

1、WEB-INF

2、所有的页面

WEB-INF放置的内容:

  1. web.xml
  2. 所有src源代码编译的class文件
  3. src中添加的xml配置文件
  4. lib文件夹 所有的jar包驱动

Servlet

历史:

  • 在Java中EE发展中,先有Servlet,再有jsp
  • Servlet作为web服务的入口存在(类似于SE中的main方法)
  • 我们自定义的Servlet,都需要继承于HTTPServlet类

1、get请求

  • 用户打开浏览器输入网页地址(在每一个网页项目,用户的第一次进入行为都是get请求)
  • form表单默认的提交方式
  • ajax异步请求设定的方法

2、post请求

  • form表单设定的提交方式
  • ajax异步请求设定的方法

ps:Servlet响应用户的行为是通过response.getWriter().println();输出

每一个Servlet请求的东西必须是唯一的

那么什么时候用get请求,什么时候用post请求呢?

如下情况使用GET方法:

客户端与服务端的交互像是一个提问(如查询操作、搜索操作、读操作)

如下情况使用POST方法:

1.交互是一个命令或订单(order),比提问包含更多信息

2.交互改变了服务器端的资源并被用户察觉,例如订阅某项服务

3.用户需要对交互产生的结果负责

因为根据HTTP协议规定,GET方法可以携带交互需要的所有数据,因此你会看到搜索百度或谷歌的时候,点击搜索形成的URL包含了你刚才的搜索关键字,没有安全需求的请求把信息放URL里没关系,但是你访问银行网站的时候,不希望把账户、密码这些放在URL里被人拦截是吧,所以HTTP设计了POST请求,他可以把请求信息放在HTTP请求里,具体格式这里不细说了,这样你就不能简单的从URL里找到账户、密码了。

HTTP请求限制:

1.URI不能超过256个字符。这个限制在有些服务器里是存在的,有的服务器为了网络安全,为了防止拒绝式攻击会把URL字符限制在4000字符。

2.你提交了GET请求,又马山按了backspace键,会导致get方法被重新执行。

3.你在一个页面使用了安全协议,跳转到了另一个使用不安全协议的页面时,会导致安全数据泄漏给第二个页面。

4.搜索服务不检索包含问号的URI。

3、参数传递问题

每一组参数都是通过key=value的形式传递

在验证传递过来的参数值时,一定要首先判断是否为null,否则会报空指针异常

servlet生命周期

  • 用户第一次访问此servlet路径时,会创建servlet的对象(并且只会创建一次-----单实例的)----创建对象时调用的无参构造函数
  • 创建servlet对象之后,会首先调用servlet得到init方法完成初始化(web服务器会调用) ----一个Servlet只会执行一次
  • 接着调用servlet的service方法请求分发 (web服务器调用)
  • 根据service分发完成对应的do方法调用
  • 在web服务器关闭时,会调用servlet的destroy方法完成销毁处理

Servlet servlet=new Servlet()

servlet.init(requset,response)

servlet.service(requset,response)

EE的内核执行规范

Servlet 9大对象

  • 请求对象 HTTPServletRequest request
  • 响应对象 HttpServletResponse response 1.返回响应内容 2.跳转页面
  • 通信对象 HTTPSession session request.getSession()
  • 全局容器对象 ServletContext application getServletContext()
  • 配置项对象 ServletConfig config getServletConfig()
  • 页面对象 page对象只在当前页面有效,所以在开发中没用
  • 当前页面上下文对象 pageContext 它有一个重要的查找方法
  • 输出对象 PrintWriter out 输入内容到页面
  • 异常对象 Exception exception

四大作用域对象 application>session>requset>pageContext

request常用方法:
  • getMethod()

  • getRequestURI()

  • getRequestURL()

  • getSession()

  • getParameter(String var1)

  • getParameterNames()

  • setAttribute(Object key ,Object Value)

  • getAttribute(Object key)

  • removeAttribute(String var1);

response常用方法
  • sendError(int var1, String var2) 发送一个错误信息码和提升信息
  • sendRedirect(String var1) 转向新的页面
session 常用方法
  • setAttribute(Object key ,Object Value)

  • getAttribute(Object key)

  • getId() 获取当前Session对象的唯一标识符

  • removeAttribute(String var1);

  • isNew() 是否是新创建的Session对象

Session是在每一次请求时,建立的一个通宵连接

  • 如果在Session对象没有丢失前,web服务会认为是同一请求

  • 如果Session对象丢失,那么web服务会重建对象

  • 默认情况下,Session存放的时间是半个小时 *** 没有发起任何新请求的情况下 每一次发起请求都会重新计时

  • 整个浏览器关闭,则session丢失

  • web服务器关闭,则服务器关闭

  • 在session没有丢失前,整个工程位置都可以使用此对象(同一对象的状态)

request的生命周期

发起的请求,会生成一个request对象,如果此request对象没有被带走,那么request对象请求完毕就会丢失

session的生命周期

在打卡浏览器,访问成功服务时,生成,直到关闭整个浏览器时,才结束

application的生命周期

当web服务器启动时,就会创建,并且一个工程中只会存在一个,直到服务器关闭才会结束

HTTPServlet

HTTPServlet最上层有三个接口

  • ServletConfig — 配置接口
    • getServletName() 获取Servlet 名字
    • getServletContext() 获取当前服务的完整上下文对象
    • getInitParameter(String var1) 通过配置参数的key得到value
    • getInitParameterNames() 获取所有的配置参数
  • Servlet — 核心控制接口
    • init(ServletConfig var1) 初始化
    • getServletConfig() 获取配置对象
    • service(ServletRequest v1,ServletResponse) 核心服务
    • getServletInfo() 获取当前servlet信息
    • destroy() 销毁
  • Serializable —序列化接口

顶层抽象父类GenericServlet

  • GenericServlet()

  • destroy()

  • getInitParameter(String var1) 通过配置参数的key得到value

  • getInitParameterNames() 获取所有的配置参数

  • getServletConfig()

  • getServletContext()

  • getServletInfo()

  • init(ServletConfig config)

  • init() 新增方法,目的是人程序员重写次方法完成初始化操作

  • log(String msg) 日志记录

  • log(String message, Throwable t) 错误的日志记录

  • service(ServletRequest var1, ServletResponse var2) 核心服务

  • getServletName() 获取一个Servlet服务

HTTPServlet类

  • doGet(HttpServletRequest req, HttpServletResponse resp)

  • getLastModified(HttpServletRequest req)

  • doHead(HttpServletRequest req, HttpServletResponse resp)

  • doPost(HttpServletRequest req, HttpServletResponse resp)

  • doPut(HttpServletRequest req, HttpServletResponse resp)

  • doDelete(HttpServletRequest req, HttpServletResponse resp)

  • doOptions(HttpServletRequest req, HttpServletResponse resp)

  • doTrace(HttpServletRequest req, HttpServletResponse resp)

  • service(HttpServletRequest req, HttpServletResponse resp)

  • service(ServletRequest req, ServletResponse res)

  • maybeSetLastModified(HttpServletResponse resp, long lastModified)

  • getAllDeclaredMethods(Class<?> c)

转发和转向

java中有二种常见请求规则

  • 同步请求 (前后代码合并)
  • 异步请求 目前企业流使用异步请求(俗称前后分离 —后台全部是接口行为)

相当路径和绝对路径

  • // 绝对路径:基于localhost:8080(www.qq.com)工程根路径
    // /index.html 代表路径为:localhost:8080/index.html
    // /cd/index.html 代表路径为:localhost:8080/cd/index.html
    // /sx/cd/index.html 代表路径为:localhost:8080/sx/cd/index.html
    ​ // 相对路径:相当于当前路径为基准点
    ​ // 首先找寻当前页面的路径地址
    ​ // 比如:login.html访问的地址是localhost:8080/login.html
    ​ // 那么在login.html中跳转的相对路径,都会基于localhost:8080这个路径拼接
    ​ // 比如window.location.href = “index.html”; 就会跳转localhost:8080/index.html
  •   				// 相对路径举例:
      				// 比如:login.html访问的地址是localhost:8080/gxa/login.html
      				// 那么在login.html中跳转的相对路径,都会基于localhost:8080/gxa/这个路径拼接
      				// 比如window.location.href = "index.html"; 就会跳转localhost:8080/gxa/index.html
    
  •   				// 相对路径举例:
      				// 比如:login.html访问的地址是localhost:8080/gxa/login.html
      				// 那么在login.html中跳转的相对路径,都会基于localhost:8080/gxa/这个路径拼接
      				// 比如window.location.href = "sx/index.html"; 就会跳转localhost:8080/gxa/sx/index.html
    
  •   				// 相对路径举例:
      				// 比如:login.html访问的地址是localhost:8080/gxa/login.html
      				// 那么在login.html中跳转的相对路径,都会基于localhost:8080/gxa/这个路径拼接
      				// 比如window.location.href = "../index.html"; 就会跳转localhost:8080/index.html
    
  •   				// 相对路径举例:
      				// 比如:login.html访问的地址是localhost:8080/gxa/sx/login.html
      				// 那么在login.html中跳转的相对路径,都会基于localhost:8080/gxa/sx/这个路径拼接
      				// 比如window.location.href = "../index.html"; 就会跳转localhost:8080/gxa/index.html
    
  •   				// 相对路径举例:
      				// 比如:login.html访问的地址是localhost:8080/gxa/sx/login.html
      				// 那么在login.html中跳转的相对路径,都会基于localhost:8080/gxa/sx/这个路径拼接
      				// 比如window.location.href = "../../index.html"; 就会跳转localhost:8080/index.html
    
  •   				// 相对路径举例:
      				// 比如:login.html访问的地址是localhost:8080/gxa/sx/login.html
      				// 那么在login.html中跳转的相对路径,都会基于localhost:8080/gxa/sx/这个路径拼接
      				// 比如window.location.href = "../../sc/index.html"; 就会跳转localhost:8080/sc/index.html
    
    ​ // 项目迁移时(迁移模块、迁移文件夹、迁移项目时),相对路径几乎不会出错,而绝对路径全部出错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值