Servlet技术基础

1.1、在JSP技术出现之前,如何使用Java语言来编写Web程序。

在JSP技术出现之前,如果想生成HTML页面,那就只有在服务器端运行Java程序,并输出(打印)HTML格式内容。运行在服务器端的Java程序就是Servlet。

1.2、 什么是Servlet。

Servlet是一个Java程序,是在服务器端运行以处理客户端请求并做出响应的程序。

Servlet示例代码:

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

//继承自HttpServlet

public class HelloServlet extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)

   throws ServletException,IOException {

  

   //设定输出内容为HTML,字符集为中文

   response.setContentType("text/html;charset=gb2312");

   //使用打印输出流,向客户端输出信息

   PrintWriter out = response.getWriter();

   out.println("<html>");

   out.println(" <head><title>Servlet</title></head>");

   out.println(" <body>");

   out.println("Servlet你好啊!我是新新!");

   out.println(" </body>");

   out.println("</html>");

   out.close();

}



public void doPost(HttpServletRequest request,HttpServletResponse response)

   throws ServletException,IOException{

   doGet(request,response);

}

}

1.3、Servlet与JSP之间的关系。

xinxin.jsp在运行时首先解析成一个Java类xinxin_jsp.java,该类继承于org.apache.jasper.runtime.HttpJspBase类,而HttpJspBase又是继承自HttpServlet的类,可见JSP在运行前首先将编译为一个Servlet,由此可见Servlet是JSP的基础。

2、 如何创建Servlet

使用向导创建Servlet:

右键,新建—>Servlet命令,输入Servlet名称,选择超类为javax.servlet.http.HttpServlet,并选中Create doGet和Create doPost两个复选框,单击“完成”按钮。

手写Servlet:

创建类继承HttpServlet。

重写doGet(),doPost()方法,init()。

写web.xml。

3、 form表单的提交方法有两种,相应地在Servlet中也提供了两种接收请求数据的方法,但是如何能保证提交的方法和接收的方法都能对应上呢,把处理代码写在doGet()方法中,之后在doPost()方法中调用doGet()方法,这样就能保证客户端使用什么方法提交请求,程序都能正确地接收到数据。

4、 Servlet的生命周期。

4.1、加载和实例化

Servlet容器负责加载和实例化Servlet,当客户端发送一个请求时,Servlet容器会查找内存中是否存在Servlet实例,如果不存在,就创建一个Servlet实例。如果存在Servlet实例,就直接从内存中取出该实例来响应请求。

Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用服务器的一部分,用于在发送的请求和响应之间提供网络服务。例如:Tomcat。

4.2、初始化

Servlet容器加载好Servlet后,必须进行初始化,初始化Servlet时,可以设置数据库连接参数,建立JDBC连接,或者是建立对其他资源的引用,在初始化阶段,init()方法被调用,这个方法在javax.servlet.Servlet接口中定义。

4.3、服务

Servlet被初始化后,就处于能够响应请求的就绪状态。每个对Servlet的请求都由一个Servlet Request对象代表。Servlet给客户端的响应由一个Servlet Response对象代表。当客户端有一个请求时,Servlet容器将Servlet Request和Servlet Response对象都转发给Servlet,这两个对象以参数的形式传给service()方法。在service()内,对客户端的请求方法进行判断,如果为GET丰富提交,则调用doGet()方法处理请求,如果为POST方法提交,则调用doPost()方法处理请求。

4.4、销毁

Servlet的实例是由Servlet容器创建的,所以实例的销毁也是由容器来完成的。Servlet容器判断一个Servlet应当被释放时(容器关闭或需要回收资源),容器必须让Servlet释放其正在使用的任何资源。这些都是由容器调用Servlet的destroy()方法实现的。Destroy()方法指明哪些资源可以被系统回收,而不是由destroy()方法直接进行回收。

5、 init()方法只有在加载当前的Servlet时被执行,并且只被执行一次。

在服务器停止的时候,或者是系统回收资源时,destroy()方法才被执行。

6、 Servlet的部署与配置

在部署Java Web程序时,web.xml文件、WEB-INF文件夹、classes文件夹。

6.1、web.xml文件

web.xml文件被称为部署描述文件(DD),该文件在程序运行Servlet时起着一个“总调度”的角色,它会告诉容器如何运行Servlet和JSP文件。在web.xml文件中使用两个XML元素(和)把用户访问的URL映射到Servlet,其中将用户访问的URL映射到Servlet的内部名,元素把Servlet内部名映射到一个Servlet类名(包名+类名)。

web.xml文件的内容示例:

    <servlet>

       <!—设定当前Servlet的内部名称 -->

       <servlet-name>HelloServlet</servlet-name>

       <!—指定对应Servlet内部名相关类 -->

       <servlet-class>

com.xinxin.servlet.HelloServlet

    </servlet>



    <servlet-mapping>

       <!—通过Servlet内部名把URL与CLASS绑定 -->

       <servlet-name>HelloServlet</servlet-name>

       <!—这是用户访问Servlet的URL -->

       <url-pattern>/HelloServlet</url-pattern>

    </servlet-mapping>

当客户端发送一个请求的URL指定到中的值的时候,容器会根据相应的值查找范围内的对应的类,然后去执行该类的doGet()或doPost()方法,对用户的请求数据进行处理。

7、 Servlet部署排错误

404错误

原因一:在地址栏中输入的地址错误。输入正确的servlet访问地址。

原因二:中内容与中的内容不一致。将两者的内容改成一样。

8、 Servlet处理get和post请求

Public void doPost(HttpservletRequest request,HttpServletResponse response) throws ServletException,IOException{

//将输入转换为中文

Request.setCharacterEncoding(“GBK”);

//设置输出为中文

reponse.setContentType(“text/html;charset=GBK”);



String pass = request.getParameter(“password”);

String user = request.getPatameter(“userName”);

RequestDispatchar dispatcher = null;

if(user.equals(“xinxin”) && pass.equals(“xinxin”)){

    System.out.println(“登录成功!”);

    //如果符合要求,则转发到ok.jsp也没,并在ok.jsp页面中显示用户名

    request.setAttribute(“userName”,user);

    dispatcher = request.getRequestDispatcher(“/ok.jsp”);

    dispatcher.forward(request,response);

}else{

    //如果不符合要求,则重定向导登录页面

    response.sendRedirect(“register.jsp”);

}

}

8.1、HttpServletRequest request对象常用方法

request.getParameter(“param”);

获取客户端请求数据,param为表单元素名称,返回String类型值。

request.setCharacterEncoding(“GBK”);

将输入内容转换为中文。

request.setAttribute(“userName”,user);

在request作用域内存储数据。

参数userName为存储数据的引用名,类型是String。User为存储的数据,类型为Object。

8.2、HttpServletResponse response对象常用方法

response.setContentType(“text/html;charset=GBK”);

设置输出为中文,解决中文乱码问题。

Response.sendRedirect(“url”);

让浏览器重定向导指定的资源。

参数url为Servlet或JSP、HTML文件的路径。

8.3、转发

RequestDispatcher dispatcher = request.getRequestDispatcher(url);

首先定义转发器。

参数url是欲转发的页面或者Servlet的URL地址。

Dispatcher.forward(request,response);

然后实现转发的功能。参数为请求、响应对象。

8.4、转发和重定向

转发:对应的Servlet代码dispatcher.forward(request,response);

转发是在服务器端起作用的,当使用forward()方法时,Servlet容器传递HTTP请求,从当前的Servlet或JSP到指定的Servlet或JSP,此过程仍然在request作用范围内。转发后,浏览器的地址栏内容不变。

重定向:对应的Servlet和JSP代码是response.sendRedirect(“/ok.jsp”);重定向是在用户的浏览器端工作的,是Servlet对浏览器做出响应后,浏览器再次发送一个新请求,到sendRedirect(“ok.jsp”);指定指定的ok.jsp页面,重定向后,浏览器的地址栏内容发生变化。

如果你想把数据通过request作用域传递到下一个页面或Servlet,那就使用转发。反之,就使用重定向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值