servlet+jsp学习笔记

来源:互联网 发布:php 获取二维数组键值 编辑:程序博客网 时间:2024/05/24 15:43

servlet创建

打开eclipse,首先确保是web项目(eclispe maven项目转换成web项目),然后可以new servlet,确定后注意
Eclipse新建Servlet时候,不会自动生成mapping到web.xml,而是在代码中加入注解@WebServlet ,参考链接http://blog.csdn.net/xulianboblog/article/details/51079534

servlet映射路径

1、完全路径匹配 以/开头 例如:/aaa
2、目录匹配(通配符匹配) 以/开头 例如:/*
3、扩展名匹配 不以/开头 例如:*.do(以.do结尾)
优先级:完全路径匹配>目录匹配>扩展名匹配
典型错误 / *.do

servletContext

web容器在启动时,它会为每个WEB应用程序都创建一个对应的servletContext对象,它代表当前web应用。由于一个web应用中的所有servlet共享一个servletContext对象,因此servlet对象之间可以通过servletContext对象来实现通讯,servletContext对象通常也被称为context
应用:获取web应用的全局初始化参数
通过servletContext对象实现数据共享(访问页面数)
利用servletContext对象读取资源文件(不常用,任何类通过类加载器都可以读取资源文件)

servlet单例和线程安全

同步就是安全,但是效率太低
servlet是线程不安全的

jsp真身:servlet

当客户请求的jsp页面时,服务器会查看jsp对应的servlet是否存在,如何存在,那么直接调用servlet的service()方法来处理请求,如何不存在,那么服务器会先把jsp编译成java,再把java编译成class,然后调用service()方法,当这个jsp,第二次处理请求时,就直接调用真身的service()方法了。(动态的实现是通过servlet中java代码一行一行输出

jsp的scriptlet

script是脚本的意思,let是小程序的意思,scriptlet表示脚本小程序。
jsp中java代码块就是常见的动态信息,它分为3种。
<%...%>java代码片段
<%=...%>表达式在页面打印数据
只能出现常量、变量、以及有返回值的方法调用,而且不能出现分号<%=a;%>;是错的
<%!...%>申明全局变量,全局方法

jsp注释

语法:<%--...-->
原java//,/*...*/, html<! --...-->注释同样适用
HTML注释和jsp注释二者的区别
1、<!-- -->:tomcat不把它当注释,和其他东西一样,会发送到客户端,但浏览器不会去显示它,因为浏览器知道它是注释;
2、<%--...--%>:tomcat在生成“真身”时,就会忽略它,因为tomcat认识它,知道它是注释,所以在“真身”中就没有它,也不会发现到客户端,也就是说,客户端永远看不懂它!

jsp内置对象

out:最为常用的方法是print(),向页面打印数据,与response.writer()基本相同
config:在页面中基本没有什么用,但如何jsp在web.xml中存在配置,而且存在初始化参数,那么可以使用config来获取config对象的 功能是:getServletContext、getServiceName()、getInitParameter(),这3个方法在jsp中都没有什么用,所以config也就没什么用,jsp也可以在web.xml中配置,但是我们没有配置的必要!
page(当前jsp真身类型):在页面中用this和page是相同的。
request:与servlet中request一样,没有区别
response:与servlet中response一样,没有区别
application:就是servletContext对象
session:就是HTTPSession对象
exception:类型是throwable,只能在错误页面中使用
pageContext:没有什么用

jsp4个域对象

pageContext范围:当前页面之内有效
request范围:当前的请求内有效
session范围:当前的会话内有效(浏览器不关闭就是一次会话)
application范围:当前这次服务器生命周期内有效

域对象的共同特点是都管理域中的属性:
他们有相同的方法:
void setAttribute(String name,Object value);
Object getAttribute(String name,Object value);
void removeAttribute(String name,Object value);
服务器间的跳转

pageContext详细分析

pageContext不只是域对象,而且还可以操作所有域对象,还可以获取其他隐藏对象contextPath。
操作所有域(四个域):通过scope指定范围如:pageContext.PAGE_SCOPE;

jsp指令

<%@指令名 attr1='' attr2=''%>,一般都会把jsp指令放到jsp文件的最上方,都不是必须。jsp3大指令:page、include、taglib,最为常用。
tomcat编译系统会根据JSP的指令来编译JSP,生成Java文件。在生成的java文件中,不存在指令信息!

page指令的pageEncoding和contentType(整个项目编码和jsp编码需要一致)
pageEncoding:当前页面编码
contentType:生成hmtl代码正文编码
request.setCharacterEncoding(“UTF-8”)

page指令的import属性
<%@page import="java.util.*"%>
一般我们使用多个page指令导入多个包。

page指令的errorPage属性和isErrorPage属性以及内置对象exception
pageError的路径,由于是服务器端的跳转,所以绝对路径不需要加项目名,直接指定项目名称后面的路径即可。<%@page errorPage="/"%>
<%@page isErrorPage="true"%> <%=exception.getMessage()%>

还可以通过配置web.xml中的<error-page></error-page>

  • jsp include指令 *
  • jsp tablib指令 *:引入第三方的标签

jsp动态标签包含include:适合一个页面有很多板块,是共用的。

<jsp:include page="/xxx.jsp?name=les"></jsp:include>

xxx.jsp中得到包括页面传的参数:<%String name = request.getParameter("name");%>

原创粉丝点击