1. 什么是Servlet?

sun公司制订的一种用来扩展web服务器功能的组件规范。

扩展web服务器功能:早期的web服务器(比如apache、iis等)只能够处理静态资源的
请求(即需要事先将html准备好),不能够处理动态资源的请求(
即需要通过计算,生成html)。早期使用CGI程序来扩展。注(了解):CGI(Common Gateway Interace 通用网关接口):可以使用perl、c、c++等语言来开发符合CGI接口要求的程序来扩展web服务器的功能,但是,开发繁琐,并且可移植性比较差,现在用得很少了。现在使用Servlet来扩展。组件规范:a.什么是组件?符合规范,实现部分功能,并且需要部署到相应的容器里面才能
运行的软件模块。Servlet就是一个组件,需要部署到Servlet容器里面才能运行。b.什么是容器?符合规范,为组件提供运行环境的程序。Tomcat就是一个符合Servlet规范的容器,为Servlet提供运行环境(即提供网络相关的服务)。

[外链图片转存失败(img-IMNBEfcX-1563606678086)(servlet.png)]

2.如何写一个Servlet?

step1.写一个java类,实现Servlet接口或者继承HttpServlet类。
step2.编译。
step3.打包。创建一个具有如下结构的文件夹:appname(应用名)WEB-INFclasses(放.class文件)lib(放.jar文件,可以没有)web.xml (部署描述文件)
step4.部署。将step3创建好的整个文件夹拷贝到容器。注:可以使用jar命令将step3创建好的整个文件夹压缩成.war为后缀的文件,然后再拷贝。
step5.启动容器,访问Servlet。http://ip:port/appname/url-pattern注:url-pattern在web.xml中设置。

3.Servlet是如何运行的?

比如,在浏览器地址栏输入http://ip:port/appname/hello
,浏览器与Servlet容器之间会按照如下步骤进行处理 :step1.浏览器依据ip和post建立连接。
step2.浏览器将相关数据打包(即按照http协议的要求创建请求
数据包),然后将请求数据包发送给容器。
step3.容器解析请求数据包,并且将解析到的数据存放到request
对象里面,同时,还会创建一个response对象。
step4.容器创建Servlet对象,然后调用该对象的service方法。
注:容器会将request和response作为参数传递进来,开发人员可以利用request对象获得请求数据包中的数据,然后将处理结果写到response对象里面即可。
step5.容器从response对象中获得处理结果,然后创建响应数据包,并发送给浏览器。
step6.浏览器解析响应数据包,生成相应的页面。

[外链图片转存失败(img-SktFl2Uc-1563606678088)(servlet2.png)]

# 4.常见问题及如何处理

(1)404

含义:

服务器依据请求路径找不到对应的资源。

原因:

a.请求路径不正确。
b.应用没有部署或者部署失败。

解决方式:

a.依据http://ip:port/appname/url-pattern检查请求路径是否
写错。
b.看应用有没有正确部署。

(2)500

含义:
服务器端发生错误,一般是由于程序运行产生的一些异常。

原因:

a.Servlet没有严格按照规范来写。
比如,没有继承HttpServlet,又或者web.xml中,类名写错。b.程序不严谨。
比如,读取请求参数值之后,没有对参数值做合法性检查。

(3)405

含义:

服务器找不到对应的方法。

原因:

service方法没有按照规范来定义。

解决方式:

检查service方法的签名(方法名、参数类型、异常类型,返回类型)。

练习

写一个Servlet(DateServlet),输出当前的系统日期,比如
输出"2019-05-27"。

要求按照如下格式访问:

http://ip:port/servlet-exec/date

提示:

step1.创建一个maven工程,注意要选war,如下图所示:

[外链图片转存失败(img-9JwlVCZI-1563606678089)(s1.png)]

step2.工程建立好之后,会有异常提示,是因为默认情况下,工程
没有web.xml文件,请按如下图示进行操作:

[外链图片转存失败(img-3BSmvcGg-1563606678090)(s2.png)]

step3.指定运行环境,运行环境提供了我们开发servlet需要的一些包。
如下图所示:

[外链图片转存失败(img-YtKm4DZo-1563606678091)(s3.png)]

step4.添加Servlet类,并在web.xml文件中添加部署描述信息,如
下图所示:

[外链图片转存失败(img-1BhalJ0X-1563606678092)(s4.png)]

step5.部署应用,启动容器,如下图所示:

[外链图片转存失败(img-OcIyeReK-1563606678093)(s5.png)]

step6.打开浏览器,按照http://ip:port/appname/url-pattern
访问Servlet。

1.http协议(了解)

(1)什么是http协议?

是一种网络应用层协议,规定了浏览器与web服务器之间如何通信以及
相应的数据包的结构。

[外链图片转存失败(img-znKNPpSF-1563606724343)(http.png)]

(2)数据包的结构

1)请求数据包

a.请求行 (请求方式 请求资源路径 协议和版本)
b.若干消息头消息头是一些键值对,使用": "隔开,用来传递一些特定的信息。比如,浏览器可以通过发送"user-agent"消息头,告诉服务器,浏览器的类型和版本。
c.消息正文(实体内容)get请求消息正文为空,只有当请求方式为post时,消息正文才会有数据(请求参数)。

2)响应数据包

a.状态行 (协议和版本 状态码 状态描述)
b.若干消息头服务器也可以发送一些消息头给浏览器。比如,服务器可以发送"content-type"消息头,告诉浏览器,服务器返回的数据类型。
c.消息正文(实体内容)程序处理的结果,浏览器会解析出来,生成相应的页面。

(3)两种请求方式

1)get请求

a.哪一些情况下,浏览器会发送get请求?a1.在浏览器地址栏,直接输入某个地址。a2.点击链接。a3.表单默认的提交方式。
b.特点b1.请求参数添加到了请求资源路径的后面,只能提交少量的数据。
注:请求行只能存放约2k左右的数据。b2.请求参数会显示在浏览器地址栏,不安全。
注:有一些网络设备,比如路由器,会记录请求地址。

2)post请求

a.哪一些情况下,浏览器会发送post请求?a1.设置method="post"。
b.特点b1.请求参数添加到了消息正文里面,所以可以提交大量的数据。b2.请求参数不会显示在浏览器地址栏,相对安全。注:       不管哪种请求方式,都不会对数据加密,所以,对于敏感数据,要加密处理(使用https协议)。

2.Servlet输出中文,如何处理乱码问题?

a.为什么会有乱码?

因为out.println方法,默认情况下,会使用iso-8859-1来
编码。

b.如何解决?

response.setContentType("text/html;charset=utf-8");

3.表单包含有中文参数值,如何处理?

(1)为什么会有乱码?

提交表单时,浏览器会按照打开该表单所在的页面时的字符集
对中文进行编码,比如使用utf-8来编码;而服务器端默认会使用
iso-8859-1来解码,所以会产生乱码。

(2)如何解决?

1)情形一: post请求

 /** 这行代码要添加到所有的getParameter方法的* 最前面。* 作用是告诉服务器,针对post请求,使用* 哪种字符集来进行解码。*/request.setCharacterEncoding("utf-8");

2)情形二: get请求

如果是tomcat8以下的版本,需要修改server.xml,
<Connector URIEncoding="utf-8"    />。
作用是,告诉服务器,针对get请求,使用utf-8来解码。
如果是tomcat8及以上的版本,对于get请求,默认就是使用utf-8来解码的。

4. Servlet访问数据库(使用jdbc)

step1.建库、建表

create table t_user(id int primary key auto_increment,username varchar(50) unique,password varchar(30),email varchar(30)
);

step2.导包。

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency>
</dependencies>

step3.添加DBUtils类和jdbc.properties文件。

step4.在Servlet类里面,使用jdbc api访问数据库。

1.重定向

(1)什么是重定向?

服务器通知浏览器立即访问一个新的地址。注:服务器可以通过发送302状态码和location消息头
(该消息头的值是一个地址,一般称之为重定向地址),
浏览器收到之后,会立即向重定向地址发送请求。

[外链图片转存失败(img-XefOjymY-1563606738568)(redirect.png)]

(2)如何重定向?

response.sendRedirect(String url);
注:url就是重定向地址。重定向之前,容器会先清空response对象上存放的所有数据。也就是说,响应数据包消息正文为空。

(3)特点

a.重定向地址是任意的。
b.重定向之后,浏览器地址栏的地址会发生变化。

2.DAO(Data Access Object 数据访问对象)

(1)什么是DAO?

封装了数据访问逻辑的对象。

(2)如何写一个DAO?

step1.实体类。该类的属性与表的字段对应,类型要匹配。step2.DAO类。提供一些方法,用于访问数据库。

练习

写一个Servlet(DelUserServlet),依据id删除指定的用户,然后
返回新的用户列表。

http://ip:port/servlet03-lab/del?id=3

1.DAO的优点

a.方便测试

比如,将数据访问相关的代码写在Servlet里面,需要部署整个应用
才能测试。而将代码写在DAO类里面,可以直接测试。

b.方便分工协作

c.DAO屏蔽了底层数据存贮介质和数据访问技术,方便系统的维护。

即调用者不用关心底层的数据存贮介质是什么(可能是文件、各种
数据库、数据仓库),也不用关心具体的数据访问技术(可能是jdbc,
mybatis等)。

2.Servlet的生命周期

(1)什么是Servlet的生命周期?

容器如何创建Servlet对象、如何对其进行初始化操作、如何
调用其方法来处理请求,以及如何销毁该对象的整个过程。

(2)Servlet的生命周期分成哪几个阶段?

1)实例化

a.什么是实例化?

容器调用Servlet的构造器,创建Servlet对象(实例)

b.什么时候实例化?

情形1:默认情况下,容器收到请求之后,才会创建相应的实例。
情形2:容器启动之后,立即创建相应的实例。
注:容器只会创建一个实例!

2)初始化

a.什么是初始化?

容器在创建好Servlet实例之后,会立即调用该实例的init方法。
注:该方法只会调用一次!

b.GenericServlet已经提供了init方法的实现。

将容器传递过来的ServletConfig对象保存下来了,并且提供了
一个方法(getServletConfig)来获得ServletConfig对象。

c.如何实现自已的初始化处理逻辑?

只需要重写GenericServlet的init方法即可。
注:重写的是不带参的init!

d.初始化参数

step1.配置初始化参数<init-param><param-name>company</param-name><param-value>IBM</param-value></init-param>step2.使用ServletConfig对象提供的getInitParameter
方法来读取初始化参数。

[外链图片转存失败(img-lwpm6WjJ-1563606762272)(init.png)]

3)就绪(调用)

a.什么是就绪?

容器调用Servlet实例的service方法来处理请求。

b.HttpServlet已经提供了service方法的实现。

依据请求类型,调用对应的doXXX方法。
注:比如,get请求会调用doGet方法,post请求会调用doPost方法。这些doXXX方法只是抛出了异常。这些doXXX方法需要由开发人员来重写。

[外链图片转存失败(img-9NgtfIXE-1563606762273)(service.png)]

4)销毁

a.什么是销毁?

容器在删除Servlet实例之前,会调用该实例的destroy方法。
该方法只会调用一次。

b.如何实现自已的销毁处理逻辑?

重写GenericServlet的destroy方法即可。

(3)生命周期相关的接口与类

a.Servlet接口

init(ServletConfig config);
service(ServletRequest req,ServletResponse res);
destroy();

b.GenericServlet抽象类

实现了Servlet接口中的部分方法(init,destroy)。

c.HttpServlet抽象类

继承了GenericServlet,实现了service方法。

练习 计算BMI指数,并依据BMI指数,返回体重状况。

bmi = 体重 (公斤) / 身高(米) / 身高(米)如果bmi < min,体重过轻;
如果bmi > max,体重过重;
否则,体重正常。<init-param><param-name>max</param-name><param-value>25</param-value>
</init-param>
<init-param><param-name>min</param-name><param-value>19</param-value>
</init-param>

1.jsp是什么?

sun公司制订的一种服务器端动态页面技术规范。

因为虽然使用servlet也可以生成动态页面,但是过于繁琐(
需要使用out.print输出),并且不利于页面的维护(要修改页面,
就需要修改java代码),所以,sun才制订了jsp技术规范。jsp是一个以".jsp"为后缀的文件,该文件的主要内容是html和
少量的java代码。容器会将jsp转换成一个对应的servlet然后执行。
也就是说,jsp的本质就是一个servlet。

2.如何写一个jsp文件?

step1.添加一个以.jsp后缀的文件。

step2.在该文件中,可以添加如下内容:

(1)html(css,js)

直接写即可。

(2)java代码

1)java代码片断。

<% java代码 %>

2)jsp表达式

<%= java表达式 %>

(3)隐含对象

a.什么是隐含对象?

可以直接使用的对象,比如out,request,response。

b.为什么可以直接使用这些隐含对象?

因为容器会自动添加获得这些对象的代码。

(4)指令

a.什么是指令?

可以通过指令告诉容器,在将jsp转换成servlet代码时,额外
做一些处理,比如导包。

b.指令的语法

<%@ 指令名 属性=值  %>
如果有多个属性,用空格隔开。

c.page指令

import属性:导包,比如<%@ page import="java.util.*,java.text.*"%>
contentType属性:设置response.setContentType的内容。
pageEncoding属性:告诉容器,在读取jsp文件的内容时,使用指定的字符集来解码。

d.include指令

告诉容器,在将jsp转换成servlet代码时,将file属性指定的文件
的内容插入到该指令所在的位置。
file属性: 指定文件的位置。
注:被包含的文件,如果是jsp,不会执行。

[外链图片转存失败(img-HV3hP6jB-1563606786655)(pageEncoding.png)]

3. jsp是如何运行的?

step1. 容器将jsp转换成一个servlet(.jsp–>.java)。

html(css,js) ------> 在service方法里面,使用out.write输出。
<%         %> ------> 照搬到service方法里面。
<%=        %> ------->在service方法里面,使用out.print输出。

step2. 容器再调用该servlet。

容器需要对其进行编译,然后实例化、初始化、调用、销毁。

练习 date.jsp 输出当前的系统日期 2019-05-31

jsp实现过程就是生命周期

新建 就绪 使用 关闭

####1.转发
1.概念:一个web组建将他未完成的处理转交给另一个web组件继续做。
1.常见场景,就是一个sevlet获得数据,然后转交给jsp来进行业务展现。类似比喻:流水线
2.如何转发:
1.绑定数据到request对象上。 reuqest.setAttribute(String name,Object obj);
2.获得转发机器。 requestDispatcher
3.转发:
1.调方法 rd.forward(request,response);

转发的特点:
1.转发之后,浏览器地址栏的地址不变
2.转发目的地没有限制,要求属于同一个web应用。

####2.转发与重定向大区别?
1.能否共享request
转发可以,重定向可以
2.浏览器地址栏有无变化?
转发部变, 重定向有变化。
3.地址有无限制,
转发有,重定向没有。

####3.状态管理
1.概念:将浏览器与web服务器多次交互当作一个整体来处理,并且将多次交互进行一个保存管理。
比喻场景:KFC搞活动。八次交互送ihone,每一次交互,累计大这个数量就是状态。
多次交互产生的数据保存下来即“状态”,如何保存就是叫“管理”
2.怎么进行状态管理
a.将状态保存在浏览器端Cookie
b.将状态保存在服务器端Session
3.Cookie
1.概念:浏览器临时存放的少量大数据。
2.当浏览器第一次访问服务器时,服务器会将少量数据以set-cookie消息头的方式保存,
再次访问时,会将之前保存的少量数据set-cookie消息头调用出来。
####4.Cookie的读取()

##Cookie的生存空间
1.默认情况下,浏览器会把cookie保存在内存里,当关闭浏览器时,cookie也会被删除。
2.为了保存cookie我们可以将调用:cookie.setMaxAge(int seconds)方法来设置cookie的
生存时间。
单位是秒
例如:cookie.setMaxAge(60)

浏览器 访问服务器时,会以set-cookie小消息头的形式发送给服务器,

##coolie的编码问题:
概念:cookie只能保存ascii字符,对于中文,则需要转化。
定义编码:统一用到encode来编码。

##cookie的路径问题
1.概念:浏览器在向服务器发送请求时,会比较请求地址是否符合cookie的路径要求,
只有符合要求的cookie,才会被发送。 nick:比较地址
2.Cookie的默认路径:
cookie都有一个默认路径。
3.修改cookie的默认路径
cookie.setPath(String path);
##cookie的限制
1.cookie可以被用户禁止
2.cookie不安全:敏感数据,不加密的话,用户就可以随意查看。
3.cookie只能存放少量数据:约4k; 数量也有限制:大约几百个
4.只能存放字符串。

##Session
概念:它是服务器端保存用户状态而创建的一个特殊对象。
##Session的原理:
当浏览器第一次访问服务器时,服务器会创建一个session对象,接下来服务器会将SessionId
以cookie的方式发送给浏览器。
当浏览器再次访问时,会将sessionid发送过来,服务器就可以利用sessionId找到对应的session
对象。
##如何获得session对象?
方式一:1.先查找sessionId,找到则返回该session对象,没找到则会重新创建一个session对象。

##session空闲时间
为了节省空间,服务器一般会将临时保存的文件保存半个小时,之后就会被删除。

##删除session

##session验证:
概念:商城购买时,提示登录。这个程序就是session登录。
1.登录成功后,在session对象上绑定一些数据,
2.访问保护资源时,则进行session对象

回顾
cookie:客户端:通过set-cookie消息头发送给服务端,的少量的数据

三个问题:编码问题URLEncode.code、生成时间:setMaxAge(int seconds)
路径问题:比喻:卡片上的名字。该路径的访问:setPath

五个限制:1.可以被用户限制,2.不安全,用户可以直接查看cookie 3.大小限制, 4.数量 5.字符串

session:
获得:HttpSession s = request.getSession(true/false);
为true的话会去找,false就不执行啦。
绑定:setAttribute、setAttribute、removeAttrubute.
session超时:session对象存在超过半个小时,则会被删除。以释放内存。
两个办法:1.该配置文件,2.调方法

session验证:未登录状态下购买物品时的提示。

正课:
1.利用jsp写一个登录功能。

##容器如何处理请求资源路径
比如,在浏览器地址栏输入
1.

<url>有三种写法
(1)精确匹配
(2)通配符匹配使用"*"
比如:<url-pattern>/*</url-pattern>
(3)后缀匹配使用"*."开头
比如:<url-pattern>*.do</url-pattern>
匹配.do为后缀的文件,前面不管是写的什么都能匹配。

##如何让一个servlet处理多个请求。
1.使用后缀匹配。
*.do
2.分析请求路径,进行相应的处理。

重定向:

正课:
##过滤器
概念:Servlet规范当中定义的一种特殊的组件,用于
拦截Servlet容器的调用过程。
###具体实现:
1.写一个java类,实现Filter接口,
2.再接口方法中,实现拦截处理逻辑。
3.配置过滤器(web.xml)
增加过滤对象:可以复制filter,改一下web.xml
###过滤器的优先级

1.可以通过更改web.xml文件来改变执行顺序。

###nick增加敏感词的灵活性:
1.配置初始化参数

##监听器
概念:一个特殊的组件,用于监听容器产生的事件并进行相应的处理。
#产生事件:
1.生命周期相关事件
容器创建了或者销毁了request、session、Servlet上下文
时产生的事件。统计在线访问用户
2.绑定数据相关事件
调用了request、session、Servlet上下文的setAttribute
removeAttribute方法时产生的事件。
###Servlet上下文 ***
概念:容器启动之后,会为每一web应用创建一个唯一的
ServletContext接口要求的对象。
该对象一般称之为上下文。(环境、语境)

特点:
1.唯一性:一个web应用对应一个上下文,
2.持久性,除非容器关闭,或者应用被卸载,否则会一直存在。

##怎么获得Servelt上下文
Gen

##绑定数据
request、session、Servlet上下文都提供了绑定数据
相关的方法,区别如下,
a.绑定到这三个对象上的数据的生存时间是不一样的
request < session < Servlet上下文。
注:在满足使用条件的情况下,优先使用生命周期短的。
b.绑定到session对象

##具体实现一个监听器
1.写一个java类,实现相应的监听器接口
需要用到:HttpSessionListener接口
2.在接口方法中,实现监听处理逻辑
3.配置监听器
代码实例:统计在线人数

正课:
##路径问题
例如以下标签都会用到

response.sendRedirect("")
request.getRequestDispatcher("")
##相对路径

  1. 不以“/”开头的路径0
    ##绝对路径

#小结
在实际应用中,应该优先使用绝对路径。

##1.servlet的线程安全问题

while(true){
Socket s = ss.accept

}

###jsp标签和el表达式
1.概念:jsp标签技术规范使开发人员和美工都能进行
更改和会为。
##el表达式:一套简单的运算规则,用于jsp标签的属性来赋值,也可以脱离jsp标签,直接使用。

el
el表达式的三种运算:
1.标签属性赋值
2.处理简单的运算
3.读取请求参数值

1.jstl:java标准标签库

(1)他是由apache开发的一套标签规范,后免费送给了sun,并命名为jstl

##(2)如何使用jstl
step1.将jstl相关的jar文件
step2.使用taglib指令,引入要使用的标签。
<%@ taglib uri="“prefix=”"%>
uri属性:指定标签的命名空间。
注:命名空间时为了区分同名的元素而在元素前添加的一段说明
为防止命名空间也冲突,经常使用域名来充当命名空间
prefix属性:命名空间的别名,为了书写方便。

(3)核心标签

###1)if标签
<c:if test="">
</c:if>
具体用法:当test属性为true,执行标签体的内容test
属性值可以使用el表达式的

2)choose标签

<c:choose>
<c:when test="${user.gender == 'm' }">男</c:when>
<c:when test="${user.gender == 'f' }">女</c:when>
<c:otherwise>未知
</c:otherwise>
</c:choose>
用法:when标签可以出现1次或者多次,当when属性值为true,执行标签体的内容,otherwise标签可以出现0次或者1次,表示例外。

3)forEach标签

<c:forEach items="" var="" varStatus="">
</c:forEach>
用法items屬性用于指定要遍历的集合或者数组,可以使用el表达式来赋值。var属性用于指定绑定名:注:该标签每次从集合或者数组中取一个元素,然后将该元素绑定到pageContext上。varStatus属性用于指定绑定名:注:绑定值是一个对象,由该标签创建,该对象提供了一些方法,用于获得当前遍历的状态,比如:要获得当前正在被遍历的元素的下标,使用getIndex方法;要获得当前正在被遍历的元素是第几个元素,使用getCount方法

2)自定义jsp标签

step1.写一个java类,继承SimpleTagSupport类
step2.在doTag方法里面,添加相应的处理逻辑。
step3.在标签描述文件(即.tld文件)中,描述该标签。

6.Servlet、JSP总结相关推荐

  1. 网站用户登录验证:Servlet+JSP VS Struts书剑恩仇录

    ? 什么是Struts框架 –从不同的角度看待Struts框架 –Struts框架的优点 ? 下载安装Struts框架 –下载配置Struts框架 –测试Struts框架 –安装Struts应用程序 ...

  2. 解决 javax.servlet.jsp.JspException cannot be resolved to a type的问题

    使用eclipse导入maven项目后出现javax.servlet.jsp.JspException cannot be resolved to a type问题 问题截图 问题原因 没有部署tom ...

  3. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    基于Servlet+JSP+JavaBean开发模式的用户登录注册 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复 ...

  4. 信息管理系统(Servlet+jsp+mvc+jdbc)

    技术需求: Servlet+jsp+mvc+jdbc 软件需求:开发工具:myEclipse 数据库: mySql 服务器:tomcat 浏览器:Firefox 硬件需求: 一台电脑 功能需求: 完成 ...

  5. Servlet/jsp和Action/jsp传值

    =======Servlet/jsp========= Servlet<----jsp(也是Servlet的类,最后解析成Html生成页面) request.getParameter()方法获得 ...

  6. javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/

    今天在启动tomcat的时候,出现了这个错误 javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletC ...

  7. java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/

    今天启动tomcat的时候出现了这样的错误 java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationC ...

  8. JDBC+Servlet+JSP整合开发之22.JSP简介

    –对JSP的需求 –JSP的结构 –JSP的好处 –JSP实例 ?创建一个简单的JSP页面 ########################################### ? JSP –JSP ...

  9. java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 错误

    java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag 电脑重置后,写一个springmvc的作业的时候,使用tom ...

  10. Java EE WEB工程师培训-JDBC+Servlet+JSP整合开发之14.Servlet请求头信息

    –典型的请求头信息 –读取HTTP请求头 –使用表格显示所有请求头信息 –理解各种请求头的含义 –区分不同的浏览器类型 ##############Michael分割线################ ...

最新文章

  1. AndroidStudio gradle配置
  2. 关于上上文hashmap的深入-hashmap产生死锁的详解
  3. mysql sql sysdate_MySQL与Oracle SQL语言差异比较一览
  4. Debian 2.6.15 内核 安装bootsplash
  5. 网络安全 —— 对称与非对称加密
  6. 【JavaWeb】IDEA中启动SpringBoot项目及解决相关报错问题
  7. 图像分辨率测试ISO12233 - 2017中文翻译
  8. Materials Studio多层聚合物的构建及data文件导出
  9. 西门子触摸屏函数翻译_触摸屏的中英文切换怎么做?
  10. 服务器终端性能测试之iometer
  11. 服务器盘符修改不了怎么办,win10更换盘符报参数错误怎么办_win10系统盘符改不了参数错误解决方法...
  12. Buct oj 1019
  13. 基于Oracle的SQL优化--学习(九)
  14. C++Primer(5th) Notes - 2.1 基本内置类型
  15. django 热启动_uwsgi 热部署 热启动 热更新
  16. 扩展坞网口不能使用,待机后无效设备
  17. opencv3 6.2非线性滤波
  18. 有符号数和无符号数之间的转换
  19. 输入一个N整数,结果为1 23 456 78910
  20. Linux系统中文件系统管理

热门文章

  1. “一文读懂”系列:AMS是如何动态管理进程的?
  2. java中的字符retry: 是什么?
  3. 0基础学RS(三)路由器基本配置
  4. python学习小组分组程序_【Python】每日一练:学生学习小组分组程序
  5. C++ POST请求调用百度AI OCR
  6. 世纪安图参加2014地理信息开发者大会
  7. jenkins-github上提交代码后构建job(十二)
  8. mapping文件的编写
  9. Shell中的cat使用
  10. 闭关备战python面试50天,“啃完”这份python面试宝典,我终于四面拿下阿里offer