[Java Web]Servlet 的学习

Servlet 的学习

Servlet的开发

  • Servlet是运行在服务器端的程序,用于处理及响应客户端的请求。
  • Servlet是个特殊的Java类,必须继承HttpServlet。每一个Servlet能够响应客户端的请求。

Servlet相应客户端请求的方法:html

  • doGet():响应客户端的Get请求
  • doPost():响应客户端的POST请求
  • doPut():响应客户端的PUT请求
  • doDelete():响应客户端的DELETE请求

大部分时候,Servlet对于全部请求的响应都是同样的,因此能够只重写service()方法。java

另外HttpServlet还包含两个方法:web

init(ServletConfig config):建立Servlet实例<br/>
destroy():销毁Servlet实例服务器

不须要为Servlet编写构造器,若是须要对Servlet进行初始化的操做,能够重写init方法。app

例子:学习

//Servlet必须继承HttpServlet类
@WebServlet(name="firstServlet"
    ,urlPatterns={"/firstServlet"})
public class FirstServlet extends HttpServlet
{
    //客户端的响应方法,使用该方法能够响应客户端的全部类型请求
    public void service(HttpServletRequest request,
        HttpServletResponse response)
        throws ServletException,java.io.IOException
    {
        //设置解码方式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        //获取name的请求参数
        String name = request.getParameter("name");
        //获取gender的请求参数
        String gender = request.getParameter("gender");
        //获取color的请求参数
        String[] color = request.getParamterValues("color");
        //获取country的请求参数
        String national = request.getParameter("national");
        //获取页面输出流
        PrintStream out = new PrintStream(response.getOutputStream());
        //输出HTML页面标签
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet测试</title>");
        out.println("</head>");
        out.println("<body>");
        //输出请求参数:name
        out.println("name "+name + "<hr/>");
        //输出请求参数:gender
        out.println("gender "+gender + "<hr/>");
        //输出请求参数:color
        for(String c:color)
        {
            out.println("color " + c +"<hr/>");
        }
        //输出请求参数:national
        out.println("national "+national);
        out.println("</body>");
        out.println("</html>");
    }
}

Servlet和JSP的区别在于:测试

  • Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显式建立
  • 对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出

Servlet的配置

编辑后的Servlet文件要编译成class文件,而后将文件放在WEB-INF/classes中才可以响应用户请求。并且还要将Servlet配置在web应用中(修改web.xml)url

配置Servlet的方式有两种(Servlet3.0开始):spa

  • 在Servlet类中使用@WebServlet注解进行配置
  • 经过在web.xml文件中进行配置

@WebServlet注解最经常使用的属性code

  • name:指定Servlet的名称
  • urlPatterns:指定Servlet处理的url

配置Servlet的注意事项:

使用注解来配置Servlet:

一、不要在web.xml文件的根元素<web-app>中制定metadata-complete="true"
二、不要在web.xml文件中配置该文件

使用web.xml配置Servlet须要配置两个部分:

一、配置Servlet的名字:对应web.xml文件中的<servlet/>元素
二、配置Servlet的URL:对应web.xml文件中的<servlet-mapping/>元素

经过配置web.xml文件的例子(经过注解的方式的例子在上面的代码中):

<!--配置Servlet的名字-->
<servlet>
    <!--指定Servlet的名字-->
    <servlet-name>firstServlet</servlet-name>
    <!--指定Servlet的实现类-->
    <servlet-class>FirstServlet</servlet-class>
</servlet>
<!--配置Servlet的URL-->
<servlet-mapping>
    <!--指定Servlet的名字-->
    <servlet-name>firstServlet</servlet-name>
    <!--指定Servlet映射的URL地址-->
    <url-pattern>/firstServlet</url-pattern>
</servlet-mapping>

JSP/Servlet的生命周期

生命周期:

  • (1)建立Servlet实例
  • (2)Web容器调用Servlet的init方法,对Servlet进行初始化
  • (3)Servlet初始化后,将一直存在于容器中,响应用户请求。
  • (4)调用Servlet的destroy方法销毁Servlet。

图片描述

load-on-startup Servlet

load-on-startup Servlet的是Web应用启动时马上建立Servlet实例。

配置load-on-startup的Servlet的方式有两种:

  • web.xml文件中经过<servlet../>元素的子元素<load-on-startup.../>进行配置
  • 经过@WebServlet注解的loadOnStartup属性指定<br/><br/>
    (无论经过哪一种方式,都之接收一个整型值,数字越小表明优先级越高)

注解配置:

@WebServlet(loadOnStartup=1)
public class TimerServlet extends HttpServlet
{
    public void init(ServletConfig config)throws ServletException
    {
        super.init(config);
        Timer t = new Timer(1000.new ActionListener(){
            public void actionPerformed(ActionEvent e)
            {
                System.out.println(new Date());
            }
        });
    }
}

web.xml配置:

<servlet>
    <!--Servlet名-->
    <servlet-name>timerServlet</servlet-name>
    <!--Servlet的实现类-->
    <servlet-class>hsr.TimerServlet</servlet-class>
    <!--应用启动就建立实例-->
    <load-on-startup>1</load-on-startup>
</servlet>

访问Servlet的配置参数

为Servlet配置参数的方法:

  • 经过@WebServletinitParam属性指定
  • web.xml文件的<serlvet../>的子元素<init-param../>指定

经过@WebServlet指定:

@WebServlet(name="testServlet",
    urlPatterns={"/testServlet"},
    initParam={
        @WebInitParam(name="Param_name1",value="Param_value1"),
        @WebInitParam(name="Param_name2",value="Param_value2")
    })

经过wel.xml指定:

<init-param>
    <param-name>param_name</param-name>
    <param-name>param_name</param-name>
</init-param>

访问配置参数:

//获取ServletConfig对象
ServletConfig config = getServletConfig();
//经过ServletConfig对象获取参数
String param = config.getInitParameter("param_name");
相关文章
相关标签/搜索