再学jsp与servlet

来源:互联网 发布:淘宝apass会员有什么用 编辑:程序博客网 时间:2024/04/29 20:49

Servlet:

servlet是比jsp更早的动态网页编程技术。servlet可同时充当视图层、业务逻辑层及持久层角色。由于角色复杂,任务繁重,使得servlet开发效率极低,且美工难以参与。MVC规范出现后,servelet责任才明确下来,仅仅作为控制器使用;而由servlet发展来的jsp充当了视图层角色(jsp是servlet的一种简化)。

servlet与jsp的区别:

servlet没有内置对象,原来jsp中的内置对象都必须由程序显式创建。

对于静态的html标签,servlet都必须使用页面输出流逐行输出。

servlet的配置:

为了让servlet能响应用户请求,必须将servlet配置在web应用中,此时需要修改web.xml文件。

<servlet>
        <servlet-name>VerifyCodeServlet</servlet-name>
        <servlet-class>org.zlzx.web.servlet.VerifyCodeServlet</servlet-class>
</servlet>
<servlet-mapping>
        <servlet-name>VerifyCodeServlet</servlet-name>
        <url-pattern>/verifyCode</url-pattern>
</servlet-mapping>

servlet的生命周期:

与jsp相同,包括创建servlet实例、完成初始化、响应客户请求、资源回收完成、销毁实例

servlet的配置参数:

用来读取web.xml等配置文件中的配置参数。

servletContext:可获取整个web应用的配置参数

ServletConfig:获取当前servlet的配置参数(其实它就是jsp中的内置对象config)

 

//获取ServletConfig对象servletConfig config=getServletConfig();//通过ServletConfig对象获取配置参数driverString driver=config.getInitParameter("driver") //通过ServletConfig对象获取配置参数urlString driver=config.getInitParameter("url") //通过ServletConfig对象获取配置参数usreString driver=config.getInitParameter("user")//通过ServletConfig对象获取配置参数passString driver=config.getInitParameter("pass")  

以上参数在web.xml中配置如下:

<servlet>    <servlet-name>testservlet</servlet-name>    <servlet-class>lee.TestServlet</servlet-class>    <!--配置servlet的初始化参数-->    <init-param>         <param-name>driver</param-name>          <param-value>com.mysql.jdbc.Driver</param-value>        </init-param>    <init-param>         <param-name>url</param-name>          <param-value>jdbc:mysql://localhost:3306/j2ee</param-value>        </init-param>    <init-param>         <param-name>user</param-name>          <param-value>root</param-value>        </init-param>    <init-param>         <param-name>pass</param-name>          <param-value>123456</param-value>        </init-param></servlet><servlet-mapping>
    <servlet-name>testservlet</servlet-name> 
    <url-pattern>/testServlet</url-pattern></servlet-mapping>

Jsp脚本中的9个内置对象:

这九个内置对象都是servlet Api接口的实例(jsp其实是一种简化的servlet),只是JSP规范将他们完成了默认初始化,也就是说,它们已经是对象(实例),可以直接使用。

Config:javax.servlet.servletconfig的实例,该实例代表该jsp的配置信息。常用的方法有getInitParameter()、getInitparameternames等。实际上,jsp页面通常无需配置,也就不存在配置信息。因此该对象更多地在servlet中有效。

Exception:java.lang.throwable的实例,该实例代表其他页面中的异常和错误。只有当页面在处理错误页面,即编译指令page的isErrorPage属性为true时,该对象才可以使用。常用方法:getMessage()和printStackTrace等。

Out:javax.servlet.jsp.jspwriter的实例,该实例代表jsp页面的输出流,用于输出内容,形成html页面。

page:代表该页面本身。即servlet中的this,其类型就是生成的servlet类,能用page的地方就可用this

PageContextjavax.servlet.jsp.pagecontext的实例,该对象代表该jsp页面上下文,使用该对象访问页面中的共享数据。常用的方法有getservletcontext、getservletconfig、getsession、getout、getAttribute、getRequest、getResponse、setAttribute、getAttribute等。

pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。

requestjavax.servlet.http.httpservletrequest的实例,该对象封装了一次请求,客户端的请求参数都被封装在该对象里。这是一个常用的对象,获取客户端请求参数必须使用该对象。getAttribute、getParameter、setAttribute等

response;javax.servlet.http.httpservletresponse的实例,代表服务器对客户端的响应。通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response常用语重定向,常用的方法有getoutstream、sendRedirect等

session:javax.servlet.http.httpsession的实例,该对象代表一次会话。客户浏览器与服务器建立连接开始,关闭浏览器结束。getAttribute、seAttribute等

servlet转发请求:RequestDispatcher.forward

jsp转发请求:<jsp:forward page=>

application:javax.servlet.servletContext的实例,该实例代表jsp所在的web应用本身,一个web应用只有一个ServletContext实例,可用于jsp页面之间、与servlet之间或Servlet之间交换信息。常用的方法有getAttribute()、SetAttribute()、getInitParameter()等。

application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。


JSP内置对象对属性的设置及获取

 //使用pageContext 设置属性,该属性默认在 page 范围内

pageContext. setAttribute ("page" , "hello") ;

//使用request 设置属性,该属性默认在request 范围内

request. setAttribute ("request" , "hello");

//使用pageContext将属性设置在request 范围中

    pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);

 // 使用session将属性设置在session 范围中

    session.setAttribute("session" , "hello"l;

 //使用pageContext将属性设置在session范围中

    pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);

//使用application将属性设置在application范围中

    application. setAttribute ("app" , "hello") ;

 //使用pageContext 将属性设置在application 范围中

    pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

MVC模式

JavaEE架构师遵循MVC模式的,对于遵循MVC模式的JavaEE应用而言,其Model、View、Controller如下分配:

JSP仅用在表现层(View),作用有二:收集用户请求参数;将应用处理后的结果、状态数据呈现给用户

Servlet将作为控制器存在(Controler),它的作用类似于调度员:所有用户请求都发送给Servlet,Servlet调用Model来处理用户请求,并调用JSP呈现处理结果;或Servlet直接调用JSP将应用的状态数据呈现给用户。(控制器既不直接对用户输出响应,也不处理用户请求,只调用JavaBean来处理请求、调用Jsp呈现结果)

Model通常由JavaBean来充当,所有业务逻辑、数据访问逻辑都在Model中实现。实际上隐藏在Model下的组件还有很多,例如DAO组件、领域对象等。

 

 


 

原创粉丝点击