动态网页技术的发展:
cgi->asp=html+javascript+com组件->php->jsp=html+java片段+jsp语法+js
Jsp要求运行的机器配置要高,因为jsp是用class常驻内存的方式运行的,效率高,但是需要占用更多的内存。
b/s 模式 服务器浏览器模式
c/s 模式 服务器客户端模式
Servlet(java 服务器小程序)是用java编写的服务器程序,它的特点:
1、 它是由服务器端调用和执行的
2、 它是用java语言编写的
3、 它是按照servlet规范开发的
4、 功能强大,可以完成几乎所有的网站功能
5、 是学习jsp的基础
开发servlet三种方法
① 实现servlet接口
② 继承GenericServlet
③ 继承HttpServlet
实现servlet接口
调用destory()函数
① reload该servlet
② 关闭tomcat
③ 关机
Servlet的生命周期
继承接口方法开发servlet
通过继承GenericServlet 开发servlet
通过GenericServlet去开发servlet,只需要重写service方法
一个案例
代码如下:
package com.no2;
import javax.servlet.*;
import java.io.*;
public class HelloGeneric extends GenericServlet{
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter pw=res.getWriter();
pw.println("hello genericservlet");
}
}
通过继承HttpServlet来开发servlet
一个案例
代码如下
package com.no3;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloHttp extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
PrintWriter pw=res.getWriter();
pw.print("hello http");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req, res);
}
}
同一用户的不同页面共享数据
SendRedirect()方法
例如:
传递的页面Res.sendRedict(“wel?uname=”+u+”&pswd=”+p);//会在地址栏显示用户名和密码
接收的页面 String u=req.getParameter(“uname”); System.out.println(u);
用HIDDEN方法来实现
Session
Session是属于双击一次打开的一个浏览器的,而不是属于客户端的
操作session,由上图可以看到session是存在服务器端的,而cookie是存在客户端的
Session是非常重要的,在网站开发中可以完成的功能很多比如:
网上商城的购物车,保存登陆用户的信息,将某些数据放入到session中,供同一个用户的各个页面使用,防止用户非法登陆到某个页面。
String sessionId=hs.getId(); //用于得到session的id
设置session的默认时间(发呆时间 ),默认是秒
Hs.setMaxInactiveInterval(30);
也可以通过设置时间为0来注销session
在servlet中显示图片,只需要用html显示图片就好了
分页
Cookie
服务器在客户端保存用户的信息,比如用户名,密码,就是cookie
Cookie和session的比较
ServletContext
多个用户共享同一数据,一个公共的空间,可以被所有用户访问
注意事项
因为存在servletContext中的数据会长时间的保存在服务器,会占用内存,因为不建议向servletContext中添加过大的数据。
如果是涉及到不同用户共享数据,而这些数据量不大,同时又不希望写入数据库中,我们就可以考虑使用servletContext
Servlet中操作文件
因为servlet本来就是一个java文件,所以和java文件操作文件是一样的。
一个案例:
代码如下:对文件的读操作
package com;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletIo extends HttpServlet{
public void doGet(HttpServletRequest req,HttpServletResponse res){
try {
res.setContentType("text/html;charset=gbk");
FileReader fr=new FileReader("D:/ab.txt");
BufferedReader br=new BufferedReader(fr);
String sw=br.readLine();
br.close();
PrintWriter pw=res.getWriter();
pw.print("读出的数据是"+sw);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public void doPost(HttpServletRequest req,HttpServletResponse res){
this.doGet(req, res);
}
}
显示用户的IP地址
Req.getRemoteAddr();
显示用户的主机名
Req.getRemoteHost();