jsp总结

目录

 

jsp:include和 <%@ include%> 有什么不同

jsp9大内置对象和四个作用域

<%! int a=2; %>和 <% int a=2; %>的区别

jsp动作元素

jsp指令

bean的作用范围(错题)

jsp元素(类似<% %>的有几种)

jsp动态包含和静态包含

创建文件夹和文件

url重写

bean的释放

servlet知识点扫盲


jsp:include和 <%@ include%> 有什么不同

<jsp:include><%@ include%> 有什么不同
前者是动态包含,后者是静态包含,前者在包含jsp的时候会生成两个servlet,因为要使用request和response来进行通信。而后者在包含jsp的时候会生成一个servlet,下面题目明显有问题,并无说明是哪个include,应该是d

下面这个题目我实在看不出来a和b是哪里不一样,加不加空格都不影响。

jsp9大内置对象和四个作用域

下面四个都使用setAttribute和getAttribute来设置参数,下面四个就是四大作用域
pageContext 作用当前jsp页面,相当于同一个servlet(在老师的卷子上是page),但是这个真正的对象是pageContext
request 类似请求转发,可作用请求转发后的jsp页面
session 作用是一次会话(浏览器不关闭,就一直有用)
application 类似servletContext,作用在整个服务器上下文,除非服务器关闭或重启

page 这是个Object类型,但是在编辑成java文件的代码来看,这是指向当前jsp页面对应的java文件类
out 是JspWriter类型与response.getWriter() 有明显区分,两者同时写在一个jsp文件中,无论写的顺序如何,优先显示后者的内容。
config 类型是servletConfig,用来获得与服务器有关的参数
exception 只能在设置了isErrorPage="True"的页面使用
response:是HttpServletResponse.

<%! int a=2; %>和 <% int a=2; %>的区别

<%! int a=2; %><% int a=2; %>的区别
前者会在将jsp解析成java文件代码时,将int a=2放在类变量的位置进行定义。

后者则是在_jspService()方法内进行定义

所以前者在同一页面同一用户每次访问这个jsp代码时候,如果写上

这样的代码的话,会进行a的相加。
如果写成<% int a=2; %>则会永远输出3,因为访问这个jsp的时候,调用的是这个jsp实例的_jspService()方法,每次都定义过了int a=2;
同样,依据这个,我们可以得知,使用了<%! %>定义的java代码都会作为类的实例属性和类的实例方法,这样我们方法的 定义就只能使用<%! %>了。因为方法不能嵌套定义。同样,<%! %>之中不能写不是定义的其它java代码。

jsp动作元素


还有

<jsp:param></jsp:param>
 <jsp:params></jsp:params>  

jsp指令



bean的作用范围(错题)

jsp元素(类似<% %>的有几种)

<%! %><%= %><%@ %><%--  --%><% %>

jsp动态包含和静态包含

上面是错的,
JSP中有两种包含:静态包含:<%@include file="被包含页面"%>和动态包含:<jsp:include page="被包含页面"flush="true">

创建文件夹和文件

url重写

bean的释放

servlet知识点扫盲

servlet的三个生命周期:装载servlet,创建servlet实例,销毁servlet
还有四个生命周期的说法(我更偏向这种)

servlet工作的过程,我感觉写的非常好

首先使用的servlet是继承了HttpServlet这个类的,在servlet的生命周期中,调用其中的destroy()方法是在移除这个servlet时候执行的.说明一点,servlet中的init()方法只会在该servlet被第一次访问的时候调用,也就是说,第一次访问才被初始化实例。如果service()方法存在,也写了out.print()之类的语句,则会比doget()晚在浏览器页面上输出,这是会输出的。
另外,总结一下
Servlet的生命周期如下
1.实例化,Servlet容器创建Servlet创建Servlet实例,这里的容器就是指tomcat
2.初始化,该容器调用init()方法,完成加载servlet所需资源
3.处理请求,如果请求Servlet,则容器调用service方法,业务逻辑放在这里
4.销毁,销毁实例之前调用destroy()方法

Servlet的几个方法如下:
init()
getServletConfig()
service()
getServletInfo()
destory()

Servlet的web.xml中的一些配置信息的理解

<servlet><servlet-name>abc</servlet-name><servlet-class>com.jxust.Hello</servlet-class>   //需要注意的问题是这里需要加上包名,在同级目录下的!!
</servlet>

//当访问的是一个servlet的一个项目的时候,会先找到下面的东西
<servlet-mapping><servlet-name>abc</servlet-name>   //这里的名字要和<servlet>中的名字相同,因为要根据这个去找对应的类的文件.class,这就是映射的思想
<url-pattern>/abc</url-pattern>    //这里是你在网址栏需要输入的访问路径
</servlet-mapping>

关于filter(面试重点)

过滤器Filter
1.需要实现过滤器接口javax.servlet.Filter
2.实现Filter接口的所有方法
init()
初始化方法中可以获得FilterConfig对象,通过此对象可以取得过滤器配置的
初始化参数,完成初始化

doFilter()
为核心方法,每次当请求/响应符号过滤器条件时,过滤器的过滤方法doFilter开始工作

destroy()
此方法中编写资源清理工作

代码:
需要注意的问题:
我们设定过滤的条件一般都在doFilter()方法里面,比如我在里面写对中文字符的处理,
最好写成这样:

public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
                        throws IOException, ServletException {
                /*HttpServletRequest ht = (HttpServletRequest) arg0;
                ht.setCharacterEncoding("utf-8");*/
                HttpServletResponse res = (HttpServletResponse)arg1;
                res.setCharacterEncoding("utf-8");
                
                //继续下一个过滤器
                arg2.doFilter(arg0, arg1);
                
        }

因为我们在一般的Servlet中,都是用HttpServlet的,所以我们最好将ServletResponse转换
成HttpServletResponse,如果不转类型,也可以,但是以后在处理别的时候可能会
出现一些未知的错误,HttpServletResponse是 ServletResponse的一个子类,所以可以强制类型转换.

在设定完成过滤之后,都是要写上这样一条语句
chain.doFilter(request,response);
这个chain实际上就是上面的arg2,这是一个链,如果不写这个链,那么就会 断链,
就显示不出结果,后果很严重,至于如何添加Filter进url,然后映射到对应的class中请看
下面。

eclipse中添加Filter
在WEB-INF中的web.xml中这样写对应的源码

<filter>
        <filter-name>Chinese</filter-name>
        <filter-class>com.just.FilterTest</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Chinese</filter-name>
        <url-pattern>/*</url-pattern>
        </filter-mapping>

这种写法和传统的Servlet类似,对应的查找方式我就不再叙述。
如果是不想写源码,直接在myeclispse中添加,那么可以在
web.xml中的Design界面去点击Filters,
Add new filter
和Add new filter mapping,分别点击之后,
前者是添加类和名字,后者是添加名字和对应的url,然后重启服务器,一切ok。

完整代码:

public class FilterTest implements Filter{

        @Override
        public void destroy() {
                // TODO Auto-generated method stub
                
        }

        @Override
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
                        throws IOException, ServletException {
                /*HttpServletRequest ht = (HttpServletRequest) arg0;
                ht.setCharacterEncoding("utf-8");*/
                HttpServletResponse res = (HttpServletResponse)arg1;
                res.setCharacterEncoding("utf-8");
                
                //继续下一个过滤器
                arg2.doFilter(arg0, arg1);
                
        }

        @Override
        public void init(FilterConfig arg0) throws ServletException {
                // TODO Auto-generated method stub
                
        }

}

如果是登录界面,比如说对登录之后才能才能访问的界面可以做过滤,但是如果登录后的
界面很多,用通配符会将登录页面也覆盖掉,这种情况下,需要将登录页面给做做判断,
使用req.getRequestURI()去得到对应的url路径,然后将url和对应的登录路径做匹配,
条件满足就是登录页面,条件不满足,就是过滤登录里的内容

RequestDispatcher 接口实质

参考http://www.cnblogs.com/lulipro/p/7471987.html

RequestDispatcher接口的概述:public interface RequestDispatcher
定义一个对象,该对象负责在服务器端接收来自客户端的请求并向他们发送资源(例如一个servlet,HTML文件,或者是JSP文件)。servlet容器创建RequestDispatcher对象,用来包装一个给定位置或名字的服务器资源。
该接口被设计于包装servlets,但一个servlet容器可以创建该对象以保证任何类型的资源。
forward()方法概述: public void forward(ServletRequest request,ServletResponse response) throws ServletException,java.io.IOException

推进一个请求到服务器的某个资源(如:servlet,JSP文件,或HTML文件)。该方法允许一个servlet对一个请求作初步处理,而另一个资源将产生响应。
由于一个RequestDispatcher对象是通过getRequestDispatcher()方法获得,ServletRequest对象拥有自己的路径元素和变量以匹配目标资源路径。
forward()方法应该在响应被提交到客户端之前被唤起(在响应主体输出被刷新之前)。如果响应已经被提交,该方法抛出IllegalStateException 。在forward之前,响应未被提交的输出会被自动清理掉。
请求和响应的两个参数必须是与传递给servlet的service()方法相同的对象,或者是由ServletRequestWrapper、ServletResponseWrapper的子类(封装的)对象。

include()方法概述:
public void include(ServletRequest request,ServletResponse response) throws ServletException,java.io.IOException

该方法在响应中包含某些资源的内容(如:servlet,JSP文件,HTML文件)。该方法关键是能包含服务器端的程序。
ServletResponse对象包含来自调用者的保持不变的路径元素和参数。被包含的servlet不能改变响应状态代码或设置头信息;任何制造改变的尝试都会被忽略。
请求和响应的两个参数必须是与传递给servlet的service()方法相同的对象,或者是由ServletRequestWrapper、ServletResponseWrapper的子类(封装的)对象。
最后,见ServletContext.getRequestDispatcher(java.lang.String), ServletContext.getNamedDispatcher(java.lang.String), ServletRequest.getRequestDispatcher(java.lang.String)

监听器(面试重点)

监听器类型有以下几种:
ServletContext对象监听器
ServletContext对象属性监听器
HttpSession对象监听器
HttpSession对象属性监听器
HttpServletRequest对象监听器
HttpServletRequest对象属性监听器

例如:当session清除的时候,被监听器获取到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值