Servlet从零开发案例

##1.开发Servlethtml

###第一个servlet程序java

执行页面打印“hello world!”程序的功能。web

以后,在自定义的Servlet类中覆写HttpServlet里的doGet()方法,此方法定义以下:api

public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletExceptoin ,IOException {
}

在导包的时候应该按照如下的顺序才称为标准:浏览器

  1. 先导入java的包,例如:java.util.IOException;
  2. 导入java的子类,例如:java.lang.reflect.*;
  3. 导入扩展包:javax.servlet.*;
  4. 导入扩展包的子包:javax.servlet.http.*;
  5. 导入用户自定义的包,导入的顺序,先导入父包,再导入子包。

范例:编译一个servlet服务器

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FirstServlet extends HttpServlet
{
	public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletException ,IOException {
		PrintWriter out=response.getWriter();
		out.println("<html>");
		out.println("<head><title>Hello</title></head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<h1>Hello World!</h1>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

此servlet在用javac编译时,会出现有几个错误session

FirstServlet.java:3: 软件包 javax.servlet 不存在
import javax.servlet.ServletException;
                    ^
FirstServlet.java:4: 软件包 javax.servlet.http 不存在
import javax.servlet.http.HttpServlet;
                         ^
FirstServlet.java:5: 软件包 javax.servlet.http 不存在
import javax.servlet.http.HttpServletRequest;
                         ^
FirstServlet.java:6: 软件包 javax.servlet.http 不存在
import javax.servlet.http.HttpServletResponse;
                         ^
FirstServlet.java:8: 找不到符号
符号: 类 HttpServlet
public class FirstServlet extends HttpServlet
                                  ^
FirstServlet.java:10: 找不到符号
符号: 类 HttpServletRequest
位置: 类 FirstServlet
        public void doGet(HttpServletRequest request , HttpServletResponse resp
nse)throws ServletException ,IOException {
                          ^
FirstServlet.java:10: 找不到符号
符号: 类 HttpServletResponse
位置: 类 FirstServlet
        public void doGet(HttpServletRequest request , HttpServletResponse resp
nse)throws ServletException ,IOException {
                                                       ^
FirstServlet.java:10: 找不到符号
符号: 类 ServletException
位置: 类 FirstServlet
        public void doGet(HttpServletRequest request , HttpServletResponse resp
nse)throws ServletException ,IOException {

8 错误

以上的8个错误,都是针对于Servlet程序包的,为何会有这样的问题那? 实际上以前在讲解JAVA基础的时候说过JAVA的三个分支:app

  • Java SE
  • Java ME
  • Java EE 是在JAVA SE之上构建的,能够理解为JAVA SE的子类。此时导入的都是JAVA EE扩展出来的新包。

由于如今使用的是JAVA SE的编译环境,因此这些包确定不存在,则确定没法经过编译,既然没法经过,就要找到这些扩展的包,并将其设置到classpath之中,这样才可使用,那么这些包在哪里呢?jsp

分析:Tomcat的执行流程:.jsp > .java >.class 文件,能够发现,须要将一个.java编译成*.class,实际上编译出来的程序集已经很是相似于Servlet类,那么证实在Tomcat中可能就存在了这样的扩展包。servlet-api.jar文件post

能够把它放到D:\java\jre\ext目录下,此文件夹表示的是存放全部的扩展文件。

Servlet在web.xml文件中的配置

<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

通过以上配置以后,浏览器就能够经过/hello访问以前编写的内容HelloWorld程序。 从第一个程序中能够清楚的发现,一个Servlet程序除了须要编写类以外还必须对其进行映射的配置,以后浏览器经过映射路径找到一个Servlet程序。

一个Servlet程序能够同时配置多个名称

<servlet>
	<servlet-name>hello</servlet-name>
	<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>
	<servlet-name>hello2</servlet-name>
	<servlet-class>FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>hello2</servlet-name>
	<url-pattern>/hello</url-pattern>
</servlet-mapping>

##2.接受表单参数

既然在servlet中存在request对象,则能够利用request对象来接受参数。

405错误,没有方法支持。由于在以前编写的Servlet程序中,使用到是doGet()处理, 因此只能处理get请求,若是要想能够同时处理post提交,则要覆写doPost()方法。

##3.Servlet的生命周期

##4.取得session对象

HttpSession是其类型,若是在一个servlet中要取得此对象,则必须依靠request对象完成,在此接口中有以下两个方法: Public HttpSession getSession();表示直接取走当前的session Public HttpSession getSession(Boolean flag);取得session,若是session不存在,则建立,falg=true;

##5.取得application 对象

使用getServletContext()来代替application

ServletContext application = this.getServletContext();

##6.Servlet跳转

  1. 客户端跳转,使用response对象的sendRedirect()方法进行跳转。
  2. 服务器跳转:requestDIspatcher接口完成
RequestDispatcher rd=request.getRequestDispatcher("tiao.jsp");
request.setAttribute("name","cs");
rd.forward(request, response);
相关文章
相关标签/搜索