javaWeb老师的笔记

 java web入门
1.1.web简介
通常说的是在浏览器上面访问的应用软件系统。

1.2动态网页技术
CGI:sun公司
asp:微软提供的动态网页技术。active server page
asp.net->.net 
php:-->快速速度,访问速度

servlet:sun CGI优化。请求-》返回不同的页面HTML+data
java 
jsp:java server page: HTML+CSS+JS+java

jsp+servlet

1.3 软件架构.
cs:client -server
比如:qq,微信等需要安装客户端
bs:brower-server
比如:淘宝,网页,新浪等在浏览器访问服务端,浏览器作为软件的客户端。

CS与BS架构的对比:
(1)CS架构软件在客户端具备一定的业务处理能力,性能较好。
(2)BS架构软件升级对于客户端无感知,不用频繁的升级客户端软件。
1.4 软件运行流程(B/S)


1.5 环境准备
软件安装的基本要求:不要安装到中文目录。
JDK安装和配置
jdk1.8及以上。
配置环境:
JAVA_HOME:D:\tools\jdk
path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

测试JDK环境变量配置:

Eclipse安装和配置
下载:
官方网站:https://www.eclipse.org/downloads/packages/release
国内镜像地址:
http://mirrors.ustc.edu.cn/eclipse/technology/epp/downloads/release/

(1)使用workset分类管理项目:
在package explorer 的空白处,右吉-new->java working set

点击下面截图中的倒三角:选择-》top level Element ->working sets


(2)关闭不常用的项目
选中项目,右击close project. 关闭项目以后如下所示。那么eclipse启动的时候就不会加载该项目,加快启动速度。

如果需要重新加载项目,可以选择项目,右击,open project
tomcat安装和配置
tomcat是apache提供的一个轻量级的开源的java web的应用服务器。
(1)下载去官方网站下载:
http://tomcat.apache.org/2)配置环境变量:
CATALINA_HOME=D:\apache-tomcat-9.0.37
Path=%CATALINA_HOME%\lib;%CATALINA_HOME%\lib\servlet-api.jar;%CATALINA_HOME%\lib\jsp-api.jar

(3)启动和测试
启动方式一:
在tomcat\bin目录下双击startup.bat
启动方式二:
进入tomcat\bin目录,在地址栏敲入cmd,进入cmd窗口,敲startup.bat回车



Eclipse集成tomcat
(1)安装J2EE和tomcat插件。
window->install new software

选择web、XML下面的J2EE,Java web,JSTL等插件。




(2)配置eclipse集成tomcat
window->preference ->server->runtime enviroments。点击add按钮

进入下面界面:

点击next按钮,进入下面的界面,点击browser按钮,选择tomcat的根目录。

完成配置后,显示如图:


1.6 第一个Web项目

Src: 放的java代码。
webcontent:web页面的代码:html/jsp/js/css
web.xml:java web项目的核心配置文件。

Web项目需要部署到tomcat以后才可以部署。
部署的方法:
选中tomcat,右击-》add or remove


2.servlet基础
2.1http请求方式
http请求分为get请求和post请求。
http的get请求是servlet的doGet方法处理。
http的post请求是servlet的doPost方法处理。
2.2servlet的声明配置【基础】
配置请求路径和servlet类的映射关系。
配置方式有两种:
(1)web.xml
<servlet>
  	<servlet-name>helloServlet</servlet-name>
  	<servlet-class>com.controller.HellowServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>helloServlet</servlet-name>
  	<url-pattern>/hello</url-pattern>
  </servlet-mapping>
servlet节点下的子节点

load-on-startup: 可以不配置,不配置默认是使用的时候才加载和实例化。
0或者大于0:表示启动tomcat的时候加载实例化servlet. 数值越小,优先级越高。

例如:
<servlet>
  	<init-param>
  		<param-name></param-name>
  		<param-value></param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  	<servlet-name>xxxx</servlet-name>
  	<servlet-class>com.xxx.xxxx1</servlet-class>
  </servlet>
  
  <servlet>
  	<init-param>
  		<param-name></param-name>
  		<param-value></param-value>
  	</init-param>
  	<load-on-startup>2</load-on-startup>
  	<servlet-name>YYYY</servlet-name>
  	<servlet-class>com.xxx.YYYY1</servlet-class>
  </servlet>2)使用注解配置。
@WebServlet
servlet3.0开始就之间注解方式的配置。
@WebServlet("/hello")
1.注解需要导入import javax.servlet.annotation.WebServlet;
2.在servlet类的上面加注解
3.以上”/hello”表示的是该servlet的映射路径。
4.两种配置方式使用其中一种。
5.默认的servlet-name是servlet类名,首字母小写。

@WebServlet(
	name = "XXServlet", urlPatterns = { "/XX" },
	initParams = { @WebInitParam(name = "username", value = "qst") },
	loadOnStartup = 0, asyncSupported = true,
	displayName = "XXServlet",description="Servlet样例"
	)


2.3 servlet的生命周期【重要】
(1)加载:根据配置信息(声明配置)加载servlet。【应用服务器tomcat】
(2)实例化:创建加载的servlet对象。new servlet.【应用服务器tomcat】
(3)初始化:调用servlet的init方法.【servlet API 提供,开发人员可以重写】
(4)服务:接收请求,响应请求.【开发人员编程】
(5)销毁:销毁servlet对象,调用的destory().【servlet API提供,开发人员可以重写】

2.4 servlet运行流程分析【理解】



2.5 重定向和转发【重要】
重定向
不处理请求,然后要求客户端浏览器,重新发一个新的请求。

(1)请求1发给服务器,如果是重定向,是不会对请求1进行处理的。直接告诉浏览重新发起一个新请求。
(2)重定向发送了两次请求。两次请求是独立。
(3)重定向的请求地址栏地址会发生变化。

转发
将客户端的请求转给其他的servlet处理。

(1)转发实际上是一个请求,在服务端,交给了不同的servlet来处理,浏览器对于转发的过程无感知。地址栏地址不会变。
(2)转发的servlet之间请求是传递的。
2.6 servlet的数据处理
(1)参数在地址栏后面追加
在servlet映射地址后面+?再来追加传递给servlet的参数,参数使用key=value形式,key是参数的名称,value是参数的值。如果有多个参数,参数之间使用&符号隔开。
例如:
http://localhost:8080/First_Web/login?name=zhangshan&password=123456
含义:
给http://localhost:8080/First_Web/login这地址映射的servlet传递2个参数。
name=zhangshan
password=1234562)使用表单提交(form)
<!-- 表单提交:
type:submit表示表单提交的按钮。将form标签包裹的所有标签的数据封装以后直接提交给服务端
form标签的action属性定义了提交到服务器的地址
例如:
action=login
表示的含义:http://localhost:8080/Web_one3/login
method:定义了请求的方式。

标签的name属性定义的就是参数的名称。
标签的value就是参数的值
 -->
<form action="login" method="POST">
	<p>用户名:<input name="username" type="text"></p>
	<p>密  码:<input name="password" type="password"></p>
	<p>信息来源:<input name="channel" type="checkbox" value="网络">网络
	<input name="channel" type="checkbox" value="报纸">报纸
	<input name="channel" type="checkbox" value="亲友">亲友</p>
	<p><input type="submit" value="提交"/><input type="reset" value="重置"/></p>
</form>3)地址栏参数与表单提交参数的区别
1.参数追加到地址栏,不安全。
2.地址栏的长度是有限的,只有1024,如果数据太多,会超过地址栏最大限度。

2.7 servlet API


2.7.1 servlet接口

2.7.2 HttpServlet抽象类


自定义的servlet的方法分析


3.servlet核心接口
3.1ServletConfig
处理servlet的配置信息的接口。
getInitParamter(String paramname)【掌握】
获取servlet配置的inti-param参数值。
getServletContext【了解】
获取servlet的上下文环境->ServletContext
getServletName【了解】
获取servlet 名称。
3.2ServletContext
servlet的上下午文环境。代表当前Servlet运行环境,是Servlet与Servlet容器之间直接通信的接口。
Servlet容器在启动一个Web应用时,会为该应用创建一个唯一的ServletContext对象供该应用中的所有Servlet对象共享,Servlet对象可以通过ServletContext对象来访问容器中的各种资源

setAttribute(java.lang.String name, java.lang.Object object)/getAttribute(java.lang.String name)
设置或者获取servlet运行环境的属性。

getInitParameter(java.lang.String name)/setInitParameter(java.lang.String name, java.lang.String value)
获取初始化参数,容器环境上下文的初始化参数。获取web配置里面的Context-param这个参数。
<context-param>
</context-param>
<context-param>
  	<param-name>encode</param-name>
  	<param-value>utf-8</param-value>
  </context-param>

代码示例:
ServletContext servletContext = getServletContext();
//方法参数:
		String encode = servletContext.getInitParameter("encode");
		System.out.println("获取的初始化参数Encode:"+encode);
getResource(java.lang.String path)/getResourceAsStream(java.lang.String path)
获取容器环境中文件的路径,或者获取文件的输入流(文件-》内存)

3.3HttpServletRequest
获取http请求的数据。包含:请求行,请求头,请求正文
String method = req.getMethod();//请求方法
		
		System.out.println("请求方法:"+method);
		//获取头部的信息
		String connection = req.getHeader("Connection");
		System.out.println("获取connection:"+connection);
		
		//获取请求正文
		//根据参数名称获取参数的值
		String name = req.getParameter("username");
		System.out.println("获取到的参数name的值:"+name);
		
		//其他的一些获取请求环境的信息
		String contextPath = req.getContextPath() ;//servlet所属环境的地址
		System.out.println("获取contextpath:"+contextPath);
		String servletPath = req.getServletPath();//servlet的映射地址
		System.out.println("获取servletPath:"+servletPath);
		//获取cookie和session
		req.getCookies();
		req.getSession();

//获取请求转发器
		RequestDispatcher requestDispatcher = req.getRequestDispatcher("/hello");
		requestDispatcher.forward(req, resp);
3.4 HttpServletResponse
封装响应浏览器的信息
resp.getStatus();//获取响应状态
		//设置响应的头部属性。参数1:属性名,参数2:属性值
		Date now=new Date();
		resp.setHeader("Date", now.toString());
		
		//设置响应信息的编码方式:
		resp.setCharacterEncoding("UTF-8");
		//设置响应的contenttype
		resp.setContentType("text/html;charset=utf-8");
		
		//获取响应数据到浏览器的输出流
		PrintWriter writer = resp.getWriter();//字符输出流
		ServletOutputStream outputStream = resp.getOutputStream();//字节输出流
		
		//重定向请求
		resp.sendRedirect("/hello");

3.5 Http协议的包含的数据
(1)请求


请求方法:get/post请求。
contenty-type:默认 application/x-www-form-urlencoded
文件类型:multipart/form-data

(3)响应


状态码:
200: 表示执行成功。
404:表示访问的资源不存在。
500: 服务器内部错误。

扩展;
(1)IO流:持久化介质与内存数据的转换过程,就叫IO流,
输入流:从持久化到内存的过程。
输出流:从内存到持久化的过程。

(2)字符编码
ASSCII码 128字符
ISO:扩充了一些西欧国家的字符
gb2312:只支持5000多个常用的汉字。
gbk:对gb2312编码的扩展
unicode:统一字符编码。unicode根据编码字符的长度,分为UTF-8,UTF-16,UTF-32

4.会话跟踪
4.1HTTP请求的特点
无状态的一种情况。
HTTP协议采用“连接-请求-应答-关闭连接”模式

4.2会话跟踪
使用某种方案来记录或者保存请求的数据。在发起其他的请求的时候,可以使用到这些记录下来的数据。实现不同请求的数据共享。
4.3session
4.3.1 session定义
会话。HttpSession这个对象。HttpServletRequest是属于HttpSession.
在同一个浏览器对同一个应用系统发起的请求,属于同一个Session.
4.3.2 session API
(1)在servlet中,需要使用HttpServletReqeust获取HttpSession对象以后,再才能使用HttpSession的方法:request.getSession()
HttpSession的常用方法:

4.3.3 session失效
(1)默认超时时间,是30分钟。超过该默认时间
(2)在web.xml中配置session的超时时间
<session-config>
	<!--单位为“分钟”-->
	<session-timeout>10</session-timeout>
</session-config>3)关闭浏览器
(4)手动调用invalidate()方法,将session设置为失效。
(5)session.setMaxInactiveInterval(60); 设置不活动的最大时长,如果该页面在这个时间段没有进行任何的操作,就会导致session失效。
(6)关闭应用服务器,session失效。
4.4cookie
cookie是实现会话跟踪的另外一种方式。将数据信息保存在客户端,保存到浏览器中,以文件形式保存。
4.4.1cookie会话跟踪的实现

4.4.2cookie的API
(1)创建cookie对象
//cookie的构造器参数:cookie的名称,cookie值
		Cookie note=new Cookie("note","到此一游");2)将cookie响应到浏览器
//将cookie响应到浏览器
		resp.addCookie(note);3)使用request获取cookie列表,及每个cookie的名称和值
Cookie[] cookies = request.getCookies();
		for (Cookie cookie : cookies) {
			System.out.println("cookie的名称:"+cookie.getName());
			System.out.println("cookie的值:"+cookie.getValue());
		}
4.4.3cookie失效
cookie文件在浏览器上被删除了。cookie失效是由客户端的浏览器设置,或者用户的操作等决定的,和服务端没有关系。

4.4.4 session和cookie 的区别
(1)session是在服务端保存信息,cookie是在客户端保存信息。
(2)cookie用于会话跟踪不可靠,session可靠。
问题列表:
1.Eclipse配置tomcat的时候在窗口中没有apache.

5.JSP语法
5.1jsp简介
jsp:java service page。
(1)java代码,实际上就是Servlet
(2)jsp在形式上面来看:JSP=文档模板(Html)+java代码
(3)jsp会转换为java代码,然后再编译执行。
(4)Jsp慢慢退化了业务逻辑处理的能力,只做数据的展示(类似于Html)
(5)web开发模式:jsp+servlet
5.2jsp运行流程
当客户端第一次访问/请求 jsp, jsp会翻译成java文件(servlet 类),jvm编译java类为.class文件,执行处理请求,响应请求到浏览器。

当客户第二次以后请求jsp,就不需要再去翻译,直接找class文件,响应请求/

5.3jsp入门程序


入门程序运行过程分析:

5.4jsp元素
5.4.1脚本元素
1.脚本元素
格式:<% %>
在jsp中写java代码。java代码实际上写在service方法中
示例:
 <% int flag=0;//标记符
 
 String path=request.getContextPath();
 %>
<form action="<%=path%>/login" method="POST">
2.声明元素
格式:<%!  %>
在jsp中声明一个成员变量。
示例:
 <%! int flag=0; %>
3.表达式元素
格式:<%= %>
输出信息。输出某一个具体的值。
转换为java代码后就是:out.print。并且还在service方法中。
示例:
<%=flag %><br>
<%=1+2 %><br>
<%=true %><br>
<%=1>2 %><br>
<%=x%><br>
 <% int flag=0;//标记符
 String path=request.getContextPath();
 %>
  <%! int flag=1; 
  int x=100;
  //声明一个变量%>
4.注释元素
jsp注释: <%-- --%>
html注释:<!--  --!>

java注释:// 单行注释
/**/ 多行注释
/**
*
*/ 文档注释
5.4.2指令元素
1.page指令

主要设置jsp的一些属性。

2.include指令

包含文件。静态包含。

include指令的执行过程:



3.taglib指令
jsp中引入标签库。jstl标签库就是通过这个taglib指令引入到jsp中。  
<%@ taglib uri="" prefix="" %>
uri:标签库的地址
prefix:标签库的前缀
5.4.3动作元素
1.<jsp:include>
动作包含。page指的是包含的jsp的路径。
<jsp:include page="./jsp/header.jsp">
静态包含和动态包含的区别:
动态包含的执行过过程:

2.<jsp:forward uri=””>
请求转发。
<jsp:forward page=""></jsp:forward>
示例:
<jsp:forward page="hello.jsp">
	<jsp:param value="1" name="paramerte1"/>
</jsp:forward>
jsp:include的原理图


page:要转发到的页面
3.<jsp:userBean>
在jsp中引入一个对象(bean对象)。在jsp中实例化一个bean类。
在jsp中创建了一个bean类的对象。
格式:
<jsp:useBean id="" class="" type="" scope="">
</jsp:useBean>

属性:
id指定该JavaBean实例的变量名,通过id可以访问这个实例;
class指定JavaBean的类名。全限定名(包名+类名)。容器根据class指定的类调用其构造方法来创建这个类的实例;
scope指定JavaBean的作用范围,可以使用page、request、session和application。默认值为page。
type指定JavaBean对象的类型,通常在查找已存在的JavaBean时使用,这时使用type将不会产生新的对象
示例;
<jsp:useBean id="person" class="com.bean.Person" >
</jsp:useBean>
4.<jsp:setProperty>
<jsp:setProperty property="" name="" value=""/>
name指定JavaBean对象名,与useBean动作中的id相对应;
property指定JavaBean中需要赋值的属性名;
value指定要为属性设置的值;
param指定请求中的参数名(如表单传值或URL传值),并将该参数的值赋给property所指定的属性。


5.<jsp:getProperty>
<jsp:getProperty property="name" name="person"/>
获取到person对象的name属性值,将这个值响应到浏览器上

6.jsp内置对象
jsp内置对象就是jsp已经帮我们实例化好的对象,我们可以直接来使用,不需要初始化。
jsp的内置对象名称是不可以修改的,是固定。
内置对象总共有9个内置对象:


jsp翻译以后的java代码分析:
定义内置对象:

内置的实例化:


request和response内置对象

exception内置对象:(在标识为error的页面中才有)

6.1request
request这个内置对象,实际是HttpServletRequest

request的常用方法:
request.getMethod()
 request.getHeader(name)
 request.getParameter(name)
 
 request.getSession()
 request.getCookies()
 request.getContextPath()
 request.getServletContext()//上下文
6.2response
response这个内置对象,实际上是HttpServletResponse

response的常用方法:
 response.getStatus()//获取状态信息
 response.setContentType(type)
 response.setCharacterEncoding(charset)
 
 response.getWriter()
 response.getOutputStream()
 
 response.sendRedirect(location)//重定向

6.3out
out实际上是:JspWriter 
字符输出流。向浏览器响应一些数据。
常用方法:
 out.print(arg0)
 out.write(cbuf)
 out.append(c)


6.4session
session实际上是:HttpSession

session的常用方法:
session.setAttribute(arg0, arg1)
 session.getAttribute(name)
 
 session.getServletContext()//上下文
 
 session.invalidate()
 session.setMaxInactiveInterval(interval)
6.5application
application实际上:ServleContext

常用方法:
 application.getInitParameter(arg0)//-获取context-param
 application.getContextPath()//应用的路径
 application.getResource()/application.getResourceAsStream //获取环境资源

6.6pageContext
pageContext实际上是PageContext. 就是当前jsp页面的环境上下文信息。

常用的方法:
pageContext.getServletContext() //appication
 pageContext.getServletConfig() //config
 pageContext.getSession() //session
 pageContext.getOut() //out
 pageContext.getException() //exception
 pageContext.getRequest() //request
 pageContext.getResponse() //response
 pageContext.getPage() //page
6.7config
config 实际上:ServletConfig

config常用的方法:
config.getInitParameter(arg0)
 config.getServletContext()// 应用的上下文
6.8page
page实际上HttpJSpPage.  page实际上就是this。不常用
page初始化:

6.9exception
exception实际上是Throwable.
当抛出异常的时候,可以使用exception获取异常的信息。

注意:exception对象要在error页面中使用。也就是jsp的属性isErrorPage=true”
示例:


7.jsp的四大作用域
对象的生命周期和可访问性称为作用域(scope),在JSP中有四种作用域:页面域、请求域、会话域和应用域。
对象:封装数据的类(自定义的),或者实现某一些功能的类

页面域(page scope),页面域的生命周期是指页面执行期间。存储在页面域的对象只对于它所在页面是可访问的。
请求域(request scope),请求域的生命周期是指一次请求过程,包括请求被转发(forward)或者被包含(include)的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。
会话域(session scope),会话域的生命周期是指某个客户端与服务器所连接的时间;客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。
应用域(application scope),应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有JSP和Servlet共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。
应用域>会话域>请求域>页面域

8.javaBean
在页面展示数据列表
8.1 javaBean
javaBean就是一普通的java类。javabean类中只有属性,没有方法(除了属性的get/set方法)。它只用来保存数据。

示例:
public class User {

	private String usernmae;
	private String password;
	public String getUsernmae() {
		return usernmae;
	}
	public void setUsernmae(String usernmae) {
		this.usernmae = usernmae;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}
	private String role;
}
8.2 jsp处理javabean
<jsp:useBean>元素用于在某个指定的作用域范围内查找一个指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实例化一个新的JavaBean对象,并将它按指定的名称存储在指定的作用域范围内。

入门案例:
登陆成功以后,到主页面展示登陆的用户信息


8.3 jsp+servlet+javaBean开发示例
需求:(1)登陆成功以后,跳到main.jsp页面。在main.jsp页面显示商品列表。

1.jsp开发
(1)table表格。写上表头。
根据获取到商品的数据来遍历。获取到一条数据,就添加一个tr.2)从作用域中获取到商量的数据List<Offer>2.数据模型
(1)javabean设计
private String offerName;
private Integer offerId;
private Float price;
private Long num;
private String description;2)数据库表:offer
offerName
offerId
price
num
description

3.servlet的开发
(1)去查询数据库offer表信息。
查询到的信息封装到List<Offer>2)List<Offer>放到作用域中。
(3)请求转到main.jsp

8.EL表达式
8.1EL表达式简介
EL:expression Language 表达式语言。作用在jsp种输出信息。
EL替换掉<%= %>作用。
语法:
${ 表达式}

el表达式可以写的数据类型:
1.基本数据类型:int/short/long/byte...float..double
2.字符串
3.对象,数组,集合等。

el表达式可以使用操作符:
(1)运算符 +-*/2)关系符 | || & &&3)比较运算符 > >=....4)el表达式自带的运算符 empty




8.2Jsp使用EL表达式
JSP中使用EL表达式,需要设置属性isELIgnored为fa'lse, jsp默认该属性为false。
所以在jsp中都可以使用EL表达式。
8.3EL工作流程
EL从作用域中获取javaben对象,然后通过 . 的方式来获取对象的属性。
EL表达式默认从作用域由小到大的去找对应javabean对象,也就是先找pageContext,然后再request,session,application。如果找到了,不会再去更大的作用域找。
可以指定作用域,如果指定作用域中找不到对象,不会去其他作用域找。
8.4EL表达式的11个内置对象
四大作用域的内置对象
pageScope	用于获得页面作用范围中的属性值,相当于pageContext.getAttribute()
requestScope	用于获得请求作用范围中的属性值,相当于request.getAttribute()
sessionScope	用于获得会话作用范围中的属性值,相当于session.getAttribute()
applicationScope	用于获得应用程序作用范围中的属性值,相当于application.getAttribute()
param
对应参数,它是一个map,其中key参数名,value是参数值,适用于单值的参数。
request.getParameter
示例:获取请求参数username的参数值
http://localhost:8080/Web_one3/EL.jsp?username=%22zhangshan%22
获取的参数为:${param.username}<br>
paraValues:对应参数,它是一个map,其中key参数名,value是多个参数值,适用于多值的参数。
header:对应请求头,它是一个map,其中key表示头名称,value是单个头值,适用于单值请求头。
示例:获取请求头部信息。
语法:header.头部属性


获取header的信息:${header.Host}<br>
headerValues:对应请求头,它是一个map,其中key表示头名称,value是多个头值,适用于多值请求头。
initParam
获取<context-param>参数
<context-param>
	<param-name>xxx</param-name>
	<param-value>XXXX</param-value>
</context-param>
${initParam.xxx}
示例代码:
获取initparam参数信息:${initParam.xxx}
<context-param>
  	<param-name>xxx</param-name>
  	<param-value>111</param-value>
  </context-param>
cookie:Map<String,Cookie>  key是cookie名,value是cookie对象。
${cookie.cookiename.value}
pageContext:它是PageContext类型,

8.5EL使用javabean
8.5.1 简单类型

执行结果:

8.5.2 包装类型
javabean的属性为引用类型的javabean就叫做包装类型。
8.6EL操作数组,集合等。

8.6.1EL操作List
基本思路:
(1)使用对象. list集合类型的属性。获取该List类型的属性。
(2)使用List里面的索引获取到对应的集合中的对象[index]3)然后再通过.调用对象的属性。

格式:
对象.List属性名称[索引].属性


示例代码:


遍历List属性
注意要将索引放到作用域中,EL表达式才可以取到。

8.6.2EL操作Map
基本思路:
(1)使用. 属性获取到Map类型的属性。
(2)使用.key的方式获取key对应的value对象。
(3)再通过.value对象的属性名的方式获取value对象的属性值

示例代码:


9.JSTL【了解,知道】
9.1JSTL简介
JSTL:(JavaServer Pages Standard Tag Library) JSP标准标签库 。
独立于JSP的存放标签的仓库。
jstl的出现的目的,就是替换到jsp中的所有java代码。

<% java代码%>
9.2JSTL分类


9.3JSP中如何使用JSTL
9.3.1导入JSTL的jar
(1)下载jar包
地址:http://tomcat.apache.org/taglibs/standard/2)点击download进入下载界面
点击impl,spec这两个jar包,下载

(3)将jar包放入到web工程。
将jar包放到WEB-INF/lib文件夹中。

(4)将jar包添加到build path中。
选中所有的jar,右击->build path->add to build path

9.3.2在jsp中引入JSTL的标签库
使用taglib标签引入标签库。可以同时引入多个JSTL的库

9.4JSTL的核心库
c:out
<%=%> 输出信息。
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
value表示要输出的数据,可以是JSP表达式、EL表达式或静态值;
escapeXml表示是否将><&、'、"等特殊字符进行HTML字符实体转换后再进行输出,默认值为true;
default表示如果value属性的值为null时所输出的默认值。

c:if
<c:if test="condition" [var="varName"]
 		[scope="{page|request|session|application}"] >
	//condition为true时执行的代码
</c:if>

属性说明:
test用于指定条件表达式,返回boolean类型值;
var用于指定将test属性的执行结果保存到某个范围作用域的属性名称;
scope用于指定将test属性的执行结果保存到哪个范围作用域中
示例:
<c:if test="${1>2}">
	找到了-朋友1
</c:if>
<c:if test="${true}">
	找到了-朋友2
</c:if>
<c:if test="2>1">
	找到了-朋友3
</c:if>
<c:if test="true">
	找到了-朋友4
</c:if>

c:choose/when/otherwise
用于指定多个条件选择,必须与<c:when><c:otherwise>标签一起使用。同时使用<c:choose><c:when><c:otherwise>三个标签,可以构造类似“if-else if-else”的复杂条件判断结构。

示例:


示例代码:

c:foreach
<c:forEach>标签用于遍历集合或迭代指定的次数。
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] >
	//标签体内容
</c:forEach>

属性
var用于指定将当前迭代到的元素保存到page域中的属性名称;
items指定将要迭代的集合对象;
varStatus表示当前被迭代到的对象的状态信息,包括四个属性:index(表示当前迭代成员的索引值)、count(表示当前已迭代成员的数量)、first(表示当前迭代到的成员是否为第一个)、last(表示当前迭代到的成员是否为最后一个);
begin表示遍历的起始索引,值为整数;
end表示遍历的结束索引,值为整数;
step表示迭代的步长,值为整数。


示例代码:

9.5JSTL的I18N库
使用I18N的库。
在jsp中,导入fmt这个库。
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatDate>
用于对日期和时间按本地化信息或用户自定义的格式进行格式化。

<fmt:formatDate value="<%=new Date()%>" pattern="yyyy-MM-dd HH:mm:ss" />
pattern定义的是自定义的日期类型

<fmt:formatNumber>
用于将数值、货币或百分数按本地化信息或自定义的格式进行格式化


10.Filter 过滤器
10.1Filter简介
过滤器(Filter)也称之为拦截器
Filter是Servlet技术中非常实用的技术,Web开发人员通过Filter技术,可以在用户访问某个Web资源(如:JSP、Servlet、HTML、图片、CSS等)之前,对访问的请求和响应进行拦截,从而实现一些特殊功能.
例如,验证用户访问权限、记录用户操作、对请求进行重新编码、压缩响应信息等。

10.2Filter运行流程
预处理:
当用户的请求到达指定的网页之前,可以借助过滤器来改变这些请求的内容。
后处理:
当执行结果要响应到用户之前,可经过过滤器修改响应输出的内容。
10.2.1 单过滤器


Filter的运行过程:
① Web容器判断接收的请求资源是否有与之匹配的过滤器,如果有,容器将请求交给相应过滤器进行处理;
② 在过滤器预处理过程中,可以改变请求的内容,或者重新设置请求的报头信息,然后将请求发给目标资源;
③ 目标资源对请求进行处理后作出响应;
④ 容器将响应转发回过滤器;
⑤ 在过滤器后处理过程中,可以根据需求对响应的内容进行修改;
⑥ Web容器将响应发送回客户端。

10.2.2 多过滤器

1.多个过滤器的顺序,是由web.xml中配置的fliter的顺序决定的。
2.所有满足条件的过滤器依次执行完以后,再到资源文件。
10.3Filter的生命周期
1.实例化【容器完成】
容器去加载配置信息(web.xml或者@WebFilter)。Filter的过滤信息:filter name,filterclass等。使用filter配置信息创建一个过滤器对象。
2.初始化【容器完成】
容器调用Filter的init(FilterConfig config)方法来对过滤器进行初始化。
完成了过滤器初始化以后,过滤器就可以对外提供过滤服务。

3.过滤功能【开发人员编程】
doFilter方法来提供过滤功能。
doFilter(request,response,FilterChain)-->过滤功能中可以对请求进行个性化处理(request),也可以对响应进行个性化过滤处理。FilterChain调用下一个过滤器
4.销毁【容器完成】
容器调用Filter的destory方法销毁Filter实例对象。
10.4Filter 开发
10.4.1 自定义Filter的开发
开发Filter要实现javax.servlet.Filter接口,并提供一个公共的不带参数的构造方法。

示例代码:
/*
 * 自定义一个过滤器,实现Filter接口
 * */
public class LoginCheckFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("我是登陆校验的过滤器。。。。。。");
		chain.doFilter(request, response); //过滤链传递,如果是最后一个过滤器就到资源文件
	}

}
10.4.2 配置Filter
1.web.xml配置
 <filter>
  	<description>数据统计的过滤器</description>
  	<filter-name>countNumFilter</filter-name>
  	<filter-class>com.filter.CountNumFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>countNumFilter</filter-name>
  	<url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  <filter>
  	<description>登陆校验过滤器</description>
  	<filter-name>loginCheckFilter</filter-name>
  	<filter-class>com.filter.LoginCheckFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>loginCheckFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>
示例:

3.使用注解的方式
@WebFilter

属性:

示例:


10.5 Filter 核心API
Filter
javax.servlet.Filter,自定义过滤器类需要实现Filter接口,类似于Servlet接口。

FilterConfig
javax.servlet.FilterConfig接口由容器实现,容器将其实例作为参数传入过滤器(Filter)对象的初始化方法init()中,来获取过滤器的初始化参数和Servlet的相关信息。


示例:
(1)配置初始化参数:


(2)获取初始化参数

FilterChain
javax.servlet.FilterChain接口。
FilterChain对象调用过滤器链中的下一个过滤器,如果该过滤器是链中最后一个过滤器,那么将调用目标资源


示例代码:

11.AJax+servlet
11.1AJAX简介
Ajax是前端javascript实现的异步请求的技术。异步请求,局部刷新。
局部刷新:不用刷新整个页面,只需要更新页面的部分内容或者数据。
11.2同步和异步请求

同步:发送请求,一直等待响应以后,再发送新的请求。
异步:发送请求,不用等待响应,就可以发送新的请求,通过回调函数对响应进行处理。
异步的响应是无法保证顺序。
11.3jquery ajax实现前后端异步交互
(1)导入jquery的库。

(2)在需要使用jquery的jsp中引入jquery库。

(3)开发jquery ajax方法。javascript
$.ajax({
			url: "person.do",  //请求地址
			method: "get", //请求方法:get/post
			datatype: "json",//json
			data:{"pb_id":1}, //要传到服务端参数,以json格式
			success:function (result) {
				//成功的回调函数
				//result封装的是响应的数据信息。
				//通常情况,服务端响应json数据。--》后端如何响应json数据?
				
				//解析result-->result结果
				//js里面解析json串
			}, 
			failed:function (result) {} //失败的回调函数
		});




Eclipse没有安装JST server...等插件。
help-new install software->add
http://download.eclipse.org/releases/2018-12


4.eclipse安装插件很慢或者失败。
解决办法:使用国内镜像地址:
国内镜像地址:
中国科学技术大学(5.6MB/s) http://mirrors.ustc.edu.cn/eclipse/
以2018-09版本为例:
http://mirrors.ustc.edu.cn/eclipse/releases/2018-09
北京理工大学(600KB/s) http://mirror.bit.edu.cn/eclipse/
大连东软信息学院(400KB/s) http://mirrors.neusoft.edu.cn/eclipse/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有时间指导毕业设计

觉得写的好的话可以给我打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值