jsp基础知识

本文介绍了JSP的基本工作流程,包括HTTP协议的特点、请求与响应机制、页面跳转及转发的区别等内容。同时探讨了如何处理中文乱码问题、设置不同作用域变量的方法以及EL表达式的使用技巧。

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

1、运行jsp流程,向浏览器窗口中输入如下:http://127.0.0.1:8080/test.jsp,所产生的过程如下:
(1)浏览器解析我们输入的网址,查找服务器的位置,浏览器以http协议去访问localhost的8080号端口
(2)找到服务器的位置,浏览器会向服务器发送一个请求(request)
(3)浏览器接收请求,分析请求中包含的数据。
(4)在服务器操作结束后,会生成一个响应(response)发送给客户端的浏览器
(5)浏览器开始解析与运行,最后将结果显示给用户

2、http协议的两个重要特性是:
     短连接:请求响应一次,服务器就关闭与浏览器之间的连接
     无状态:任何两次响应之间没有直接的联系

3、浏览器发送一个请求,服务器才响应,一个请求对应一个响应,服务器只能接受请求不能发送请求,因为如果没有请求,服务器就不知道浏览器在什么地方,连接用完就断掉,这样不会浪费资源

4、jsp的所用工作就是处理请求,返回响应,jsp只负责浏览器上面的东西,与浏览器没有任何关系,显示图片,显示文字,点击按钮,这些都是浏览器的工作,因为http的无状态性,当jsp返回一个请求时,就不会再对浏览器产生任何影响。

5、浏览器和服务器基本上就是两个孤岛,两者之间没有任何直接的联系,而http就是两边都会使用的信鸽,实际上jsp是不知道浏览器的存在的,它只是根据http的请求,发送http的响应,如果对面的浏览器能解析http形式的响应,就能显示这个页面,目前市面上的浏览器都能解析http形式

6、因为页面数据是从服务器一端放入响应中的,然后发送给服务器,如果响应中的数据无法被正常解析,机会出现遛乱码问题
英文编码格式英文是有效字符,这个限制是因为当初制定http标准的成员都是来自英语国家都是一样的每个字符占8位,为中文在gb2312下中文占16位,在utf-8下中文占24位,三字节

7、当form表单的提交方式是post,在jsp前面加上一条request.setCharacterEncoding("gb2312");

post方式解决还算简单,因为post方式下提交的数据都是以二进制的方式附加在http协议请求的body部分发送的,只需要在后台指定编码格式就能解决,而get方式下将参数直接附加在URL后面,这部分参数无法使用request.setCharacterEncoding()处理,结果就是get方式的所有中文都变成了乱码,这时只能对这些中文一个一个进行转化  使用new String(bytes,"gb2312");

进行转码:

String  username = request.getParameter("username");
byte[] bytes = username.getByts("iso-8859-1");  //先从request中获取参数再将字符串按照iso-8859-1编码打成byte数组,
String result = new String(bytes,"gb2312");//然后用gb2312编码组成新的字符串
所以在写时form表单尽量使用post方式,这样能较快的解决中文乱码的问题

8、首先调用request的getRequestDispatcher()方法,获得对应red.jsp的转发器,然后调用forward()方法执行请求转发。结果用户看到的就是red.jsp中的结果了,一个红色的页面
与forward不同,url地址一直在变化,红色的时候显示red.jsp,绿色的时候显示green.jsp。 
向浏览器发送一个页面重定向
(redirect)的响应,响应中包含red.jsp的url地址。

9、(1)如果使用的URL网址是以“/”开头的,那么这个网址就叫做绝对路径。 
     (2)如果咱们使用的URL网址不是“/”开头的,那么这个网址就叫做相对路径。
      如果需要在多个项目之间进行跳转,就只能使用redirect

10、不要在不同的目录之间使用forward做请求转发,保证当前路径不发生变化。

11、在实际中是不允许在jsp中写那么多的代码的

12、计数
page计数:只要页面跳转了,它们就不见了
request计数:里面的变量可以跨越forward前后的两项,但是只要是刷新页面,它们就重新计算了
session计数:一直在累加,只要关闭浏览器,再重新启动浏览器访问这页,session李的变量就重新开始计算了。
application计数:一直在累加,除非重启tomcat,否则她会一直在变大

13、(1)如果把变放在pageContext,就说明他的作用域是page,有效范围只在当前的jsp页面里。从把变量放在pageContext开始,到jsp页面结束,你都可以使用这个变量。
       (2)如果把变量放在request里,就说明他的作用域是request,它的有效范围是当前请求周期。所谓请求周期就是指从http请求发起,到服务器处理结束,返回响应的整个过程,在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量
       (3)如果将变量放在session中,说明她的作用域是session,她的有效范围是当前会话。所谓当前会话:就是指从用户打开浏览器开始,到用户关闭浏览器这个中间的过程,这个过程可能包含多个请求响应,也就是说,只要用户不关心浏览器,服务器就有办法知道这些请求时一个人发起的,整个过程被称为一个会话。
      (4)如果将变量放在application中,就说明它的作用域是application,它的有效范围是整个应用程序。
所谓整个应用是指应用启动到应用结束。如果不手工删除,它们就一直存在。
application里面的变量时被所有的用户公用的,如果用户甲的操作修改了application中的变量,用户乙访问到的就是修改后的值,这在其他的scope都是不会发生的,

14、el表达式的好处:
(1)代码量小,并且不需要使用尖括号
(2)支持从pageContext,request,session,application中取值,他会自动检查四个作用域,不需要特别的指定
(3)变量不存在就会输出空字符串"",而不是null

15、在线用户列表:
(1)用户登录,使用的用户名是保存在session中的,通过session中是否存在用户名来判断用户是否已登录,session可以在整个会话过程中保存用户信息,不必每次刷新页面都要重新登录
(2)用户登录后,将用户名添加到application中的在线用户列表,用户注销时,将用户名从application中的在线列表中删除

16、在jsp中使用自己写的JavaBean,不过这种写法也仅仅只适用于小型应用程序,结合JavaBean实现CRUD,JavaBean是把一些操作集合放在一起写成一个Java类,想进行什么操作直接调用这个类里的方法就行。
使用JavaBean的地方有两处:一个就是连接数据库并进行CRUD操作,另一个就是把条数据都写成一个类。

17、默认的命名来表示不同的操作:
  Create:  list.jsp    create.jsp   save.jsp
  edit.jsp
  update.jsp
  remove.jsp

18、jsp  Java serve page, Java EE组件 本质上是Servlet,接收http request 生成http response,jsp使得我们能够分离页面的静态html和动态的部分。Servlet是controll

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值