您的位置:首页 > Web前端 > JavaScript

servlet+jsp学习笔记

2017-10-16 11:45 585 查看

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");%>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet web