跳至主要內容

JSP/Servlet及相关技术详解

Alooc...大约 8 分钟编程语言JavaJava

1.web.xml:

  • 配置JSP
  • 配置和管理Servlet
  • 配置和管理Listener
  • 配置和管理Filter
  • 配置标签库
  • 配置JSP属性
  • 配置和管理JASS授权认证
  • 配置和管理资源引用
  • Web应用的首页


    metadata-complete:该属性接受true和false两个属性值。为true时,该web应用不会加载注解配置的web组件(如Servlet,Filter,Listener等)

2.JSP的基本原理:

  • jsp就是servlet

  • jsp页面组成:

    • 1.静态部分。标准html
    • 2.动态部分。收Java程序控制的内容,这些内容由Java脚本动态生成。

3.jsp的4种基本语法:

  • jsp注释:
    <%--注释部分 --%>

  • jsp声明:
    用于声明变量和方法
    <%!声明部分%>

  • jsp输出表达式:
    <%=表达式%>

  • jsp小脚本:
    <% 代码 %>

4.jsp的3个编译指令:

  • 编译指令是通知servlet引擎的处理消息
    <%@ 编译指令名 属性名=“属性值” ...%>

  • page指令:
    <%@ page ...%>

    ​ 定义页面需要的环境变量

  • include指令:
    <%@ include file="relativeURLSpec" %>
    包含并解析jsp

  • 标签指令
    <%@ taglib uri="" prefix="mytag" %>

5.jsp的7个动作指令:

  • 动作指令是运行时的动作

      jsp:forward
      jsp:param	转发时增加额外的请求参数
      jsp:include
      jsp:plugin
      jsp:useBean
      jsp:setProperty
      jsp:getProperty
    
  • 详解:

      	forward:
      			“转向”
      			用于将页面响应转发到另外的页面。
      			<jsp:forward page="">
      				<jsp:param name="age" value="22">
      			</jsp:forward>
      
      	include:
      		“导入”
      		<jsp:include page="">
      			<jsp:param name="age" value="22">
      		</jsp:include>
      		
      		forward拿目标页面代替原有页面
      		include拿目标页面插入原有页面
      		
      	useBean,setProperty,getProperty:
      		useBean用于在JSP页面初始化一个Java实例
      		setProperty用于为JavaBean实例的属性设置值
      		getProperty用于输出JavaBean实例的属性
      		<jsp:useBean id="JavaBean的实例名" class="JavaBean的实现类" scope="page|request|session|application" />
      		<jsp:setProperty name="JavaBean的实例名" property="属性名" value="值" />
      		<jsp:getProperty name="JavaBean的实例名" property="属性名" />
      		
      	plugin:
      		主要用于下载服务器端的JavaBean或Applet到客户端执行
      	
      	param:
      		用于设置参数值,本身不能单独使用
      		可与以下三个结合使用:
      			jsp:forward
      			jsp:include
      			jsp:plugin
      		<jsp:param name="参数名" value="参数值" />
    

6.jsp脚本中的9个内置对象:

	这9个内置对象都是ServletAPI接口的实例,JSP规范对其进行默认的初始化。
	已经是对象了,可以直接使用。
	因为是在_jspService()方法中完成初始化的,因此只能在jsp小脚本、jsp输出表达式中使用这些对象,不能在声明中使用。
	
	application: javax.servlet.ServletContext的实例,代表JSP所属的web应用本身
	config:	javax.servlet.ServletConfig的实例,代表JSP的配置信息
	exception:	java.lang.Throwable的实例,代表其他页面中的异常和错误	
	out:	javax.servlet.jsp.JspWriter的实例,代表JSP页面的输出流,用于输出内容,形成HTML页面
	page:	代表该页面本身,没有太大的用处。也就是servlet中的this
	pageContext:	javax.servlet.jsp.PageContext的实例,代表JSP页面的上下文,使用该对象可以访问页面中的共享数据
	request:	javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都被封装到该对象里。
	response:	javax.servlet.http.HttpServletResponse的实例,代表服务器对客户端的响应。
	session:	javax.servlet.http.HttpSession的实例,该对象代表一次会话。当客户端浏览器与站点建立连接时,会话开始;当客户端关闭浏览器时 ,会话结束。
	
	web服务器:解析请求参数,处理用户请求,生成响应数据
	web浏览器:发送请求,读取响应数据,渲染页面
	
	property:固有的属性,内在的,原来就有的
	attribute:外部的描述,外在的,后天形成的
	
	详解:
		application对象:
			作用:
				在整个web应用的多个jsp,servlet之间共享数据
				访问web应用的配置参数
			
			共享数据:
				<%!
				int i;
				%>
				<%
				application.setAttribute("counter",String.valueOf(++i));
				%>
				<%=application.getAttribute("counter") %>
			获得web应用配置参数:
				首先在web.xml中定义:
					<context-param>
						<param-name>driver</param-name>
						<param-value>com.mysql.cj.jdbc.Driver</param-value>
					</context-param>
				在jsp中调用:
					<%=application.getInitParameter("driver") %>
					
		config对象:
			对JSP无用
			对servlet用处大:
				直接在web.xml中配置:
					<servlet>
						<!--指定servlet名字-->
						<servlet-name>config</servlet-name>
						<!--指定将哪个jsp页面配置成servlet-->
						<jsp-file>/file.jsp</jsp-file>
						<!--配置-->
						<init-param>
							<param-name>name</param-name>
							<param-value>value</param-value>
						</init-param>
					</servlet>
					<servlet-mapping>
						<!--指定将config servlet配置到/config路径-->
						<servlet-name>config</servlet-name>
						<url-pattern>/config</url-pattern>
					</servlet-mapping>
				jsp中调用:
					<%=config.getInitParameter("name") %>
		
		exception对象:
			只在异常处理页面使用
			
			普通页面:
				<%@ page contentType="text/html"  pageEncoding="UTF-8" language="java" errorPage="error.jsp" %>
			异常处理页面:
				<%@ page contentType="text/html"  pageEncoding="UTF-8" language="java" iserrorPage="true" %>
				<body>
				异常类型是:<%=exception.getClass() %> <br/>
				异常信息是:<%=exception.getMessage() %> <br/>
				</body>
		
		out对象:
			所有使用out的地方,都可以使用输出表达式来代替
			
			<%=... %>的本质是out.write(...);
		
		pageContext对象:
			共享数据
			
			pageContext.setAttribute("name","value")
			pageContext.setAttribute("name","value","pageContext.SESSION_SCOPE")
			pageContext.getAttribute("name")
			pageContext.getAttribute("name","int scope")
			
			scope值:
				pageContext.PAGE_SCOPE
				pageContext.REQUEST_SCOPE
				pageContext.SESSION_SCOPE
				pageContext.APPLICATION_SCOPE	
	
		request对象:
			1.获取请求头/请求参数	
				request提供的方法:
					获取请求参数: 
						String getParameter(String paramName)	获取值
						Map getParameterMap()	获取所有参数名和参数值组成的map对象
						Enumeration getParameterEnumeration()	获取所有请求参数名组成的Enumeration对象
						String[] getParameterValues(String paramName)	获取请求参数的所有值,多个值组成数组返回
					获取请求头:
						String getHeader(String name)	指定的请求头的值
						java.util.Enumeration<String> getHeaderNames()	所有请求头的名称
						java.util.Enumeration<String> getHeaders(String name)	指定请求头的多个值
						int getIntHeader(String name)	指定请求头的值,并将该值转换为整数值
					
			2.操作request范围的属性:
				设置和获取request范围的属性
					setAttribute(String attrName,Object attrValue)
					Object getAttribute(String attrName)
			
			3.执行forward或include:
				request的getRequestDispatcher(String path)方法,获取RequestDispatcher对象  【path字符必须以斜线开头】
					getRequestDispatcher("/a.jsp").forward(request,response);
					getRequestDispatcher("/a.jsp").include(request,response);
			
		response对象:
			out只能输出字符流,无法输出非字符流。
			位图、PDF文档等必须使用response
			此外,还可以使用response来重定向请求,以及用于向客户端增加Cookie
			
			1.response响应生成非字符响应
				
			2.重定向
				<%response.sendRedirect("redirect-result.jsp"); %>
			3.增加Cookie
				增加:
					Cookie c=new Cookie("username",kerwin);
					c.setMaxAge(24*3600);
					response.addCookie(c);
				读取:
					Cookie[] cookies=request.getCookies();
					for(Cookie c:cookies){
						if(c.getName().equals("username"))
						{
							out.println(c.getValue());
						}
					}
		
		session对象:
			设置和获取session范围的属性
				setAttribute(String attrName,Object attrValue)
				Object getAttribute(String attrName)
			session的属性值可以是任何可序列化的Java对象

7.Servlet介绍:

	1.Servlet的开发:
		Servlet通常被称为服务端小程序,是运行在服务器端的程序,用于处理及响应客户端的请求
		
		servlet是个特殊的Java类,必须继承HttpServlet
		
		方法:
			service()
			doGet()
			doPost()
			doPut()
			doDelete()
			init(ServletConfig config)
			destroy()
	
	2.Servlet的配置:
		注解:@WebServlet
		web.xml: <servlet>  <servlet-mapping>
	
	3.JSP/Servlet的生命周期:
		创建servlet实例 ——> init() 完成初始化 ——> 响应客户请求 ——> destroy() 销毁,回收资源
		
	4.load-on-startup Servlet:
		创建servlet实例的时机
		@WebServlet(loadOnStartup=1)
		<load-on-startup>1</load-on-startup>
	
	5.访问Servlet的配置参数
		设置:
			注解:@WebServlet
				@WebServlet(
							initParams={
										@WebInitParam(name="driver",value=""),
										@WebInitParam(name="url",value="")
										}
							)
			web.xml
				直接在web.xml中配置:
					<servlet>
						<!--指定servlet名字-->
						<servlet-name>config</servlet-name>
						<!--指定将哪个jsp页面配置成servlet-->
						<jsp-file>/file.jsp</jsp-file>
						<!--配置-->
						<init-param>
							<param-name>name</param-name>
							<param-value>value</param-value>
						</init-param>
					</servlet>
					<servlet-mapping>
						<!--指定将config servlet配置到/config路径-->
						<servlet-name>config</servlet-name>
						<url-pattern>/config</url-pattern>
					</servlet-mapping>
		读取:	
			config.getInitParameter("name");
			<%=config.getInitParameter("name") %>	
			
	6.使用Servlet作为控制器:
		servlet的作用类似于调度员:
			所有用户请求都发送给Servlet,Servlet调用model来处理用户请求,并调用jsp来呈现处理结果;
										 或者Servlet直接调用jsp将状态数据呈现给用户。

8.JSP2的自定义标签:

	这种标签具有和html标签类似的语法,又可以完成JSP脚本的功能。
	
	开发标签库的步骤:
		1.开发自定义标签处理类
		2.建立一个*.tld文件,每一个*.tld文件对应一个标签库,每个标签库可包含多个标签
		3.在jsp中使用自定义标签
	
	开发自定义标签类:
		继承一个父类:javax.servlet.jsp.tagext.SimpleTagSupport
			如果标签类包含属性,每个属性都又对应的getter和setter方法
			重写doTag()方法,这个方法负责生成页面内容
	
	建立TLD文件:
		Tag Library Definition
		根元素<taglib>
			子元素:
				tlib-version
				short-name
				uri:标签库的唯一标识
				包含多个tag元素:
					子元素:
						name:	标签名称
						tag-class:	标签处理类
						body-content:	标签体的内容:
													tagdependent:标签处理类自己负责处理标签体
													empty:只能作为空标签使用
													scriptless:标签体可以是静态HTML元素、表达式语言,但不允许出现jsp脚本
													JSP:可以使用jsp脚本
						dynamic-attributes:	动态属性
	
	使用标签库:
		需要两点:
			标签库URI:确定使用哪个标签库
			标签名:确定使用哪个标签
		
		步骤:
			1.导入标签库
			2.使用标签
		<%@ taglib uri="" prefix="mytag" %>
		<mytag:tagName tagAttribute="value"></mytag:tagName>
		
	带属性的标签:
		TLD中:
			tag增加子元素:
				<attribute>
					<name>属性名
					<required>是否为必须属性 true / false
					<fragment>是否支持JSP脚本、表达式等动态内容 true / false
				</attribute>
	
	带标签体的标签:

	以页面片段作为属性的标签
	
	动态属性的标签

9.Filter介绍:

	使用Filter的完整流程:
		Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。
	
	创建:
		1.创建Filter处理类
		2.web.xml中配置

10.Listener介绍:

步骤:
1.定义Listener实现类
2.通过注解或在web.xml文件中配置Listener
















评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.5