Java Web

1. jsp 和 servlet 有什么区别?

jsp经编译后就变成了Servlet.JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

jsp更擅长表现于页面显示,servlet更擅长于逻辑控制

Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到

Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

2. jsp 有哪些内置对象?作用分别是什么?

JSP有9个内置对象:

request:封装客户端的请求,其中包含来自GET或POST请求的参数;

response:封装服务器对客户端的响应;

pageContext:通过该对象可以获取其他对象;

session:封装用户会话的对象;

application:封装服务器运行环境的对象;

out:输出服务器响应的输出流对象;

config:Web应用的配置对象;

page:JSP页面本身(相当于Java程序中的this);

exception:封装页面抛出异常的对象。

3. 说一下 jsp 的 4 种作用域?

JSP中的四种作用域包括page、request、session和application

page:代表与一个页面相关的对象和属性。离开当前JSP页面(无论是redirect还是forward),则pageContext中的所有属性值就会丢失

request:请求作用域是同一个请求之内,在页面跳转时,如果通过forward方式跳转,则forward目标页面仍然可以拿到request中的属性值。如果通过redirect方式进行页面跳转,由于redirect相当于重新发出的请求,此种场景下,request中的属性值会丢失

session:会话作用域是在一个会话的生命周期内,会话失效,则session中的数据也随之丢失。

application:应用作用域是最大的,只要服务器不停止,则application对象就一直存在,并且为所有会话所共享。

4. session 和 cookie 有什么区别?

cookie保存在客户端,session保存在服务器端,

cookie目的可以跟踪会话,也可以保存用户喜好或者保存用户名密码

session用来跟踪会话

5. 说一下 session 的工作原理?

其实session是一个存在服务器上的类似于一个散列表格的文件。里面存有我们需要的信息,在我们需要用的时候可以从里面取出来。类似于一个大号的map吧,里面的键存储的是用户的sessionid用户向服务器发送请求的时候会带上这个sessionid。这时就可以从中取出对应的值了

6. 如果客户端禁止 cookie 能实现 session 还能用吗?

Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么禁用Cookie就不能得到Session呢?因为Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,禁用Cookie相当于失去了Session ID,也就得不到Session了。

7. 如何避免 sql 注入?

PreparedStatement(简单又有效的方法)

使用正则表达式过滤传入的参数

字符串过滤

JSP中调用该函数检查是否包函非法字符

JSP页面判断代码

8. mybatis是如何防止sql 注入的?(自己加的)

<select id="getBlogById" resultType="Blog" parameterType=”int”>

select id,title,author,content

from blog where id=#{id}

</select>

如果我们想防止sql注入,理所当然地要在输入参数上下功夫。上面代码中高亮部分即输入参数在sql中拼接的部分,传入参数后,打印出执行的sql语句,会看到sql是这样的:

select id,title,author,content from blog where id = ?

不管输入什么参数,打印出的sql都是这样的。这是因为mybatis启用了预编译功能,在sql执行前,会先将上面的sql发送给数据库进行编译,执行时,直接使用编译好的sql,替换占位符“?”就可以了。因为sql注入只能对编译过程起作用,所以这样的方式就很好地避免了sql注入的问题。

9. forward 和 redirect 的区别?

forward是转发,redirect是重定向。两者的区别如下:

从数据共享来说:

            forward是一个请求的延续,可以共享request的数据;

                redirect开启一个新的请求,不可以共享request的数据。

        从效率来说:

            Forward效率较高;

            Redirect效率较低。

        从运用地方来说:

            forward:一般用于用户登陆的时候,根据角色转发到相应的模块;

            redirect:一般用于用户注销登陆时,返回主页面和跳转到其他的网站等。

        从地址栏来说:

            Forward:是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪儿来,所以他的地址栏还是原来的地址;

            Redirect:是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址。所以地址栏显示的是新的URL 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容