葵花宝典 十 servlet jsp

来源:互联网 发布:mac怎么关闭窗口 编辑:程序博客网 时间:2024/06/10 06:47

servlet是什么
servlet是javaee web组件,必须在web容器中,需要容器为其提供运行的环境,课程中使用tomcat作为容器 。

本质上servlet就是一个java类,不过这个java类要遵守一定的规范,即继承HttpServlet类

HttpServlet类中定义了很多方法,自定义的servlet类需要覆盖其中的方法,一般情况下,只覆盖doGet或doPost。使用GET方式访问时候,自动调用doGet方法,使用post方式访问时,自动调用dopost

servlet是组件,所以不能向javase那样直接用main方法自定义对象来使用,必须放在容器中,使用容器访问。

访问servlet之前,必须配置servlet,在web.xml中配置servlet

自定义的名字,一个web.xml中不重复
Servlet类的完整名字


与之前的名字对应
自定义的逻辑地址,必须以/开头

如何访问servlet
直接在地址栏中输入url访问,调用doget方法

使用表单提交访问,在action中指定servlet的url,

使用超级链接访问 在herf处指定servlet的url
点击 type 是button 的按钮时,不会提交到action的资源上,而是会通过js提交的

jsp 的概念
jsp是运行在服务器端的组件,用来生成动态页面的。
jsp看起来是就是html+java代码,其中html实现静态的部分,java代码实现动态的部分

jsp也必须在容器中运行。

jsp的脚本.表达式
脚本元素 <%%>
表达式:<%=需要输出的内容%>

servlet与jsp之间传递数据

为什么要传递数据
jsp提交到servlet时,往往需要把用户输入的一些数据传递给servlet,serlvet进行处理

servlet跳转到jsp时,往往需要把一些数据传递给jsp,jsp进行显示。

如何传递数据
请求参数:往往用户jsp提交到servlet时使用
表单提交时,表单的输入都被作为请求参数提交
使用url提交时,可以通过字符串查询的方式

请求属性:往往用于servlet提交到其他servlet或者jsp时使用
HttpServletRequest接口中的两个方法
void setAttribute(String,Object)
Object getAttribute(String)

请求参数与请求属性
请求参数是自动封装到请求中的,直接使用请求用getParameter或者getParameterValues获取即可

请求属性是需要自行写代码保存,然后再取出使用
setAttribute 保存属性
getAttribute获取属性
注意: 由于保存属性时都以Object类型保存,所以获取后获取强制类型装换

servlet与jsp的作用总结…

jsp的运行过程
翻译:jsp文件—-》java文件
访问jsp时,tomcat首先会按照规范把jsp文件翻译成.java文件,存放在work目录下
编译:java文件—-》class文件
实例化
tomcat创建jsp类的对象
提供服务、
tomcat调用jsp对象的jspservive方法,生成响应,返回给客户端浏览器,浏览器进行显示
销毁

jsp的本质是一个java类,这个java类也是遵守servlet的规范,可以说,jsp就是一个servlet
我们编写的jsp文件中的所有内容,都会被翻译到java类中的jspservice方法中,并且放在固定代码中,
可以说,我们写的jsp代码,无非是java类的jspservice方法的方法体的一部分

上下文的概念
myeclipse的每一个web project,运行时都部署在tmocat下,称为一个应用
部署后,启动tomcat时,tmocat将为每一个应用创建一个对象,这个对象称为上下文对象

也就是说,一个应用有且只有一个上下文对象,由容器创建,并保存在容器中

上下文的作用
上下文对象类似一个全局变量,在整个引用中有效

利用上下文对象,可以实现多个用户之间的数据共享

上下文 API-ServletContext接口
servletAPI中定义了servletContext接口,用来封装上下文对象
set、getAttribute()
getRealPath()根据虚拟路径返回实际路径

如何获得ServletContext对象
servletContext是接口,不能直接创建对象
servletContext对象是容器创建的,可以使用ServletAPI
提供的方法获取该对象
servlet类中常用的获取上下文对象的方法
servletConfig接口中定义的getServletContext方法
由于自定义的Servlet间接实现了ServletConfig接口,因此可以直接调用getServletContext方法返回ServletContext对象

jsp文件中使用上下文对象的方法
jsp文件的内置对象application即上下文对象,可以调用servletContext接口中的任意方法

登陆人次统计说明
问题: 变量保存到哪里呢》?
保存到请求中
不可以,如果保存到请求中,每次登陆都是新的请求,那样子都会重新计算
保存到会话中?
不可以,如果保存到会话中,不同的pc客户端,是不同的会话,也会重新计算
保存到上下文中
可以,上下文是一个,只有一个可以多个用户共享,计算可以累加
ServletContext ctxt=this.getServletContext();
String countstr=(String)ctxt.getAttribute(“count”);
int count=0;
if(countstr==null){
count=1;

}else{
count=Integer.parseInt(countstr);
count++;
}
ctxt.setAttribute(“count”,count);

web.xml中配置上下文参数
如果在一个应用中的多个servlet或jsp中都使用的变量,以后还可能被修改,则可以考虑配置成上下文参数,在web.xml的下配置:

level
1

值:<%=application.getInitParameter(“level”)%>
注册账户

如何获得上下文参数
在servletContext中定义了getInitParameter方法可以获得上下文参数的值
在Servlet类中:
ServletContext ctxt=this.getServletContext();
//仅仅测试上下文参数使用,无实际意义
System.out.println(“level: “+ctxt.getInitParameter(“level”));

在JSP文件中:
测试一下上下文参数,Level值:<%=application.getInitParameter(“level”)%>

上下文参数与Servlet参数都是在web.xml中进行配置的
上下文参数在下使用配置
Servlet参数在下使用配置
(见第二章)
上下文参数在整个上下文中都可以用,任何一个Servlet或JSP都可以使用
Servlet参数只能在当前的Servlet中使用
获取Servlet参数的方法在ServletConfig中定义:getInitParameter;而获取上下文参数的方法在ServletContext中定义: getInitParameter