##1.开发Servlet
###第一个servlet程序
执行页面打印“hello world!”程序的功能。
之后,在自定义的Servlet类中覆写HttpServlet里的doGet()方法,此方法定义如下:
public void doGet(HttpServletRequest request , HttpServletResponse response)throws ServletExceptoin ,IOException {
}
在导包的时候应该按照以下的顺序才称为标准:
- 先导入java的包,例如:java.util.IOException;
- 导入java的子类,例如:java.lang.reflect.*;
- 导入扩展包:javax.servlet.*;
- 导入扩展包的子包:javax.servlet.http.*;
- 导入用户自定义的包,导入的顺序,先导入父包,再导入子包。
范例:编译一个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跳转
- 客户端跳转,使用response对象的sendRedirect()方法进行跳转。
- 服务器跳转:requestDIspatcher接口完成
RequestDispatcher rd=request.getRequestDispatcher("tiao.jsp");
request.setAttribute("name","cs");
rd.forward(request, response);
来源:oschina
链接:https://my.oschina.net/u/221585/blog/676988