1.jsp和html的区别
(1)jsp相当于在html中嵌入java脚本,
(2)jsp是动态的,html是静态的(静态不需要服务器的支持,动态必须有服务器的支持才能运行;html文件双击就能运行,jsp双击只能看到代码,并不能看到运行效果)
动态的含义:需要服务器的支持;内容是经常发生改变的
(3)一个页面需要动态取数据,内容发生改变用jsp;不发生改变如登陆页面,用html也可以用jsp,只不过服务器出来的时候需要先变成.java文件再变成.class才能运行。
2.jsp和servlet的区别
(1)jsp本质就是servlet,即servlet也可以替换jsp,但用servlet做显示会非常麻烦,理论上jsp也可替换servlet,十几年前,使用jsp+javabean,但违反了分层、分工思想。所以Jsp仅做显示层,jsp中尽量少出现业务逻辑代码
(2)按照mvc分层思想,servlet在mvc中属于控制层,jsp在mvc中做view层
3.javaEE中有哪几种页面跳转方式
(1)request.getRequestDispatcher("/main.jsp").forward(request.response);
<1>相当于是在服务器端的跳转,是一个请求;
<2>不丢值,刚才发送过来的request是一个request,所以在这一个request中setAttribute()时,这个值在下一个页面是可以取到的
<3>用此种页面跳转方式,可以直接写要去跳转的路径,因为是在服务器端的跳转,不用加工程名
(2)response.sendRedirect("/projectName/main.jsp");
<1>相当于是客户重定向;
<2>丢值,客户重定向相当于又来了一个新的请求,前面一个request的值就没有了,意味着如果是request.setAttribute()那么通过此种页面跳转方式,在main.jsp中request.getAttribute()是找不到上一页面设置的值得。
<3>跳转路径必须加projectName工程名
<4>有人使用此种方法,因为跳转页面后,上一页面的request.setAttribute()找不到了。所以他在上一页面用session.setAttribute,跳转后用session.getAttribute()来获取。这是这种做法不对的。在一个请求里的数据是说一个请求完了以后,这个资源可能就被释放了,若放到session,他的生命周期就长了,会耗费资源耗费空间,做项目时如果把值放在request中就能满足要求就不要往session里放,如果把值放在session中就能满足要求就不要往servlet contest里放,
如果往下个页面传值,必须用第一种方式,若不传值,只跳转就可以用第二种,
例如:session防止非法登录,如果非法得访问我们保护了的资源,要重新定位到登陆页面,所以里面用了response.sendRedirect("/login.jsp");
4.访问servlet的2种方式及给servlet传参
(1)以form表单的方式
<html>
<body>
<form name="" action="/JspDemo/loginServlet" method="post">
<input type="text" name="userName" />
<input type="submit"/>
<input type="hidden" name="actonCode"/>
</form>
</body>
</html>
method默认方式是get,
点击submit,访问你loginServlet
传参:
方法一:<input type="text" name="userName" />
到了servlet用request.getParameter("userName")得到值
方法二:<input type="hidden" name="actonCode"/>
到了servlet用request.getParameter("actonCode")得到值
(2)超级链接方式
<html>
<body>
<a href="/JspDemo/loginServlet">login</a>
</body>
</html>
传参:<ahref="/JspDemo/loginServlet?userName='Tom'&actionCode='login'">login</a>
(3)直接在浏览器里回车
http://127.0.0.1:9090/JspDemo/loginServelt
5.静态include和动态include
静态:<%@includefile="footer.jsp"%>
动态:<jsp:includepage="footer.jsp"/>
静态Include是把要包含进来的文件一同进行解析,生成.java文件
动态include是在调用当前文件时,动态调用footer.jsp(即所要包含的页面)
如果所包含进来的文件所发生改变的概率较小,用静态Include,否则用动态Include
6.jsp中的隐含对象
Request
Response
pageContext
Session
Application
Out
Config
Page
exception
session存在了如何销毁