JSP&Servlet学习笔记(2): 编写与设置Servlet

第一个Servlet程序

package cc.openhome;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/hello.view")
public class HelloWorld extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
                        throws ServletException,IOException {
        response.setContentType("text/html;charset=UTF-8");  //设置正确的响应内容类型
        PrintWriter out = response.getWriter();
        //取得代表响应输出的PrintWriter对象
        String name = request.getParameter("name");

        //通过PrintWriter的println()方法来对浏览器输出响应的文字信息
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello World</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1> Hello!" + name + "!<h1/>");
        out.println("</body>");
        out.println("</html>");

        out.close();
    }
}

在doGet()方法上可以看到HttpServletRequest与HttpServletResponse两个参数,容器接收到客户端的HTTP请求后,会收集HTTP请求中的信息,并分别创建代表请求与响应的Java对象,而后在调用doGet()时将这两个对象当作参数传入。
由于HttpServletResponse对象代表对客户端的响应,因此可以通过其setContentType()设置正确的内容类型。接着使用getWriter()方法取得代表响应输出的PrintWriter对象,通过PrintWriter的println()方法来对浏览器输出响应的文字信息。
@WebServlet(“/hello.view”)这表示如果请求的URL是/hello.view,就会由HelloWorld来处理请求。

这一步为部署servlet,两种方法选其一
方法一:在WEB-INF目录下web.xml文件的标签中添加如下内容:

<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>

方法二:在HelloWorld文件的类前面加:@WebServlet(“/略”)。

关于HttpServlet

要编译HelloWorldServlet.java,则类路径中必须包括Servlet API的相关类,如果使用的是Tomcat,则这些类通常封装在Tomcat目录的lib子目录中的servlet-api.jar。
Servlet接口定义了Servlet应有的基本行为,实现该接口的类是GenericServlet类,它来实现了ServletConfig接口。ServletConfig并没有规范任何有关HTTP的相关方法,而是由继承它的HttpServlet来定义。
HttpServlet的service()方法中的流程如下:

protected void service(HttpServletRequest req,
                    HttpServletResponse resp)
    throws ServletException, IOException {
    String method = req.getMethod(); //取得请求的方法
    if(method.equals(METHOD_GET)) { //HTTP GET
       //...
       doGet(req,resp);
       //...
    } else if(method.equals(METHOD_HEAD)) { //HTTP HEAD
       //...
       doHead(req,resp);
    } else if(method.equals(METHOD_POST)) { //HTTP POST
       //...
       doPOST(req,resp);
    } else if(method.equals(METHOD_PUT)) { //HTTP PUT
       //...
}

当请求来到时,容器就会调用Servlet的service()方法。HttpServlet的service()中所定义的,基本上就是判断HTTP请求的方式,再分别调用doGet()、doPost()等方法。所以只针对GET、POST的话,只需在继承HttpServlet之后重新定义doGet()、doPost()方法。

使用@WebServlet

编写好Servlet后,要告诉Web容器有关于Servlet的一些信息。在Servlet3.0中,可以使用标注。只要在Servlet上设置@WebServlet标注,容器就会自动读取当中的信息。

使用Web.xml

这样的文件称为部署描述文件。一个Servlet在Web.xml中会有三个名称设置:设置的逻辑名称,注册的Servlet名称,以及设置的实体类名称。

文件组织与部署

几个重要的目录及文件位置:

  • WEB-INF:固定目录,位于应用程序根目录下。放置在这里的文件或目录,是客户端无法使用HTTP的任何方式直接访问到WEB-INF中的文件或目录的。所以不想让外界存取的资源可以放在这里。
  • web.xlm:一定在WEB-INF根目录下。
  • lib:放置JAR文件的目录,一定在WEB-INF根目录下。
  • classes:放置编译后的.class文件的目录,一定在WEB-INF目录下。
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值