`
zengshaotao
  • 浏览: 757673 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Servlet详解

 
阅读更多

1、对Servlet的理解

    Servlet是一种Java类。
    Servlet能够完成与JSP相同的功能。能够接收用户的请求,能够调用功能类的方法,可以对用户进行响应。
    Servlet和JSP同属于Java EE中Web层组件。

2、如何编写一个Servlet

    假设:该Servlet的功能为显示欢迎信息。

    Java文件的编写过程:(1)声明包 (2)引入用到的其他的类 (3)类的编写
    对于类:(1)类头——修饰符 class关键字 类名 继承父类 实现接口
            (2)类体——成员变量 构造方法 对属性进行操作的方法 功能类方法
    对于成员变量:修饰符 类型 变量名(对象名)
    对于方法(不包括构造方法):修饰符 返回值类型 方法名 参数列表 异常列表 方法体
    对于方法体:变量的声明 各种运算 调用其他的方法 返回结果

    (1)声明包,假设包名为servlet

package servlet;

    (2)引入用到的类,javax.servlet.* javax.servlet.http.* java.io.*
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

    (3)类头的定义
    访问控制符:public
    类名:HelloServlet
    继承父类:javax.servlet.http.HttpServlet
    实现接口:没有要实现的接口

public class HelloServlet extends HttpServlet

    (4)方法的定义
    主要的方法:init方法(用于初始化) destroy方法(释放资源) doGet或者doPost(完成主要功能)
    通常主要实现doGet方法或者doPost方法,分别对应客户端的get请求和post请求。


public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
    // 设置编码方式
    response.setContentType("text/html;charset=gb2312");
    // 得到输出流对象
    PrintWriter out = response.getWriter();
    out.println("欢迎学习JSP!");
}

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
{
   doGet(request,response);
}

3、编译存放

   需要用到javax.servlet.*和javax.servlet.http.*,两个包的实现在tomcat下面的lib中,名字为servlet-api.jar。
   放在(编译后的Servlet):WEB-INF/classes
   配置path: 把C:\Program Files\Java\jdk1.6.0\bin添加到path中,但是不能破坏原有的路径。
   配置classpath:把C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib\servlet-api.jar;添加到classpath中。
   编译:在命令行方式下进入到classes目录,然后使用 javac -d . HelloServlet.java   -d表示生成包的路径,.表示在当前位置生成。

4、配置Servlet
   配置文件及位置:WEB-INF下面的web.xml。
   配置包括两个方面:Servlet的声明 以及 Servlet访问方式的声明
   Servlet的声明:
   <servlet>
      <servlet-name>hello</servlet-name>
      <servlet-class>servlet.HelloServlet</servlet-class>
   </servlet>
  
   其中,<servlet-name>表示这个servlet的名字,可以随便起。<servlet-class>是对应的Servlet类,应该包含包的信息。

   Servlet访问方式的声明:
   <servlet-mapping>
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
   </servlet-mapping>
   其中,<servlet-name>和Servlet声明中的用法相同,并且应该与Servlet声明中的名字保持一致。<url-pattern>表示访问方式,决定了在客户端如何访问这个Servlet。

5、访问Servlet
   http://127.0.0.1:8080/bookstore/hello

6、用Servlet完成login_process.jsp的功能
    login_process.jsp主要功能,判断用户输入的用户名和口令是否合法,然后根据判断的结果选择界面对用户响应。
    对于JSP文件来说,优势在于显示信息,login_process.jsp中的代码都不是显示信息的,主要用于控制。在Java Web应用中存在大量的这种现象。是Java Web中的控制功能。主要使用Servlet完成控制。
    login_process.jsp的基本功能:获取用户的输入信息;进行判断;转向。
    如果使用Servlet完成,功能代码应该写在doGet或者doPost方法中。对应上面的3个功能分别实现如下:
    获取用户信息:用户信息存储在doGet或者doPost方法的第一个参数中,所以从参数中获取,获取的代码为
        String username = request.getParameter("username");
        String userpass = request.getParameter("userpass");
    判断:
        if( username.equals("zhangsan") && userpass.equals("zhangsan") )
    转向响应界面:
        第一种方式:response.sendRedirect("index.jsp");
        第二种方式:与<jsp:forward>功能相同
        RequestDispatcher rd = request.getRequestDispatcher("index.jsp");  // 参数是要转向的页面
        rd.forward(request,response); // 完成跳转

LoginProcessServlet.java代码如下:

package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginProcessServlet extends HttpServlet
{
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
        // 获取用户输入的信息
        String username = request.getParameter("username");
        String userpass = request.getParameter("userpass");

        if( username.equals("zhangsan") && userpass.equals("zhangsan") )
        {
           RequestDispatcher rd = request.getRequestDispatcher("success.jsp");  // 跳转到成功的页面
           rd.forward(request,response); // 完成跳转
        }else
        {
           RequestDispatcher rd = request.getRequestDispatcher("index1.jsp");  // 跳转到登录页面
           rd.forward(request,response); // 完成跳转
        }
  }

  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
     doGet(request,response);
  }

}

配置文件中添加如下代码:
   <servlet>
      <servlet-name>login_process</servlet-name>
      <servlet-class>servlet.LoginProcessServlet</servlet-class>
   </servlet>

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

修改index1.jsp的代码(修改form所在行),修改前:
<form action="login_process.jsp" method="post">
修改后:
<form action="login_process" method="post">

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics