Java Wed 基础编程

来源:互联网 发布:linux快捷键退出终端 编辑:程序博客网 时间:2024/06/05 00:46

浏览器的网址: URL URl

第一部分Host部分负责找到对应的服务器

第二部分 WEB应用名

第三部分 Servlet的网址

第四部分 参数(GET模式)

http://localhost/WEB/Login?key1=value....

整个网址的长度不能超过255个字节

1 Java Web 工作原理

tcp协议的升级 http协议是一种超文本传输协议 应用层 请求/相应 Request/Response是一种无状态的协议 与上次相应没有关系

web服务器只能向客户端提供静态网页内容 没有互动

增加一个辅助应用

公共网关接口 CGI技术 高并发 严重消耗服务器资源极大地限制了一个服务器可以支持的并发CGI用户数量

微软的ASP和ASP.NET技术

基于Java的Servlet/JSP技术 多线程技术 与Web容器 servlet的业务逻辑

 

Web容器给处于容器中的应用程序提供一个环境 实现J2EE规范中Web规范

应用服务器 实现J2EE所有规范

 

servlet容器

Tomcat

Jboss RedHat

WebLogic

webShere IBM

Oracle9i As

Web容器负责管理和运行Servlet

 

配置文件

静态文件和JSP

类文件和包

开放状态 就绪状态

2 Servlet 基础

                         第一部分 host部分负责找到相应的服务器

                         第二部分 工程部分

第三部分 servlet部分                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       3使用Servlet 处理HTTP 响应

servlet生命周期 默认参数配置下 当你第一次通过网址访问时创建一个实例,调用它的构造方法。调用一次init()初始化方法,然后调用get()post()方法,下次访问就去调用线程里面的实例,如果servlet长时间没有人调用,它就销毁,调用一次destory()方法;或者关闭服务器时,调用一次destory()方法,销毁servlet。

 

容器装载并实例化Servlet 默认第一次通过网址访问Servlet 可以通过参数改写

容器触发 init()方法装载资源 只会调用一次

请求到达触发Service方法,处理请求产生响应

容器丢弃Servlet调用destory()方法

 

 

 

 

 

 

初始化参数有2种

写在servlet标签,init-param标签,对当前这个的 servlet有效

用ServletConfig对象的getInitParamer()

全局初始化参数:写在 webapp标签,context-param标签,对所有的 servlet有效

用ServletContext对象的getInitParamer()

 

自定义Servlet类:继承自HttpServlet

ServletConfig:在Servlet里面调用getServletConfig()得到

ServletContext:通过ServletConfig对象调用getServletContext()得到

 

HttpServletRequest:从doGet或者doPost方法的参数中传入

HttpServletResponse: 从doGet或者doPost方法的参数中传入

 

getRealPath("/")把项目的虚拟路径 映射为绝对路径将相对路径转换为绝对路径

 

 

如果浏览器发送是GET请求,那么会激活对应的Servlet的doGet方法

如果浏览器发送是POST请求,那么会激活对应的Servlet的doPost方法

 

1,在浏览器的地址栏里面输入网址,并且回车,发送GET请求

2,点击超链接,发送 GET请求

3,网页上写了一个form,里面有提交按钮,这个时候,看form的 method属性,method写了get属性,发出就是GET请求; method写了post属性,发出就是POST请求;

4,通过网址知道你调用哪一个 servlet,调用service()方法发出请求 发出回应

 

 

 

 

 

4 使用 Servlet 处理HTTP请求

一,Servlet响应

1,正常返回内容,客户端可以收到并显示

文本/超文本:

 respnose.setContentType("text/html");

 response.getWriter();//得到文本流,并且用文本流输出

二进制内容:()

 respnose.setContentType("image/jpg");//这是图片,其他视频

 response.getOutputStream();//得到二进制流

1设置参数 格式

2,返回错误信息,客户端显示错误信息

response.sendError()

HTTP状态码

300-399:表示用于已经移走的资源文件,指示新的地址

400-499:表示由客户端引发的错误

500-599:表示由服务器引发的错误。

3,重定向

302错误

 response.sendRedirect();//浏览器会发起两次请求,地址栏会显示重定向的地址

 

4,定时刷新

 response.setHeader("Refresh","time(秒); URL=网址");

网址如果是当前页面的网址,那么这是定时刷新

如果不是,相当于 延时重定向

二,Servlet请求

客户端的请求

request——HttpServletRequest

    request是客户端发送的参数的代表对象,可以通过对request的操作获取客户端发送的信息

1,获取所有的客户端传过来的参数

request.getParameter(参数名); 记得做数据类型转换

//指的是Form里面那些控件的name属性

request.getMethod();//判断是get或者post方法

request.getRequestURI();//得到客户端请求的网址

2,这些参数是网页的from里面的控件提交出来的。

传输字符串的有:text

password //传输密码

textarea

键盘输入的内容

传输value里面的值:radio select/option submit button hidden

传输字符串数组:checkbox request.getParameterValues(参数名);

3.汉字乱码问题

前提条件 :Web项目的编码默认是GBK

Servlet里面写:response.setCharacterEncoding("GBK");输出的标签里面,在head里面增加meta标签,属性是 charset=’GBK’

 

JSP解决汉字乱码

4.如何把jar包放到WEB项目中

 

通过我的电脑找到jar包,把它拖Web项目的WebRoot/Web/WEB-INF/lib目录中。

5.起吗的三层的Java开发模式

视图层

Register.html

Register(Servlet)

xxx.jsp

<form>.....</form>

JSP的脚本和表达式

注册界面,注册成功后的提示

收集数据提交

显示处理结果

控制层

Register(Servlet)

业务流程控制

doPost()

持久层

StaffDAO

BaseDAO

与数据库打交道

负责维护:

数据库

SQLServer

数据的持久保存

 

5 Web 应用程序状态管理

Session和Cookie

1,Session是会话。

某一个浏览器第一次访问网站的动态器,就创建一个Session在服务器上。Session超时 ,默认30分钟。每一个Session都有一个sessionID,服务器会通过response把 sessionID交给浏览器。之后浏览器访问服务器的内容时,都会在request里面带上这个sessionID

2,什么时候session会失效呢?

三种情况:关闭浏览器;session超时;代码控制强制失效;服务器关闭。

3,session 可以用来携带数据

setAttribute

public void setAttribute(java.lang.String name,

                        java.lang.Object value)

用指定的名字将一个对象绑定到一个会话。

removeAttribute

public void removeAttribute(java.lang.String name)

从会话中删除绑定到指定名字的对象。

getCreationTime

public long getCreationTime()

返回会话建立的时间,在格林威治时间1970年1月1日子夜开始计算,单位是milliseconds。

返回值:

返回一个长整数,以描述会话建立的时间,在格林威治时间1970年1月1日子夜开始计算,单位是毫秒。

getAttribute

public java.lang.Object getAttribute(java.lang.String name)

返回在本会话中绑定了指定名字的对象,当没有所要求的对象时,返回一个空值。

 

参数

name - 一个指定对象名字的字符串。

返回值:

返回带有指定名字的对象。

 

 

setAttribute("名字", 对象);

invalidate

public void invalidate()

指明一个会话并将所有绑定其上的对象解绑。

4,Cookie本意是“小饼干”文本文件,存在硬盘上面。这是由浏览器控制,里面保存的内容以“键-值对”的形式保留。还有一个指标叫有效时间。

5,它是由一个 servlet发送给 Web浏览器的一定数量的信息,它由浏览器保存,并在之后重新发送给服务器。一个cookie的值能唯一的标示一个客户机,因此cookie通常用于会话管理。

6,写人cookie

new 一个cookie对象

Cookie ck = new Cookie("键","值");

ck.setMaxAge();

response.addCookie(ck);

读入Cookie这么做?

resquest.getCookies()得到一个cookie数组

7,request重定向

//输入重定向 会产生程序控制的转移

              /*

               * 是服务器私下授权 没有告诉浏览器

               * 通过这种方式 是一个动作的连续请求

               * 返回一个作为位于给定路径的资源资源的封装器的            RequestDispatcher 对象。

               * RequestDispatcher 对象可以被用于向一个资源转发请求

               * ,或者,用于在一个响应中包含该资源。该资源可以是动态的也可以是静态的。 

               */

6 对象作用域与Servlet 事件监听器

对象作用域

可以保存数据,且数据被一个或多个请求共享的对象

 

servlet上下文监听器 ServletContext 整个Web应用程序

servlet会话监听器 HttpSession 一次会话交互过程

 servlet请求监听器 ServletRequest 一次请求过程

 

生命周期不一样

ServletContext事件

HttpSession事件

ServletRequest事件

8个监听器

7 过滤器

过滤器:本质还是一个类,拦截客户端发来的请求

对类有什么要求?

实现Java.servlet.Filter接口,并且重写里面所有的方法。init(),destroy(),doFilter()

init 有一个参数FilterConfig可以用来读取初始化参数。getInitParameter

doFilter有3个参数,分别是request,response.下一个Filter

 

注意

request和response要做强制数据类型转换

 

过滤器不拦截,放过:filterChain.doFilter(request, response);

 

要想写好的过滤器发挥作用,应该这么做?在web.xml里面,增加filter和filter-mapping标签

filter标签里面,给出filter-name和filter-class两个子标签,分别是filter的名字和对应的类代码

 

filter-mapping标签里面,给出的filter-name和(url-pattern或者servlet-name二选一)两个子标签。url-pattern标签表示想要拦截的请求,可以用通配符。servlet-name标签,表示想要拦截的servlet。

8 JSP 基础

 

 

JSP本质还是一个Servlet Java服务器页面 服务器活动页最新版本2.4

对象关系映射 ORM

1 JSP翻译成Servlet类。work 里面。

每次修改JSP都将开启一个新的Servlet

2编译

3加载

4创建实例

5调用jspInit()

6服务阶段,调用service()方法

7完成任务JSP任务,调用jspDestory()方法,销毁装载的资源

 

JSP页面由哪些成分组成

脚本元素、动作、指令、注释

a JSP新增注释

   <%--  --%>

b HTML注释

   <!--   --!>

c Java本身的注释 单行注释// 多行注释/**/ 文档注释/** */

 

脚本

a Scriplet <%%> 翻译后成为Servler中的jspService()方法中

b 表达式 <%=  %>里面不要放分号

 脚本表达式的值将送给HTTP响应流

c 声明 <! >定义一些变量和方法

指令 <%@ %> 关键字 page include taglib 属性

a pagelanguage="java" pageEncoding="GBK" 代码编码 import=""  相当于Java的import语句

b includefile=""相对路径 以当前文件所在位置为准

c taglib 引用一个标签库 prefix="前缀" uri="标签库定义标准"

 

动作

a 动作<jsp:XXX XXX="XXX">   20

include<jsp:include page=""> 运行阶段

forward<jsp:forward page=""></jsp:forward>  =request.getRequestDispatch("").forward(request,response);

 

JSP 9大隐式对象

1 request HttpServletRequest

2 response HttpServletResponse

3 out PrintWriter response.getWriter();

4 session HttpSession

5 page this

6pageContext removeAttribute pageContextsetAttribute("",Object,pageContext.常量)

7 config ServletConfig

8 application ServletContext

9 exception 用来处理错误页面

 

getRealPath

public java.lang.String getRealPath(java.lang.String path)

返回包含给定的虚拟路径的真实路径的字符串。

 

例如,虚拟路径"/index.html"有一个在服务器的文件系统中无论什么文件都会被一个对"/index.html"的请求服务的真实路径。

 

 

参数

path - 一个指定虚拟路径的字符串。

返回值:

一个指定真实路径字符串,如果转换不能完成,就会返回一个空值。

Statement

execute 增加insert 删除delete 改update 查 select 返回值是boolean对象

executeQuery 查询select 返回ResultSet

executeUpdate 增删改,返回int,受影响的行数

excuteBatch 一次执行多条语句,每一个结果都保留下来

 

 

 

9 Java Web 开发模式

JSP内置对象不能用在声明中 表达式中可以用

请求转发 forward

应用名+网址 URI

URI是URL 的一部分 只有第二部分和第三部分

服务器的响应信息 HTTP请求

状态行

响应头

空白行

消息体

请求行

请求头

空白行

信息体

10 编写无脚本的 JSP 页面

EL表达式

简化很多编码方式 JSP标签里面或者标签内容里面

 

1、只能用在JSP页面的标签属性值和标签内容里不能写在JSP指令和动作里面

2、EL表达式只用来读取和运算 JavaBean 的属性

3、如果对应的JavaBean不存在,那么它的做法是忽略

4、JSP页面上的隐式对象,EL里面基本都存在,都是很多丢掉了附近功能

pageContext-->pageScoperequest--> request-->requestScope

session-->sessionScopeapplication-->applicationScope

以上只有Attribute

param-->request.getParamter(request.getParamter("userpwd")param.userpwd)

paramValues-->request.getParamterValues()

 

header-->request.getHeader

headerValues

cookie 

格式 ${ } 安全可靠

 

JSTL 标准标签库

JSP页面上的标签,分为两类:

  1.静态标签:HTML标签包括doctype,服务器原封不动发给客户端

2.动态标签:每个标签都代表一系列的Java代码,要在服务器上执行的,典型的是JSP动作<jsp:forword>

 

JSP标签里面允许自定义标签,是指哪种?动态标签

JTSL标签库:

 

     1

核心标签库 core

     2

XML标签库 xml

     3

SQL标签库 sql

     4

国际化标签库 I18N I自动显示各国语言

     5

函数标签库  fn

 

标签

含义

c:out value

Value 里面的内容输出到标签所在的位置上

c:set var value scope

Scope.setAttribute(var,value)

c:remove var scope

Scope.removeAttribute(var)

c:if text

Test属性是否成立,成立就执行标签内容

c:choose

配合 c:when c:otherwise c:when标签可以重复,相当于连环if判断

c:when test

和 c:if相当

c:otherwise

相当于else

c:foreach

相当于for循环

C:forEach items var

Items 里面用EL表达式,获取要循环的用Var变量取名集合里面每一个都会赋值给变量

 

11 匈牙利命名法

变量命名用 前缀加英文单词组成,多个英文单词也可以,首字母大写,前缀小写,代表数据类型

常用前缀

srt s 字符串

i n 整数

f float

d double

b boolean

ch char

JFream frm

JPanel pnl

JLabel jbl

JTextField txt

JTable tbl

0 0
原创粉丝点击