Servlet简介
Servlet(Servlet Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容
Servlet路径
request.getScheme():获取协议
request.getServerName():获取IP地址
request.getServerPort():获取端口号
request.getServletContext().getContextPath():获取工程名动态获取协议、IP、端口号、工程名
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"+request.getServletContext().getContextPath()+"/";静态的协议、IP、端口号、工程名http://localhost:8080/imook_servlet1/loginServlet
Servlet生命周期
生命周期:
1.初始化阶段调用init()方法init只有第一次打开网页的时候被调用
2.响应客户请求阶段调用service()方法可以被访问多次
3.终止阶段调用destroy()方法当工程从服务器中移出,才会调用。不是关闭服务器
原理:
Servlet作用请求与响应
浏览器对服务器的一次访问被称之为一次请求,请求用HttpServletRequest对象来表示
服务器给浏览器的一次反馈称之为一次相应,相应用HttpServletResponse对象来表示
ServletContext与ServletConfig
Java是一门面向对象的语言,万事万物皆对象。整个JavaWeb工程也可以用一个对象来表示,这个对象就是ServletContext类型。 我们可以在web.xml文件中给某一个Servlet配置一些配置信息,当服务器被启动的时候,这些配置信息就会被封装到某一个ServletConfig对象中去,因此ServletConfig表示的是某一个Servlet的配置文件。
常用方法:
// 获取代表某一个JavaWeb工程的ServletContext对象
// Context对象是一个域对象,可以往某一个域对象中存放数据,并且还可以取出存放的数据ServletContext context = this.getServletContext();
// 往context域对象中存放数据
//context域对象中的数据可以从其他文件中提取
context.setAttribute("username", "张三");
// 取出context域对象中的数据
Object result = context.getAttribute("username");
// 打印取出的结果:张三
System.out.println(result);
//首先获取ServletConfig对象
ServletConfig sc = this.getServletConfig();
//获取sc这个对象中封装的信息String encoding=sc.getInitParameter("encoding");System.out.println("encoding="+encoding);
XML文件中配置参数
<servlet>
<servlet-name>Demo3Servlet</servlet-name><!--这个东西相当于变量-->
<servlet-class>cn.java.servlet.Demo3Servlet</servlet-class>
<init-param>
<!-- 配置encoding参数,启动时自动封装到Demo3Servlet的ServletConfig对象中去 -->
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</servlet>
转发与重定向的区别
实现转发调用的是HttpServletRequest对象中的方法,实现重定向调用的是HttpServletResponse对象中的方法
转发时浏览器的URL地址栏不会发生改变,重定向时浏览器中的URL地址会发生改变
转发时浏览器只请求一次服务器,重定向时浏览器请求两次服务器
转 发:
request.setAttribute("username","内容");
request.getRequestDispatcher("/文件名.jsp").forward(request,response);
接收:
request.getAttribute("");
重定位:
ServletContext sc=request.getServletContext();
sc.setAttribute("变量","内容");
response.sendRedirect("/工程名/文件名");
接收:
application.getAttribute("变量");
网友评论