栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java EE

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java EE

Java EE

选择题:10分
填空题:5分
论述题:25分
分析题:20分
编程题:40分

一、绪论

1、Web 应用架构

C/S(Client/Server,客户端/服务器)结构

B/S(Browser/Server,浏览器/服务器)结构

2、Web 项目基础目录结构

1)src

javabean:项目实体类和JavaBean

dao:项目数据操作类

filter:项目过滤器

listener:项目监听器

servlet:项目Servlet程序

util:项目工具类

2)WebContent(Eclipse)

css:项目样式表

images:项目图片素材

js:项目JS文件

error.jsp:异常处理页面

index.jsp:网站首页

3)WEB-INF

lib:项目第三方库

web.xml:项目配置文件

二、Servlet

1、Servlet 请求处理和响应过程

  1. 接收HTTP请求;
  2. 获取请求信息,如请求头和请求参数数据;
  3. 调用相关Java类和方法,完成具体的业务功能;
  4. 实现到其他Web组件的跳转,如重定向或请求转发;
  5. 生成HTTP响应。

2、Servlet 生命周期

七种状态:创建、初始化、服务可用、服务不可用、处理请求、终止服务和销毁

!四个阶段:加载和实例化、初始化、处理请求和销毁

1)加载和实例化

  • 在服务器正常运行状态下,客户端首次向Servlet程序发出请求时
  • 重新装入Servlet时,如服务器重新启动或Servlet被修改…

2)初始化

  • 在Servlet实例化后,Servlet容器调用初始化方法初始化Servlet实例
  • 如果初始化正常,Servlet在容器中会处于服务可用状态;如果初始化失败,Servlet容器会从运行环境中清除掉该实例
  • 当Servlet运行出现异常时,Servlet容器会使该实例变为服务不可用状态

3)处理请求

  • 服务器接收客户端请求时,会为该请求创建一个"请求"对象和一个"响应"对象并调用service()方法,该方法再调用其他方法来处理请求
  • 在Servlet生命周期中,service()方法可能被多次调用。当多个客户端同时访问某个Servlet的service()方法时,服务器会为每个请求创建一个线程,实现并行处理多个请求,减少请求处理的等待时间,提高服务器的响应速度

4)销毁

  • 当Servlet容器需要终止Servlet时,调用Servlet的destroy()方法释放正在使用的资源
  • 在调用destroy()方法前,必须让当前正在执行service()方法的任何线程完成执行
  • 在destroy()方法完成后,Servlet容器必须释放Servlet实例以便被垃圾回收

3、Servlet 声明配置

1)配置文件


HelloServlet
com.No_Rishi.servlet.HelloServlet



HelloServlet
/HelloServlet

2)注解

@WebServlet(name="HelloServlet", value="/HelloServlet")
@WebServlet("/HelloServlet")

4、Servlet 核心接口

1)四个核心接口对象的作用范围和创建时机

ServletConfig:一个ServletConfig对象对应一个Servlet程序;初始化Servlet时创建

ServletContext:一个ServletContext对象对应一个Web 应用;启动Web应用时创建

HttpServletRequest:一个HttpServletRequest对象对应一次Servlet请求;收到Servlet请求时创建

HttpServletResponse:一个HttpServletResponse对象对应一次Servlet请求;收到Servlet请求时创建

2)ServletConfig接口

功能:获取Servlet初始化参数、配置信息和ServletContext对象。


HelloServlet
com.No_Rishi.servlet.HelloServlet

id
1908170204


@Override
public void init(ServletConfig sc) throws ServletException {
System.out.println("HelloServlet程序的别名:"+sc.getServletName());
System.out.println("HelloServlet程序的初始化参数:"+sc.getInitParameter("id"));
System.out.println("HelloServlet程序的ServletContext对象"+sc.getServletContext());
}

2)ServletContext接口

功能:代表当前项目运行环境;ServletContext对象是域对象(application);


	id
	1908170204

ServletContext context = getServletConfig().getServletContext();
System.out.println("上下文参数:"+
context.getInitParameter("id"));
context.setAttribute("id", "1908170204");
String id = context.getAttribute("ID"));

3)HttpServletRequest接口

功能:封装HTTP请求信息

String str = request.getParameter("用户请求参数");
String[] strs = request.getParameterValues("用户请求参数");

4)HttpServletResponse接口

功能:封装HTTP响应消息

5)存取请求域属性的方法

request.setAttribute("请求域属性", "属性值");
request.getAttribute("请求域属性");

6)处理请求和响应的中文问题

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

5、Servlet 应用

1、处理请求数据

  • 处理超链接请求数据

超链接请求语法格式

链接文本

  • 处理Form表单请求数据

Form表单请求语法格式

用户名:

密码:

信息来源: 网络 报纸 亲友

  • 区别和联系

1)超链接一般用于获取/查询资源信息,属于GET请求类型,请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连。由于其安全性以及请求地址的长度限制,一般仅用于传送简单的数据

2)Form表单一般用于更新资源信息,大部分属于POST请求类型。由于POST请求类型理论上没有数据大小限制,可用表单来传送较大量的数据

3)HttpServletRequest接口使用getParameter()或getParameterValues()来获取GET请求或POST请求传送的请求数据。

2、重定向和请求转发

  • 重定向

重定向是指由原请求地址重新定位到某个新地址,原有的request请求失效,客户端看到的是新的request请求返回的响应结果。

RedirectionServlet01:

@WebServlet("/ResponseServlet01")
public class ResponseServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// res.sendRedirect("/ResponseServlet02")
res.setStatus(302);       						res.setHeader("Location","/ResponseServlet02");
    }
}

RedirectionServlet02:

@WebServlet("/ResponseServlet02")
public class ResponseServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
PrintWriter pw = res.getWriter();
pw.write("重定向成功!");
    }
}
  • 请求转发

请求转发是指将请求再转发到其他地址,转发过程中使用的是同一个request请求。

请求转发的过程发生在服务器内部,对客户端是透明的。服务器只能从当前应用内部查找相应的转发资源,而不能转发到其它应用的资源。

HelloServletA:

@WebServlet("/HelloServletA")
public class HelloServletA extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// 用户请求参数值
String username = req.getParameter("username");
System.out.println(username);
// 存请求域数据
req.setAttribute("Attr","Val");
// 请求转发
RequestDispatcher rd = req.getRequestDispatcher("/HelloServletB");
rd.forward(req,res);
    }
}

HelloServletB:

@WebServlet("/HelloServletB")
public class HelloServletB extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// 用户请求参数值
String username = req.getParameter("username");
System.out.println(username);
// 取请求域数据
String Attr = (String)req.getAttribute("Attr");
System.out.println(Attr);
	}
}
  • 区别

1)重定向和请求转发都使浏览器获得另外一个URL的资源,但两者的内部运行机制有很大的区别;

2)请求转发只能将请求转发给同一个Web应用中的其他资源;而重定向不仅可以重定向到当前Web应用中的其他资源,还可以重定向到同一个站点上的其他Web应用中的资源,或者重定向到其他站点的资源;

3)重定向浏览器URL地址栏改变;而请求转发浏览器URL地址栏不变;

4)重定向是两次请求两次响应;而请求转发是一次请求一次响应;

5)重定向不共享请求域中数据;请求转发共享请求域中数据;

三、会话跟踪

1、cookie技术

cookie是服务端通知客户端保存键值对信息的一种技术;客户端中的cookie在每次发送请求时都会发送给服务端;每个cookie的大小不能超过4KB

@WebServlet("/cookieServlet")
public class cookieServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// 服务端创建cookie
cookie new_cookie = new cookie("Hello","World");
// 服务端向客户端响应cookie
res.addcookie(new_cookie);
// 服务端获取并遍历客户端cookie
cookie[] cookies = req.getcookies();
for (cookie cookie : cookies)
	System.out.println(cookie.getName() +":"+ 				cookie.getValue());
	}
}
// 修改cookie值
// 方法一
cookie cookie = new cookie("Hello","NewWorld");
response.addcookie(cookie);
//方法二
cookie cookie = cookieUtils.findcookies("Hello",req.getcookies());
if (cookie != null){
	cookie.setValue("NewWorld");
	res.addcookie(cookie);
}
// setMaxAge():正数(>0):在指定秒数后删除,负数(<0):关闭浏览器时删除cookie,0:通知浏览器删除cookie,默认值是-1
// setPath():设置请求地址过滤部分cookie发送给服务端

cookieUtils:

public class cookieUtils {
public static cookie findcookies(String name ,cookie[] cookies){
if (name.equals("") || cookies == null || cookies.length == 0){return null;}
for (cookie cookie :cookies){
	if (name.equals(cookie.getName()))
		return cookie;
}
return null;
    }
}

2、Session技术

Session数据存储在服务器上;Session会在一定时间内存储在服务器上,但当访问量增多时,会造成服务器性能加重;Session的大小由服务器内存决定;Session不区分访问路径;Session借助cookie正常工作

@WebServlet("/SessionServlet")
public class SessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// 创建或获取Session会话对象
HttpSession hs = request.getSession();
// 判断Session会话对象是否新创建
boolean isNew = hs.isNew();
String session_id = hs.getId();
session.setAttribute("Hello","Session");
session.getAttribute("Hello");
    }
}
// 在web.xml中设置会话最大不活动时间(以分钟为单位)

	10

// setMaxInactiveInterval():使用代码设置会话最大不活动时间;负数表示不超时(以秒为单位)
// invalidate():设置会话立即失效

3、URL重写技术

URL重写是指服务器程序对接收的URL请求重新写成网站可以处理的另一个URL的过程。

URL重写技术是实现动态网站会话跟踪的重要保障。在实际应用中,当不能确定客户端浏览器是否支持cookie的情况下,使用URL重写技术可以对请求的URL地址追加会话标识,从而实现用户的会话跟踪功能。

// 对任意请求的URL进行重写
res.encodeURL("EncodeURLServlet");
// 对使用sendRedirect()方法的URL进行重写
res.sendRedirect(response.encodeRedirectURL("EncodeURLServlet");

如果应用需要使用URL重写,那么必须对应用的所有请求(包括所有的超链接、表单的action属性值和重定向地址)都进行重写,从而将jsessionid维持下来;

由于浏览器对URL地址长度的限制,特别是在对含有查询参数的GET请求进行URL重写时,需要注意其总长度;

由于静态页面不能进行会话标识的传递,因此所有的URL地址都必须为动态请求地址。

4、隐藏表单域技术

利用Form表单的隐藏表单域,可以在完全脱离浏览器对cookie的使用限制,并且在用户无法从页面显示看到标识的情况下,将标识随请求一起传送给服务器处理,从而实现会话的跟踪。

String flag = req.getParameter("id")
四、JSP

1、JSP 执行原理

JSP和Servlet都运行在Servlet容器中,当用户第一次访问JSP页面时,JSP页面的处理过程:

当同一个JSP页面再次被请求时,只要该JSP文件没有发生过改动,容器将直接执行已载入的字节码文件,而不会再进行翻译和编译,从而大大提高了服务器的性能。过程如下:

2、JSP 脚本元素

1)脚本

<%
Java代码
%>

2)表达式

<%=
输出变量或字面量
%>

3)声明

<%!
声明一个或多个变量和方法
%>

4)注释

3、JSP 指令元素

JSP指令用来向JSP容器提供编译信息。

指令并不向客户端产生任何输出,所有的指令都只在当前页面中有效。

1)page 指令

功能:描述和页面相关的信息,如:导入所需类包、指明输出内容类型、控制Session等;一般位于JSP页面的开头部分。

<%@page 属性列表%>
<%@page language="java" contentType="text/html;charset=UTF-8"%>
<%@page import="java.util.*"%>

2)include 指令

功能:在页面翻译期间引入另一个文件,被包含的文件可以是JSP、HTML或文本文件;将当前JSP和被包含的文件融合到一起形成一个Servlet再进行编译执行;

<%@include file="页面路径(相对路径)"%>
<%@include file="index.jsp"%>

3)taglib 指令

功能:指定JSP页面所使用的标签库,通过该指令可以在JSP页面中使用标签库中的标签。

<%@taglib uri="标签库URl" prefix="标签前缀"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

4、JSP 动作元素

1)< jsp:include >

用于在页面运行时引入一个静态或动态的页面,也称为动态包含;如果包含的文件是普通的文本文件,就将文件的内容发送到客户端,由客户端负责显示;


	

2)< jsp:forward >

用于引导客户端的请求到另一个页面或Servlet。


    

3)< jsp:useBean >

用于查找或实例化一个JavaBean;




 

4)< jsp:setProperty >

用于设置JavaBean的属性;




5)< jsp:getProperty >、

用于输出某个JavaBean的属性;


5、JSP 内置对象

1)与Input/Output有关的内置对象

request
response
out

2)与Context有关的内置对象

session
application
pageContext

3)与Servlet和Error有关的内置对象

page
config
exception(<%@page isErrorPage=true%>)

4)JSP 四大作用域

页面域的生命周期是指页面执行期间。存储在页面域的对象只对于它所在页面是可访问的。

请求域的生命周期是指一次请求过程,包括请求被转发或者被包含的情况。存储在请求域中的对象只有在此次请求过程中才可以被访问。

会话域的生命周期是指某个客户端与服务器所连接的时间;客户端在第一次访问服务器时创建会话,在关闭浏览器或主动退出后,会话结束。存储在会话域中的对象在整个会话期间(可能包含多次请求)都可以被访问。

应用域的生命周期是指从服务器开始执行服务到服务器关闭为止,是四个作用域中时间最长的。存储在应用域中的对象在整个应用程序运行期间可以被所有JSP和Servlet共享访问,在使用时要特别注意存储数据的大小和安全性,否则可能会造成服务器负载过重和线程安全性问题。

JSP的四种作用域分别对应pageContex、request、session和application四个内置对象。

6、JSP与JavaBean

1)JavaBean 规范

一个标准的JavaBean需要遵从以下规范:

  • JavaBean是一个公开的(public)类,以便被外部程序访问;
  • 具有一个无参的构造方法(即一般类中默认的构造方法),以便被外部程序实例化时调用;
  • 提供setXxx()方法和getXxx()方法,以便让外部程序设置和获取其属性。

凡是符合上述规范的Java类,都可以被称为JavaBean。

2)在JSP中使用JavaBean

< jsp:useBean >:创建或查找JavaBean实例对象


id属性用于指定JavaBean对象的引用名称和其存储域属性名;
class属性用于指定JavaBean对象的完整类名;
scope属性用于指定JavaBean对象的存储域范围,其取值只能是page、request、session、application四个值中的一个,默认为page。

< jsp:setProperty >:设置JavaBean对象的属性值


五、EL

1、EL语法

2、EL 错误处理机制

作为表现层的JSP页面的错误处理,往往对用户会有直观的体现,为此EL提供了比较友好的处理方式:不提供警告,只提供默认值和错误,默认值是空字符串,错误是抛出一个异常。

EL对以下几种常见错误的处理方式:

  • 在EL中访问一个不存在的变量,则表达式输出空字符串,而不是输出"null";
  • 在EL中访问一个不存在对象的属性,则表达式输出空字符串,而不会抛出NullPointerException异常;
  • 在EL中访问一个存在对象的不存在属性,则表达式会抛出PropertyNotFoundException异常。

3、EL隐含对象与 JSP内置对象的对应关系

六、JSTL

1、通用标签

<%-- 标签用于输出数据,等同于<%=表达式%> 
value表示要输出的数据,可以是JSP表达式、EL表达式或静态值;
default表示如果value属性的值为null时所输出的默认值。
--%>


<%-- 标签用于设置各种范围域的属性 --%>

    
<%-- 标签用于删除各种范围域的属性 --%>


<%-- 标签用于捕获嵌套在标签体中的内容抛出的异常 --%>
<%-- var属性用于标识捕获的异常对象名称,并将异常对象保存在page域中;若未指定var属性,则仅捕获异常而不在page域中保存异常对象。--%>

nested actions


2、条件标签

3、迭代标签


[]



    
查询





查询
<%--上述两个示例通过两种不同的配置方式指定了相同的URL地址。需要注意的是,当指定context属性时,value属性中地址必须是以"/"开头的相对地址。--%>

<%-- 标签用于执行response.sendRedirect()方法的功能,将当前访问请求重定向到其他资源。--%>

[]





<%-- 标签导入一个URL地址指向的资源 --%>
七、Filter&Listener

1、Filter

1)过滤器的运行原理

当用户的请求到达指定的网页之前,可以借助过滤器来改变这些请求的内容,此过程也称为"预处理"。

当执行结果要响应到用户之前,可经过过滤器修改响应输出的内容,此过程称为"后处理"。

2)过滤器的运行过程

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

3)过滤器的应用

过滤器通过属性urlPatterns/value指定的URL匹配模式来对匹配的请求地址进行拦截。

例如,请求地址"http://localhost:8080/Java_EE/index.jsp"

路径匹配:"/index.jsp" 或 “/*”

扩展名匹配:".jsp"

@WebFilter(filterName="xxx", urlPatterns/value="xxx")

2、Listener

1)Web事件监听器接口

与Servlet上下文相关的监听器接口

接口实现方法:

contextInitialized、contextDestroyed

attributeAdded、attributeRemoved、attributeReplaced

与会话相关的监听器接口

接口实现方法:

sessionCreated、sessionDestroyed

同上

与请求相关的监听器接口

接口实现方法:

requestInitialized、requestDestroyed

同上

2)监听器的实现:

  1. 定义监听器实现类并实现监听器接口的所有方法
  2. 通过注解@WebListener或在web.xml文件中声明Listener

	监听器实现类名

八、MVC

1、MVC 简介

MVC (Model-View-Controller)模式是一种软件体系结构,有三个组成部分: Model (模型)、View(视图)和Controller(控制器)。

MVC结构的每个部分具有各自的功能与作用,并以最少的耦合协同工作,从而提高应用的可扩展性和可维护性。

MVC模式是交互式应用程序最为广泛使用的一种体系结构,该模式能够有效的将界面显示、流程控制、业务处理相分离,改变了传统的将输入、处理和输出功能集中在一个图形用户界面的结构,形成了多层次的软件商业应用架构。

2、Model1和Model2

Model 1模式是以JSP为主的开发模式

Model 2模式即Java Web应用的MVC模式

在Model 2模式中,通过JavaBean、EJB等组件实现MVC的模型层;通过JSP实现MVC的视图层;通过Servlet实现MVC的控制层

Model 2模式把业务处理、流程控制和显示界面分成不同的组件实现,使组件可以进行交互和重用来弥补Model 1的不足。

九、AJAX

功能:发送异步请求,实现网站页面局部刷新

if (xhr.readyState == 4 && xhr.status == 200)
$.ajax({
url:"index.jsp",
type:POST,
data:{key:value},
datapType:,
success: function(data) {
$("#weather-temp").html(""+data+" degrees");
},
error:function(){}
});
$(selector).load(url,data,callback)
$("#info").load("infoList.jsp",{limit: 25],function(){ alert("25条信息装载完成!");});
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号