Servlet学习笔记(二)

本文详细介绍了JSP与Servlet的关系及工作原理,包括JSP的基本语法、内置对象、EL表达式、JSTL标签库等内容,并探讨了MVC模式、状态管理和过滤器的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


十五、JSP

1.JSPServlet在服务器中是同级关系,JSP底层还是使用的Servlet,他是将ServletHTML封装之后的脚本代码。

2..jsp中,JAVA代码和HTML可以相互嵌套。

3.JSP页面中的注释,推荐用 <!--  --> 这种HTML注释,还有一种<%--  --%>jsp特有注释。

4.JSP中的JAVA代码:

(1)JSP表达式:<%= %>,合法内容:变量、变量加运算符组成的表达式、有返回值的函数。

(2)JSP小脚本:<%  %>,合法内容:能够写在JAVA中的代码都可以作为小脚本。

(3)JSP声明:<%! %>,合法内容:成员属性或方法的声明。

(4)示例:

<%@page pageEncoding="utf-8"%>

<%-- 1.先写HTML/CSS/JS --%>

<!doctype html>

<html>

<head>

<meta charset="UTF-8">

<title>我的第一个JSP</title>

</head>

<body>

<%-- 2.3 JSP声明 --%>

<%!

public int lifang(int n){

return n*n*n;

}

%>

<ul>

<%-- 2.在写JAVA --%>

<%-- 2.1 JSP脚本 --%>

<%

for(int i = 0 ; i <100 ; i++){

%>

<%-- 2.2 JSP表达式 --%>

<li><%=lifang(i) %></li>

<%

}

%>

</ul>

</body>

</html>

5.JSP指令:<%@指令名 属性= %>

(1)page指令:

导包:<%@page import=java.lang.*,java.sql.* %>

设置页面属性:<%@page  contentType=”text/html;charset=utf-8” %>

设置容器读取文件时的解码:<%@page pageEncoding=”utf-8” %>

(2)include指令:在JSP页面转换成Servlet时,能够将其他文件包含进来。可以包含JSP文件也可以包含静态HTML文件。语法:<%include file=”file-url”%>JSPinclude指令的使用:将其他页面公共的部分抽取出来,单独写成一个JSP页面,再通过<%@inclue file=”url”%>指令,引入到其他页面中。连接路径是引用页面相对于被引用页面的路径,建议写成绝对路径。

 

十六、JSP页面中的内置对象

1.JSP创建成Servlet过程:

(1)创建内置对象

(2)write HTML

(3)保留JAVA语句

(4)print 

2.responseHTTPServletResponse

3.requestHTTPServletRequest

4.outJSPWrite

5.configServletConfig

6.applicationServletContext

7.exceptionThrowable):JSP发生的异常,只有在发生异常时可以用。

8.sessionHTTPSession

9.pageObject):当前页面,相当于this

10.pageContextPageContext):页面环境,用于给页面提供数据。该对象中引用了其他的8个对象。使用: ${pageContext.request.contextPath},可以通过pageContext取到其他内置对象,再取到他们的方法。

 

十七、MVC模式,作用是降低代码之间的耦合度,便于团队开发和维护。

1.业务层(model):用来处理业务。

2.视图层(view):用来展示数据。

3.控制层(control):出来处理请求。

 

十八、转发与重定向

1.转发:通常在查询页面使用

步骤:1.绑定数据

req.setAttribute("target_name"obj);

     2.获取转发器,并转发

req.getRequestDispatcher("path").forward(req, res);

(1)1次请求

(2)地址不变

(3)两个组件可以通过request共享数据,因为是一个请求,一个request

(4)只能在项目内部转发数据,不能向外部共享数据

2.重定向:通常在

(1)2此请求

(2)地址改变

(3)因为2此请求有两个request,因此2个组件无法共享数据

(4)可以重定向到外部

 

十九、EL表达式“${}:一套简单的计算规则,用于给JSP标签的属性赋值,也可以直接输出出来。用EL表达式,在JSP中写代码不用导包。

1.作用:

(1)访问Bean属性

(2)输出简单的运算结果

(3)获取请求的参数

2.语法:

(1)对象.属性

(2)对象[属性]

等价于:req.getAttribute(“对象”).get属性()

属性名称都要小写,小写默认访问该对象的get属性方法。

3.取值范围和顺序:默认,EL会按照顺序依次充4个范围(隐含对象)内取值。

(1)page

(2)request

(3)session

(4)application

可以指定取值范围:语法: 隐含对象+Scope.对象.属性

sessionScope.student.name

applicationScope.student.name

4.在取数的同时做运算:

(1)算数: + = * / %

(2)关系: > < >= <= == !=

(3)逻辑: && ||

(4)判空: empty

5.获取请求参数值:${param.key } / ${paramValues.key}

等价于:request.getParam(“key”)/request.getParamValues(“key”)

6.示例:

<%@page pageEncoding="utf-8" %>

<!doctype html>

<html>

<head>

<meta charset="utf-8"/>

<title>EL运算表达式</title>

</head>

<body>

<h1>EL</h1>

<p>姓名:${student.name }</p>

<p>年龄:${student['age'] }</p>

<p>兴趣:${student.interests[2] }</p>

<p>课程:${student.course.ID }</p>

<p>范围:${requestScope.student.name }</p>

<p>年龄+10${student.age+10 }</p>

<p>年龄大于20么:${student.age>20 }</p>

<p>年龄是否在20~30岁之间:${student.age>20 &&  student.age<30 }</p>

<p>判空empty${empty student }</p>

<p>判空null${student==null }</p>

<p>参数:${param.code }</p>

</body>

</html>

 

二十、JSTL(JSP Standard Tag Library)JSP标准标签库

1.使用JSTL

(1)JSTL对应的jar包拷贝到WEB-INF/lib文件下。

(2)使用taglib指令导入要使用的JSP标签:

<%@taglib uri=”” prefix=”” %>

uriJSP标签的命名空间(可以再JSTLjar包中<uri>标签一致

prefix:命名空间的前缀与库文件中<short-name>标签的内容一致。

2.if标签:

<c:if test=”判断条件” var=”” scope””>执行内容</c:if>

3.choose标签:

<c:choose>

<c:when test=”判断条件1”>执行内容1</c:when>

<c:when test=”判断条件2”>执行内容2</c:when>

...

<c:otherwise>执行内容</c:otherwise>

</c:choose>

4.forEach标签:

<c:forEach var=”” items=”” varStatus=””>执行内容</c:forEach>

等价于: for(var:items){执行内容}

var:每次遍历的数据的名字(随便取个名字)

items:要遍历的数组

varStatus:用来声明循环状态对象的名字,该对象中包含index(循环的下标,从0开始),count(循环的次数,从1开始)等属性。

5.自定义标签:

(1)编写JAVA类,继承于SimpleTagSupport类。

(2)重写doTag方法。

(3)配置标签说明文件。

6.翻译JSP时通过标签查找到对应JSTL函数的过程:

Servlet学习笔记(二) - 無痕剑 - 無痕剑的博客

  

7.示例:

<%@page pageEncoding="utf-8" %>

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!doctype html>

<html>

<head>

<meta charset="utf-8"/>

<title>JSTL</title>

</head>

<body>

<h1>JSTL</h1>

<p>

<p>

<c:if test="${student.sex=='M'}"></c:if>

<c:if test="${student.sex=='F'}"></c:if>

</p>

<p>

<c:choose>

<c:when test="${student.sex=='M'}"></c:when>

<c:otherwise></c:otherwise>

</c:choose>

</p>

<p>

<c:forEach items="${student.interests}

var="its" varStatus="s">

${s.index } ${its }

</c:forEach>

</p>

</p>

</body>

</html>

 

二十一、Web页面访问资源规则

Servlet学习笔记(二) - 無痕剑 - 無痕剑的博客

  

 

二十二、异常的配置方式(在web.xml里面配置)

1.根据异常类型指定错误页面

(1)exception-type:异常类型

(2)location:转发的页面路径(绝对路径),转发只局限在项目内部,服务器会自动补充项目名,所以写路径时不需要写项目名。

(3)示例:

 <error-page>

   <exception-type>java.lang.Exception</exception-type>  

   <location>/WEB-INF/error.jsp</location>

</error-page>

2.根据异常编号指定错误页面

(1)error-code:异常编号

(2)location:同上

(3)示例:

 <error-page>

   <error-code>404</error-code>  

   <location>/WEB-INF/error.jsp</location>

</error-page>

 

二十三、状态管理

1.HTTP协议是一种无状态协议,即每次连接只是处理一个请求,下次请求时需要重新连接,导致服务器在下次请求时没有记住这个用户。

2.在登录(或某种请求)时希望服务器记住此用户,以便后续处理一些特殊业务,就需要服务器记住用户访问过的这种状态。

3.状态就是一份数据,用于记录浏览器曾经访问过服务器的数据。

4.使用Cookie在浏览器保存状态,只要是同一个浏览器,无论是创建的几个Servlet,这个存入浏览器的Cookie都可以被访问到。

(1)Cookie c1 = new Cookie(name”“value”);

(2)设置过期时间,一旦设置了这个时间,浏览器就会把Cookie存到硬盘上,直到超出这个时间则删除此Cookiec1.setMaxAge(int seconds);   seconds为零时,表示删除Cookieseconds为负数时,表示缺省值,cookie会存到内存中。

(3)Cookie存入浏览器:res.addCookie(c1);  存入浏览器后,浏览器每次访问服务器,都会自动将此cookie发送给服务器。

(4)JSP上读取Cookie

① JSP脚本中通过request读取。

② 通过EL读取:${cookie.name.value}name替换成实例化Cookie时的name值,value为属性值。

(5)Cookie编解码:

编码:Cookie c = new Cookie(“city”,URLEncoder.encode(“北京”,”utf-8”));

解码:String value = URLDecoder.decode(c.getValue,”utf-8”);

5.默认下,只有对应的有效路径,浏览器才会发送对应的Cookie给服务器,Cookie只对其父级路径及其以下路径有效。也可以给Cookie设置路径,使其对指定路径下都有效。设置路径: setPath(“url”);

 

二十四、Session

1.JSP中用EL表达式取值:${name}name为绑定Session时所设定的值。

2.删除Session对象: void invalidate();

3.设置session空闲时间:如果不设置,缺省时间为30分钟。在web.xml里面,添加标签,设置Minutes单位为分钟,在此期间,Tomcat定时(几分钟)检查Session是否空闲超时,如果超时则删除session,在空闲期间曾访问过服务器,则session视为活动,空闲时间重新计时。加入设置为1分钟,则删除session的时间可能为3分钟左右。

 <session-config>

   <session-timeout>Minutes</session-timeout>

 </session-config>

也可设置缺省时间,setMaxInactiveInterval(int seconds);

 

二十五、Filter过滤器

1.过滤器可以再请求和响应阶段进行拦截,目的是在拦截的位置进行业务。

2.过滤器类实现 javax.servlet.Filter 接口:

(1)destory()方法:销毁Filter时调用。

(2)init(FilterConfig arg0)方法:初始化Filter

(3)doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2)方法:开始过滤。

3.web.xml中配置Filter,与配置Servlet类似,url-pattern标签中写要过滤的Servlet的访问路径,也可以预制参数:

 

<filter>

   <filter-name>filter</filter-name>

   <filter-class>web.TestFilter</filter-class>

<init-param>

<param-name>cs</param-name>

<param-value>leshan</param-value>

</init-param>

</filter>

  

<filter-mapping>

  <filter-name>filter</filter-name>

  <url-pattern>要过滤的servlet访问路径</url-pattern>

</filter-mapping>

4.Filter使用过程:

(1)在部署Servlet(启动Tomcat)时,实例化Filter、初始化(调用init()方法)Filter

(2)FilterChain对请求有绝对管理权,可以允许/拒绝请求继续执行,调用FilterChaindoFilter(req,res)方法表示允许请求执行,否则拒绝请求。

5.一个Servlet可以添加多个Filter组件,多个Filter时串联的,由FilterChain(过滤链)连接,只要其中一个Filter没有执行FilterChaindoFilter(req,res)方法,则后面的Filter不再执行。

6.请求之前按照正序调用Filter,请求之后按照倒序调用FilterFilter中的doFilter(req,res,chain)方法中,在doFilter(req,res)之前的语句,为调用Servlet之前执行,在doFilter(req,res)之后的语句,在调用Servlet之后执行。

7.多个Filter的执行,以web.xmlfilter-mapping标签顺序为准。

8.实例化和初始化多个Filter的顺序貌似是执行顺序的倒序?

9.Filter中预制参数:

(1)web.xml中的filter标签下添加预制参数属性:

<init-param>

<param-name>cs</param-name>

<param-value>leshan</param-value>

</init-param>

(2)Filter的初始化方法init(FilterConfig fc)中使用fc.getInitParameter("param_name")方法获取预制参数。

内容概要:该PPT详细介绍了企业架构设计的方法论,涵盖业务架构、数据架构、应用架构和技术架构四大核心模块。首先分析了企业架构现状,包括业务、数据、应用和技术四大架构的内容和关系,明确了企业架构设计的重要性。接着,阐述了新版企业架构总体框架(CSG-EAF 2.0)的形成过程,强调其融合了传统架构设计(TOGAF)和领域驱动设计(DDD)的优势,以适应数字化转型需求。业务架构部分通过梳理企业级和专业级价值流,细化业务能力、流程和对象,确保业务战略的有效落地。数据架构部分则遵循五大原则,确保数据的准确、一致和高效使用。应用架构方面,提出了分层解耦和服务化的设计原则,以提高灵活性和响应速度。最后,技术架构部分围绕技术框架、组件、平台和部署节点进行了详细设计,确保技术架构的稳定性和扩展性。 适合人群:适用于具有一定企业架构设计经验的IT架构师、项目经理和业务分析师,特别是那些希望深入了解如何将企业架构设计与数字化转型相结合的专业人士。 使用场景及目标:①帮助企业和组织梳理业务流程,优化业务能力,实现战略目标;②指导数据管理和应用开发,确保数据的一致性和应用的高效性;③为技术选型和系统部署提供科学依据,确保技术架构的稳定性和扩展性。 阅读建议:此资源内容详尽,涵盖企业架构设计的各个方面。建议读者在学习过程中,结合实际案例进行理解和实践,重点关注各架构模块之间的关联和协同,以便更好地应用于实际工作中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值