Servlet从零开发案例

一曲冷凌霜 提交于 2019-12-06 17:52:52

##1.开发Servlet

###第一个servlet程序

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

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

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编译时,会出现有几个错误

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的三个分支:

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

因为现在使用的是JAVA SE的编译环境,所以这些包肯定不存在,则肯定无法通过编译,既然无法通过,就要找到这些扩展的包,并将其设置到classpath之中,这样才可以使用,那么这些包在哪里呢?

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

可以把它放到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);
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!