java web编程-servlet简介与用法举例

java Servelet是在服务器端运行的java类。

1.所有的servlet必须放在WEB目录中,依靠web容器执行!
2.servlet本身是一个类,本身不需要主方法调用执行,由容器调用;
3.servlet与javaBean一样必须保存在WEB-INF/classes目录下;
4.一个类必须继承了HttpServlet,才称为servlet;
5.servlet程序也必须在一个包中!
// 导入包的标准:
1.先java目录,比如java.util.*;
2.在java子目录,比如java.long.reflect.*;
3.然后是扩展包,javax.servlet.http.*;
4.导入用户自定义包,按先父后子—。
// 将tomcat中的servlet-api.jar放在jdk_home/jre/lib/ext/目录下,
此目录可以被自动加载,并且全部授权访问!

public abstract class HttpServlet

extends GenericServlet

implements Serializable

Provides an abstract class to be subclassed to create an HTTP servlet suitable for a Web site. A subclass of HttpServlet must override at least one method, usually one of these:
    * doGet, if the servlet supports HTTP GET requests
    * doPost, for HTTP POST requests
    * doPut, for HTTP PUT requests
    * doDelete, for HTTP DELETE requests
    * init and destroy, to manage resources that are held for the life of the servlet
    * getServletInfo, which the servlet uses to provide information about itself

protected void doGet(HttpServletRequest req,

HttpServletResponse resp)

throws ServletException,

IOException

执行servlet:
1.配置web.xml,servlet映射:

xmlns:xsi=”https://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”

version=”2.5″>

Welcome to Tomcat

Welcome to Tomcat

hello1

/WEB-INF/demo.jsp

hello1

/test.doc

hello

org.xjy.HelloServlet

hello

/Demo

hello

/Test.asp

hello

/test/*

// 一定注意千万不要让两个不同的servlet或者不同的类型映射到同一个servlet-name上,将不会响应!
// 一定确保配置的虚拟主机处于启动状态!可以去默认页管理查看状态!
// 通过配置server.xml,tomcat可以同时开启多个虚拟主机,在管理页通过刷新页面可以得到新设置的虚拟目录,
// 修改虚拟目录web.xml时可以通过管理页控制虚拟主机重新加载生效!
—–HelloServlet:

package org.xjy;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloServlet extends HttpServlet // 继承,或实现Servlet接口!

{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{ // 覆写HttpServlet的方法;执行Http get请求

PrintWriter out = null; // 输出

out = resp.getWriter(); // 得到输出流,响应请求

// 所有的响应以流的形式输出到客户端

out.println(““);

out.println(““);

out.println(““); </p> <p>out.println(“hello,world!”); </p> <p>out.println(““);

out.println(““);

out.println(““);

out.println(“

“);

out.println(““);

out.println(“hello,world!”);

out.println(““);

out.println(“

“);

out.println(““);

out.println(““);

}

}

————servlet 接收表单提交数据 :
// 接收表单请求并响应请求的servlet:

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class RequestServlet extends HttpServlet

{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

PrintWriter out = null; // 输出流

req.setCharacterEncoding(“UTF8”);

String param = req.getParameter(“ref”); // 接收请求传递的参数

out = resp.getWriter(); // 获取输出流,响应请求

out.println(“传递的参数ref=” + param); // 往请求页面打印!

}

}

// 以下表单要放在/webroot/form/下;

// 此时需要配置表单请求的url与servlet被映射的url一致:

reqServlet

org.xjy.servlet.RequestServlet

reqServlet

/form/reqform

// 以上说明,servlet映射的url应该以form表单所在的目录为准!这样只需要修改web.xml中被请求的servlet去映射到发出请求的表单提交的url路径上,
  // 当然修改表单action路径也能做到,比如放在根目录下的表单,可以action=”./form/reqform”来激活上面的配置!

———–使servlet支持post请求:
必须覆写doPost方法,才能处理以post方式传递的请求;
  //

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class RequestServlet extends HttpServlet

{

// get方式请求处理:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

PrintWriter out = null; // 输出流

req.setCharacterEncoding(“UTF8”);

String param = req.getParameter(“ref”); // 接收请求传递的参数

out = resp.getWriter(); // 获取输出流,响应请求

out.println(“传递的参数ref=” + param); // 往请求页面打印!

}

// post方式请求处理:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

this.doGet(req, resp); // 将get、post按同一种方式处理

}

}

// 可以发现:servlet可以将get、post请求分开来处理,这是jsp没有的!
–此时修改表单为post:

——–servlet的生命周期:
装载–创建–初始化–服务–销毁–卸载!
1.初始化:正常情况下只有一次初始化,但是长期不使用的再次使用时,将重新初始化;
一般第一次使用的时候进行初始化i,可以设置servlet的初始化在容器启动时执行:
在web.xml中加入:

demo

org.xjy.servlet.DemoServlet

1 // 在tomcat容器启动时自动加载当前servlet

1.public void init() throws ServletException // 显式定义初始化

A convenience method which can be overridden so that there’s no need to call super.init(config).
2

public void init(ServletConfig config) throws ServletException // 可以通过config获取初始化参数

Called by the servlet container to indicate to a servlet that the servlet is being placed into service. See Servlet.init(javax.servlet.ServletConfig).  
    // 后者的优先级高于前者!
2.服务:一个servlet将服务多次,长时间不用的,将等待销毁;
1.

protected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException

// 定义了doXXX方法的区分和调用! 覆写此种方法后,系统的doXXX方法将失效,因为web容器是通过–service方法区分doXXX方法的!
    // 默认子类只需覆写doXXX方法,这是一种模板设计!
    Receives standard HTTP requests from the public service method and dispatches them to the doXXX methods defined in this class. This method is an HTTP-specific version of the
2.

public void service(ServletRequest req,ServletResponse res)throws ServletException,IOException

Dispatches client requests to the protected service method. There’s no need to override this method.
3.销毁:正常情况下只有一次,容器关闭时将销毁,当然如果 一个servlet长时间不使用,也会自动销毁;

public void destroy()

Called by the servlet container to indicate to a servlet that the servlet is being taken out of service. See Servlet.destroy().
// servlet的生命周期:

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class RequestServlet extends HttpServlet

{

public void init() throws ServletException

{

System.out.println(“servlet初始化!”);

}

public void init(ServletConfig config) throws ServletException

{

System.out.println(“servlet初始化!” + config.getInitParameter(“ref1”)); // 此处要求服务器初始化参数,在web.xml中传递

}

// get方式请求处理:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

System.out.println(“servlet执行服务!”);

PrintWriter out = null; // 输出流

req.setCharacterEncoding(“UTF8”);

String param = req.getParameter(“ref”); // 接收请求传递的参数

out = resp.getWriter(); // 获取输出流,响应请求

out.println(“传递的参数ref=” + param); // 往请求页面打印!

}

// post方式请求处理:

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

this.doGet(req, resp); // 将get、post按同一种方式处理

}

public void destroy()

{

System.out.println(“servlet销毁!”);

}

}

// 可以发现:servlet可以将get、post请求分开来处理,这是jsp没有的!

—-servlet取得session、application对象:
// web容器中内置实现了request、response对象;
1.取得session:
// HttpServletRequest接口:

HttpSession getSession() // 没有session,直接创建基于当前request的session

Returns the current session associated with this request, or if the request does not have a session, creates one.
HttpSession getSession(boolean create) // 若没有session,是否创建session由create标志决定!
    Returns the current HttpSession associated with this request or, if there is no current session and create is true, returns a new session.
    If create is false and the request has no valid HttpSession, this method returns null.
    To make sure the session is properly maintained, you must call this method before the response is committed. If the container is using cookies to maintain session integrity and is asked to create a new session when the response is committed, an IllegalStateException is thrown.
—–servlet取得session并在客户端打印sessionID:

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class SessionServlet extends HttpServlet

{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

resp.setContentType(“text/html;charset=UTF8”); // 设定服务器使用的编码,并要求客户端使用

PrintWriter out = null;

out = resp.getWriter();

HttpSession ses = req.getSession(); // 直接取得session,没有自动创建

out.println(“本次请求来源的session:” + ses.getId()); // 在客户端打印信息

ServletContext app = this.getServletContext(); // 访问application对象

out.println(“服务器应用程序:” + app.getServerInfo() + ” ” + app.getRealPath(“/”)); // 在客户端打印信息

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

this.doGet(req, resp);

}

}

/*

本次请求来源的session:851D24055C432E5E221E89B06714A6A2

*/

—-获取application对象:

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class SessionServlet extends HttpServlet

{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

resp.setContentType(“text/html;charset=UTF8”); // 设定服务器使用的编码,并要求客户端使用

PrintWriter out = null;

out = resp.getWriter();

HttpSession ses = req.getSession(); // 直接取得session,没有自动创建

out.println(“本次请求来源的session:” + ses.getId()); // 在客户端打印信息

ServletContext app = this.getServletContext(); // 访问application对象

out.println(“
服务器应用程序:” + app.getServerInfo() + ” ” + app.getRealPath(“/”)); // 在客户端打印信息

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

this.doGet(req, resp);

}

}

/*

本次请求来源的session:851D24055C432E5E221E89B06714A6A2

服务器应用程序:Apache Tomcat/6.0.26 /home/ubuntu/site/

*/

———servlet实现客户端跳转:
servlet跳转到jsp:

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class RedirectServlet extends HttpServlet

{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

resp.setContentType(“text/html;charset=UTF8”); // 设定服务器使用的编码,并要求客户端使用

PrintWriter out = null;

out = resp.getWriter();

HttpSession ses = req.getSession(); // 直接取得session,没有自动创建

ses.setAttribute(“name”, “k187”); // 设置session属性

resp.sendRedirect(“target.jsp”); // 客户端跳转

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

this.doGet(req, resp);

}

}

// web.xml:

redirectServlet

org.xjy.servlet.RedirectServlet

redirectServlet

/jsp/

// 可以发现由于客户端跳转能接收session属性,jsp可以接收传递的属性;
// 但可以实现服务器段跳转,使用request传递属性;
——servlet服务器端跳转:

package org.xjy.servlet;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class ForwardServlet extends HttpServlet

{

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

resp.setContentType(“text/html;charset=UTF8”); // 设定服务器使用的编码,并要求客户端使用

PrintWriter out = null;

out = resp.getWriter();

RequestDispatcher rd = req.getRequestDispatcher(“target.jsp”); // RequestDispatcher对象,跳转到jsp

req.setAttribute(“name”, “k187”); // 设置request属性

rd.forward(req, resp); // 服务器端跳转

}

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException

{

this.doGet(req, resp);

}

}

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《java web编程-servlet简介与用法举例
本文地址:http://www.xiupu.net/archives-200.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!