java web 基础学习步骤,,很适合初学者

时间:2022-11-28 15:39:29

B/S架构的特点:基于请求和响应

Web服务器的功能:

接受请求

查找资源,处理请求

返回结果

Tomcat:

Tomcat目录结构:

bin:放置控制Tomcat运行的命令(shutdow.bat,startup.bat)

conf:放置的是Tomcat的配置文件,需要改变Tomcat运行环境的时候需要修改这些配置文件(server.xml,web.xml,context.xml)

lib:防止Tomcat在运行的时候使用的和可以支持的jar文件

logs:放置日志

temp:临时文件

webapps:放置应用程序

work:放置web应用程序的转换代码

Tomcat运行方式:

简单的方式-->可以直接通过Eclipse的配置来管理

Eclipse的配置方法:

(1)配置服务器环境

(2)部署项目到服务器

注意:web项目的目录结构:

WebRoot目录:web访问的跟目录

WEB-INF目录:大小写固定不能更改

lib目录:放置运行时需要的jar文件

web.xml文件:配置当前应用程序的环境

(3)部署应用程序到Tomcat的webapps目录下

(4)运行服务器,访问应用程序

访问服务器的路径:http://localhost:8080/

访问服务器资源:

http://localhost:8080/项目名/资源名

jsp页面的处理过程:

(1)第一次访问

xx.jsp-->xx_jsp.java-->xx_jsp.class

由tomcat服务器负责代码的转换,以及负责实例化xx_jsp.java对象并且调用xx_jsp.java中的xxService方法

(2)第一次之后再次访问

直接访问xx_jsp.class

由tomcat服务器负责实例化xx_jsp.java对象并且调用xx_jsp.java中的xxService方法

注意:两次的产生的对象是同一个,因为tomcat采用单例模式来处理对象的生成

JSP的组成:

1、jsp指令:以“<%@ ” 开始,以“%> ” 结束。一个jsp页面至少需要一个指令:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

page指令:表示当前页面默认运行环境

除了page指令外还有include和taglib指令

include指令:包含指令,可以使当前页面可以包含其他页面内容

taglib指令:引入标签库指令

2、表达式:<%=Java表达式 %>-->页面输出

<%=Java表达式 %>等同于out.println();

注意:不要加分号

3、小脚本:<% Java 代码 %>

存在于jsp编译的后java中的service方法中

所以可以放置:变量的定义必须赋值,变量的使用,方法的调用,程序逻辑

4、声名:<%! 方法 %>

存在于jsp编译的后java中类中不在任何方法里

所以可以放:变量的定义,方法的定义,块的定义

5、动作:“<jsp: 动作名 ” 开始,以“</jsp:动作名>

a、<jsp:forward>跳转地址</jsp:forward>:请求转发

b、<jsp:include>包含地址</jsp:include>:引如入其他页面内容到本页面

<jsp:include>:动态引入,引入动态页面(.jsp),原因是引用页面和被引用页面会生成不同的java文件,可以使用同名变量,编译速度慢

<%@ include %>:静态引入,引入静态页面(.html),原因是生存

java文件会把所有的页面(引用和被引用的页面)都包含

在一起,所以不允许出现同名变量定义,编译速度快

c、一组<jsp:useBean>....:处理javabean

6、注释:

a、HTML注释:会出现在被编译后的java代码中,也会出现在客户端

b、JSP注释:不会出现在被编译后的java代码中,不会出现在客户端

c、java注释:会出现在被编译后的java代码中,不会出现在客户端

JSP的javaBean的操作动作

<jsp:useBean>

<jsp:useBean id="" class="" scope="page"></jsp:useBean>

id:实例化后的对象名

class:javaBean的完整路径

scope:javaBean对象的存储范围

作用范围:

page:只在本页面有效

request:在一个请求中有效

session:在一次会话中有效

application:在一次服务有效

useBean运行原理:先检查对应作用域中是否已经存在有实例化的对象,如果存在,直接使用已经存在的实例,如果没有在根据class中的路径,实例化新的对象,再把新对象存如作用域

<jsp:setProperty>

写法1:

<jsp:setProperty name="" property="" value=""/>

name:javabean的对象名

property:name属性名会通过反射找到对应的set方法进行赋值

value:存的值

写法2:

<jsp:setProperty name="stu" property="*"/>

注意:要求表单控件的name属性值必须和 javabean属性值一一对应

写法3:

<jsp:setProperty name="stu" property="name" param="sname"/>

name:javabean的对象名

property:javabean的属性名

param:表单控件的name名称

<jsp:getProperty>

回顾:

JSP动作:

javabean操作:

<jsp:usebean>:实例化javabean

<jsp:usebean id="实例名" class="类的完整路径" scope="实例的作用域">

原理:首先先检查scope是否已经存在需要实例化的对象,如果存在直接从作用域中获取,如果不存在,在通过class属性来实例化新对象,然后,再把实例化后的新对象存入scope中的作用域中.

scope属性的值:

page:只在本页面

request:只在一次请求

session:只在一次会话

application:只在一次服务

<jsp:setproperty>:给javabean的属性赋值

方法一:在确定的知道往javabean的属性中存储的值

<jsp:setproperty name="实例名" property="javabean的属性名" value="确定的值">

方法二:在进行表单提交的时候,需要把表单中的数据赋给javabean的属性

<jsp:setproperty name="实例名" property="*">

前提是:表单中的各个控件的name值要和javabean的属性值一一对应

方法三:在进行表单提交的时候,需要把表单中的数据赋给javabean的属性

<jsp:setproperty name="实例名" property="javabean的属性名" param="控件的name值">

前提是:表单中的各个控件的name值要和javabean的属性值不是一一对应

<jsp:getproperty>:从javabean的属性中获取值

<jsp:getproperty name="实例名" property="javabean的属性名">

页面操作:

<jsp:forward>:请求转发,页面跳转

<jsp:include>:页面包含

<jsp:param>:页面跳转或者页面包含

中的参数设置

<jsp:param name="key值" value="value值">

关于上一页和下一页的问题:

select *,row_number() over (order by nid) as row from news

目标:

JSP隐式对象:在JSP操作中可以直接使用而无须实例化的对象

所有的实例化对象都是由容器产生的,而无须程序员来实例化,隐式对象只能在JSP页面中使用.

九大隐式对象:

page:本页面

常用方法:调用Servlet中定义的方法

来源:javax.servlet.jsp.HttpJspPage

request:请求

常用方法:

getParameter():从表单获取值

getParameterValues():从表单获取多选按钮

setCharacterEncoding():设置请求中的编码格式

setAttribute():在请求中存储对象

getAttribute():从请求中获取对象

来源:javax.servlet.http.HttpServletRequest

response:响应

常用方法:

addCookie():把COOKIE数据存储到客户端

void addHeader():设定客户端头信息

encodeRedirectURL():URL重写

sendRedirect():重定向

进行页面跳转,地址栏会发生变化

重定向不能使请求延续

来源:javax.servlet.http.HttpServletResponse

session:会话,区分不同用户

常用方法:

setAttribute():在会话中存储对象

getAttribute():从会话中获取对象

getId():获取sessionID号

getLastAccessedTime():当前用户的最后访问时间

getMaxInactiveInterval():获取用户的失效时间

setMaxInactiveInterval():设定用户的失效时间

invalidate():使session立即失效

isNew() :当前session是不是新session

session的默认失效时间是30分钟

来源:javax.servlet.http.HttpSession

application:服务,使用户共享

常用方法:

setAttribute():在服务中存储对象

getAttribute():从服务中获取对象

来源:javax.servlet.ServletContext

out:输出

pageContext:可以控制page/request/session/application

config:配置信息

exception:异常

回顾:

九大隐式对象:

request:请求

javax.servlet.http.HttpServletRequest

session:会话

javax.servlet.http.HttpSession

application:服务

javax.servlet.ServletContext

response:响应

javax.servlet.http.HttpServletResponse

out:输出

javax.servlet.jsp.JspWriter

pageContext:上下文

javax.servlet.jsp.pageContext

config:配置

javax.servlet.ServletConfig

excetpion:异常

java.lang.Exception

page:本页面

javax.servlet.jsp.HttpJspPage

目标:

Servlet

什么是Servlet?

Servlet本身就是一个普通的java类,我们编写的Servlet类要求继承Servlet类,就是jsp页面编译后的结果

为什么要使用Servlet?

JSP开发的两种模式:

MODEL1:xx.jsp-->xx_do.jsp-->yy.jsp-->yy_do.jsp...

用来作显示或者接受数据以及业务处理都是由jsp页面来完成

MODEL2:xx.jsp-->servlet1-->yy.jsp-->servlet1...

用来作显示或者接受数据由jsp页面来处理,业务处理都是由servlet来完成

怎样使用Servlet?

步骤:

(1)编写一个类必须继承HttpServlet类

(2)重写service或者do_Get和do_Post方法

(3)配置web.xml文

件来进行访问的设置

<!-- 实例化Servlet -->

<servlet>

<servlet-name>demoServlet</servlet-name>

<servlet-class>com.svse.servlet.DemoServlet</servlet-class>

</servlet>

<!-- 通过什么方式访问Serlvet -->

<servlet-mapping>

<servlet-name>demoServlet</servlet-name>

<url-pattern>/demoServlet</url-pattern>

</servlet-mapping>

Servlet的生命周期?

回顾:Servlet

(1)两种开发模式的区别?

Model1:接受数据,显示数据以及业务处理都由JSP页面来完成

Model2:接受数据,显示数据由JSP完成,业务处理由Servlet来完成

(2)什么是Servlet,Servlet在开发模式中的作用?

Servlet是一个普通的java类,这个java类是由服务器实例化以及调用其中的方法.Servlet来完成业务处理.

(3)怎么编写Servlet?

a.编写java类来继承HttpServlet的类

b.重写HttpServlet中的Service或者doGet和doPost方法

c.在web.xml文件中进行配置

<servlet>

<servlet-name></servlet-name>

<servlet-class></servlet-class>

</servlet>

<servlet-mapping>

<servlet-name></servlet-name>

<url-pattan>/...</url-pattan>

</servlet-mapping>

(4)Servlet的生命周期?

a.服务器加载Servlet,实例化对象

b.调用Servlet中init方法(只在第一次访问的时候实例化)

c.调用Servlet中的Service或者doPost和doGet方法(每次有请求的时候都会调用)

d.调用Servlet中的destory方法(在服务器被关闭的时候会调用)

e.服务器会销毁Servlet的对象

目标:会话管理

服务器和客户端的通信方式:

HTTP协议是无状态的协议:服务器无法区分,每次发送请求的客户端是新的还是旧的.

a.Session方式

第一次访问:客户端在向服务器发送请求的的时候,服务器会为客户端创建一个标识(sessionid),把这个表示存放在服务器的内存中,再对用户的请求进行处理,处理完了后响应用户,除了把资源响应给用户外还会把sessionid发送给用户,并且存储在客户端.

第一次之后访问:客户端先检查自己这端是否保持过sessionid,如果有,再请求的时候除了发送请求的信息还会把sessionid一起发送给服务器,服务器在接受请求的时候会同时拿到一个sessionid,在内存的sessionid列表中进行比较,如果存在表示这个用户原来是访问过本服务器的,如果不存在,服务器再为这个用户创建新的sessionid并且存入内存中,然后在响应时候再把这个sessionid发送给客户端...

session的操作:

1.Sessoin如何实例化:

request.getSession()和request.getSession(true)

2.常用的方式和属性:

getId()/isNew() /getCreationTime()/getLastAccessedTime()/getMaxInactiveInterval()/session.getMaxInactiveInterval()/getAttribute() /setAttribute()

注意:要使session有效必须要先使Cookie有效

b.Cookie方法

分类:

瞬时Cookie:存储sessionid的Cookie,浏览器关闭存储sessionid的Cookie就失效

持久Cookie

操作:

a.实例化C

ookie并且存储信息?

Cookie cookie = new Cookie(key,value)

b.怎么设置Cooie的有效时间?

cookie.setMaxAge(1800);

c.怎么把数据保持在客户端?

response.addCookie(cookie);

d.怎么获取存储在客户端的Cookie信息?

Cookie[] cookies = request.getCookies();

c.URL重写方式

d.隐藏域方式

回顾:

会话管理:服务器如何区分不同用户的请求

服务器无法区分用户,原因是HTTP协议是一种无状态的协议.

会话管理所采用的方法:

(1)session

session有效,前提是客户端的cookie必须是开启状态。

session的原理:

第一次发送请求的时候,服务器接受到请求后,创建session对象,在创建session对象的同时会在服务的sessionid列表中搜索有没有该用户的sessionid,如果没有就在内存中生成一个新的sessionid保持,在发送响应的时候把sessionid传递该客户端,保存在客户端的cookie中.

第一次之后发送请求的时候,客户端会在cookie中搜索自己的sessionid并且通过请求把sessionid发送到服务器,服务器接受到请求后,创建session对象,在创建session对象的同时会在服务的sessionid列表中搜索有没有该用户的sessionid,如果搜索到同样的sessionid,说明该用户以前访问过本服务器.

session对象的创建和一些常用方法

(2)cookie

分类:

1、瞬时cookie,用来存储sessionid,浏览器一旦关闭此cookie自动清空.

2、持久的cookie,用来长期在客户端存储数据

,在关闭浏览器的情况下,数据不会马上消失.

持久的cookie使用:

a.存储信息

Cookie cookie = new Cookie(key,value)

cookie.setMaxAge(秒)

response.addCookie(cookie)

b.获取信息

Cookie[] cookie = request.getCookies();

遍历数组

cookie.getValue()/cookie.getName()

(3)URL重写

(4)隐藏表单域

作业提示:

判断session中是否存在map,如没有存在map说明是第一次购买,那么就新建一个map,如果有说明说明已经在购车中存储过内容,那么map就通过session来获取.

Map(商品名,商品价格)-->充当购物车

发送请求的时候检查map中的key是否有同名的商品名

(1)有的话:就对map进行修改

(2)如果没有:就对map进行添加

map操作完毕,存储到session

目标:

(3)URL重写:实现的前提是,一定在cookie不可用的情况下.

没有禁用Cookie的时候:

http://localhost:8080/lesson8/main.jsp

禁用Cookie的时候:

http://localhost:8080/lesson8/main.jsp;

jsessionid=330CB6E2BE78CDB86DD4AE1C32372A65

(4)隐藏表单域

<input type="hidden" name="" value="">

EL表达式:在页面上使用来代替java代码,主要实现取值的功能

结构:${EL表达式}

功能:

1、基本运算

2、可以从作用域取值 *

${作用域中的key}:

会从最小的作用域开始搜索数据,一但搜索到数据就提取出来,不再继续搜索其他作用域.

${作用域.作用域中的key}例如:

${applica

tion.作用域中的key}错误!!

${applicationScope.作用域中的key}正确!!

3、javaBean中取值 *

${作用域.作用域中的key.javabean的属性名}

4、从表单提交请求中取值

${param.表单控件的name属性值}

5、从数组或者集合中取值

${作用域.作用域中的key[下标]}

6、EL不会显示null值

问题:EL获取Map中的内容?

EL的缺点:

无法实现程序逻辑,条件或者循环语句无法实现

 java免费学习资料直播公开课加老师QQ578024144