第一部分:
Myeclipser下servlet的使用
1. 将tomcat lib目录下的servlet-api.jar路径添加到环境变量classpath中;
2.在Myeclipse工程下单机右键:build-path:将驱动servlet-api.jar添加进来。
3.运行编译。
4.打开web.xml.查看url-pattrm的映射路径。然后在浏览器中输入测试即可。以下为我的实验步骤:大家点评一下。
第一步:创建servlet
第二步:书写doGet方法
第三步:添加驱动:
第四步:查看映射:
第五步:输入路径测试
总结:servlet可以映射多个路径。其作用不是用于显示,而是用来作用于业务逻辑层。
第二部分:表单提交路径与servlet中web.xml配置路径问题
假设创建的servlet名称为:huoqu,所在的webprojiect 名称:MY_jsproad
在web.xml中所映射的路径为:/servlet/huoqu
则需要在表单的动作元素中 的路径为:“servlet/huoqu”或”/MY_jsproad/servlet/huoqu”
第三部分:servlet生命周期
1.service方法尽量不要重写,否则,会造成doGet和doPost方法失效。
2.生命周期过程:init方法进行初始化,doGet和doPost进行成长,destroy进行消亡。
程序如下:
packageorg.lxh.servletdemo;
import java.io.IOException;
import java.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public class LifeStyleextends HttpServlet {
public LifeStyle() {
//super();
}
public void destroy() {
//super.destroy();
System.out.println(“——–3.销毁——>destroy()——“);
}
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
System.out.println(“******2.servlet服务***–>service()***”);
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
this.doGet(request,response);
}
public void init() throwsServletException {
System.out.println(“***servlet初始化***–>init()*”);
}
}
第四部分:servlet初始化配置信息
1.要使用ServletConfig对象首先要导入三个包:(1)import java.io.*;(2)importjavax.servlet.*(3).import javax.servlet.http.*
实例如下:
第一步:编写一个servlet:
packageorg.lxh.servletdemo;
import java.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
public classinitparamservlet extends HttpServlet {
String initparam=null;//用于保存初始化参数
public voidinit(ServletConfig config)throws ServletException{
this.initparam=config.getInitParameter(“ref”);//是从web.xml中的<init-param>中获取的
}
public initparamservlet() {
super();
}
public void destroy() {
super.destroy();
}
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
System.out.println(“初始化为”+this.initparam);
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
this.doGet(request,response);
}
}
第二步:
配置web.xml信息:
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-appversion=”2.5″
xmlns=”http://java.sun.com/xml/ns/javaee”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”>
<display-name></display-name>
<servlet>
<description>This is the description of my J2EEcomponent</description>
<display-name>This is the display name of my J2EEcomponent</display-name>
<servlet-name>initparamservlet</servlet-name>
<servlet-class>org.lxh.servletdemo.initparamservlet</servlet-class>
<init-param>
<param-name>ref</param-name>
<param-value>zhanggaokai</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>initparamservlet</servlet-name>
<url-pattern>/servlet/initparamservlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
第三步:编译:
输入:http://localhost:8080/工程/servlet/initparamservlet结束
注:如果servlet中覆写了两个init方法,则执行含有初始化参数的那个init方法.
第五部分:servlet获取内置对象
如果出现错误:this is get method,请重新部署项目。
1.在servlet中,只提供了response和request两个对象。在获取session对象的时候,只能使用request获取。
(1)。获取session对象,application对象。
packageorg.lxh.servletdemo;
import java.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
public class sessionservletextends HttpServlet {
public void destroy() {
super.destroy();
}
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
HttpSessionses=request.getSession();//获取session对象
System.out.println(“session id:”+ses.getId());
ses.setAttribute(“username”, “张高凯”);
System.out.println(“username属性内容:”+ses.getAttribute(“username”));
ServletContextapp=super.getServletContext();//获取application对象必须利用父类的getServletContext方法
System.out.println(“真实路径:”+app.getRealPath(“/”));
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
this.doGet(request,response);
}
public void init() throwsServletException {
}
}
第六部分:servlet跳转
常见的跳转有两种:客户端跳转和服务器端跳转。(服务器端跳转占到开发的90%以上)
(1):客户端跳转:
地址栏跳转之后改变,无法获取request属性范围,是在所有操作执行完成后才发生的跳转。语法为:response.sendRedirect();
(2).服务器端跳转:
地址栏不改变,可以获取request属性范围,属于无条件的跳转,语法为:<jsp:forward>
servlet完成的跳转是通过HttpServletResponse对象,使用它的sendRedirect方法完成跳转。
如下:servlet:
packageorg.lxh.servletdemo;
import java.io.IOException;
import java.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public classredirectservlet extends HttpServlet {
public voiddoGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
request.getSession().setAttribute(“name”,”张高凯”);//session属性
request.setAttribute(“info”,”MLDN”);//request属性
response.sendRedirect(“get_info.jsp”);
}
public voiddoPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException {
this.doGet(request,response);
}
}
get_info.jsp:
<body>
<%
request.setCharacterEncoding(“gb2312”);
%>
<h2>session属性:<%=session.getAttribute(“name”) %></h2>
<h2>request属性:<%=request.getAttribute(“info”) %></h2>
</body>
得出:属于客户端跳转。request获取的属性值是空的。而session对象获取的没有问题。
为了完成servlet的服务器端的跳转,需要引用RequestDispatcher接口。
public void doGet(HttpServletRequest request, HttpServletResponseresponse)
throws ServletException,IOException {
request.getSession().setAttribute(“name”,”张高凯”);//session属性
request.setAttribute(“info”,”MLDN”);//request属性
//response.sendRedirect(“get_info.jsp”);
RequestDispatcherrd=request.getRequestDispatcher(“get_info.jsp”);//准备跳转
rd.forward(request,response);//实现服务器跳转,可以接受request对象
}
第七部分:servlet过滤
在过滤器中,不再使用继承Httpservlet类,而是使用接口。完成过滤器开发,先要实现Filter接口。
过滤是自动完成的。
package org.lxh.filterdemo;
import javax.servlet.*;
importjavax.servlet.http.*;
import java.util.*;
import java.io.*;
public class SimpleFilterimplements Filter{
public voidinit(FilterConfig filterConfig)
throws ServletException{
StringinitParam=filterConfig.getInitParameter(“ref”);
System.out.println(“**过滤器初始化”+initParam);
}
public voiddoFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throwsIOException,ServletException{
System.out.println(“**执行doFilter()方法!”);
chain.doFilter(request,response);
}
public void destroy(){
System.out.println(“**销毁!”);
}
}