3.1 简介
3.1.1 Servlet的功用
3.1.2 Servlet代码初探
Java Servlet是一种使用Java编写的CGI程序
CGI:通用网关接口
与传统CGI不同的是,Servlet是使用一种多线程的程序处理方式 ---性能较高
在Servlet中可以控制输出HTML代码,则所有的HTML代码都必须使用out.println();一行一行输出。
package org.sky.darkness.servlet ; import java.io.* ; // HttpServlet属于javax.servlet.http包下 // ServletException属于javax.servlet包下 import javax.servlet.* ; // HttpServletRequest、HttpServletResponse存放在javax.servlet.http包下 import javax.servlet.http.* ; public class SimpleServlet extends HttpServlet { // 表示处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { PrintWriter out = resp.getWriter() ; out.println("<HTML>") ; out.println("<HEAD>") ; out.println("<TITLE>THE FIRST SERVLET</TITLE>") ; out.println("</HEAD>") ; out.println("<BODY>") ; out.println("<H1>Hello World!!!</H1>") ; out.println("</BODY>") ; out.println("</HTML>") ; out.close() ; } public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { this.doGet(request,response) ; } }; /* // 表示要使用一个Servlet <servlet> // 在web.xml文件内部起作用的名字 <servlet-name>simple</servlet-name> // Servlet程序所在的包.类名称 <servlet-class>org.sky.darkness.servlet.SimpleServlet</servlet-class> </servlet> // Servlet 映射地址 <servlet-mapping> // 在web.xml文件内部起作用的名字,与上面一致 <servlet-name>simple</servlet-name> // 具体的映射路径,前面必须有一个/ <url-pattern>/demo</url-pattern> </servlet-mapping> */
注意:只要是web.xml文件被修改,一定要重起服务器
3.1.3 Jsp的作用
3.2 Servlet API
3.2.1 javax.servlet.ServletInputStream:
* public int readLine(byte[] b,
int off,
int len)
throws java.io.IOException
3.2.2 javax.servlet.ServletOutputStream
* public void print(java.lang.String s)
throws java.io.IOException
* public void println(java.lang.String s)
throws java.io.IOException
3.2.3 javax.servlet.ServletRequest(Interface)
* public java.lang.Object getAttribute(java.lang.String name)
* public java.util.Enumeration getAttributeNames()
* public java.lang.String getParameter(java.lang.String name)
* public java.util.Enumeration getParameterNames()
* public java.lang.String[] getParameterValues(java.lang.String name)
* public void setAttribute(java.lang.String name,
java.lang.Object o)
* public void setCharacterEncoding(java.lang.String env)
throws java.io.UnsupportedEncodingException
3.2.4 javax.servlet.ServletResponse(Interface)
* public java.io.PrintWriter getWriter()
throws java.io.IOException
3.2.5 javax.servlet.http.HttpServletRequest(Interface)
* public java.lang.String getContextPath()
* public Cookie[] getCookies()
* public java.lang.String getHeader(java.lang.String name)
* public HttpSession getSession()
3.2.6 javax.servlet.http.HttpServletResponse(Interface)
* public void addCookie(Cookie cookie)
* public void sendRedirect(java.lang.String location)
throws java.io.IOException
3.2.7 javax.servlet.ServletConfig(Interface)
* public java.lang.String getInitParameter(java.lang.String name)
* public java.util.Enumeration getInitParameterNames()
* public ServletContext getServletContext()
3.2.8 javax.servlet.ServletContext(Interface)
* public java.lang.Object getAttribute(java.lang.String name)
* public java.util.Enumeration getAttributeNames()
* public ServletContext getContext(java.lang.String uripath)
* public RequestDispatcher getRequestDispatcher(java.lang.String path)
* public void setAttribute(java.lang.String name,
java.lang.Object object)
3.3 Servlet 的生命周期
3.3.1 生命周期的3 个方法
JDK提供的是JAVA SE包,而JAVAEE包不在JAVASE中,需要单独配置
Servlet生命周期:
1、 初始化1次:默认情况下:在第一次使用Servlet程序时初始化
<load-on-startup>1</load-on-startup>
关于Servlet初始化方法有两种:
init()
init(ServletConfig config):当使用此初始化时,上面的无参无效
2、 服务(doGet、doPost):直接输入的就是doGet请求
3、 销毁(1次):
服务器关闭
次Servlet长时间不使用
对于一个基本的Servlet程序必须注意以下几点:
符合Servlet结构
在web.xml文件中配置
package org.sky.darkness.servlet ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class LifeCycleServlet extends HttpServlet { // 初始化 public void init() throws ServletException { System.out.println("** Servlet 初始化 ...") ; } /* // 初始化 public void init(ServletConfig config) throws ServletException { System.out.println("** ServletConfig 初始化 ...") ; } */ // 表示处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { System.out.println("** Servlet doGet处理 ...") ; } // 处理post请求 public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { System.out.println("** Servlet doPost处理 ...") ; } // 销毁 public void destroy() { System.out.println("** Servlet 销毁 ...") ; } }; /* <servlet> <servlet-name>life</servlet-name> <servlet-class> org.sky.darkness.servlet.LifeCycleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>life</servlet-name> <url-pattern>/lc</url-pattern> </servlet-mapping> */
3.3.2 生命周期的各个阶段
3.4 HTTP Servlet 的基础知识
3.5 用MyEclipse开发Servlet应用程序
初始化:
package org.sky.darkness.servlet ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class InitParameterServlet extends HttpServlet { // 初始化 // 要取得初始化参数,必须使用以下初始化方法 public void init(ServletConfig config) throws ServletException { // config对象中有取得初始化参数的方法:getInitParameter("参数名称") String name = config.getInitParameter("name") ; String password = config.getInitParameter("password") ; String dd = config.getInitParameter("DBDRIVER") ; System.out.println("name => "+name) ; System.out.println("password => "+password) ; System.out.println("DBDRIVER => "+dd) ; } // 表示处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { // System.out.println("** Servlet doGet处理 ...") ; } // 处理post请求 public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { // System.out.println("** Servlet doPost处理 ...") ; } // 销毁 public void destroy() { // System.out.println("** Servlet 销毁 ...") ; } }; /* <servlet> <servlet-name>param</servlet-name> <servlet-class> org.sky.darkness.servlet.InitParameterServlet</servlet-class> <load-on-startup>0</load-on-startup> <init-param> <param-name>name</param-name> <param-value>darkness</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>wind</param-value> </init-param> <init-param> <param-name>DBDRIVER</param-name> <param-value>oracle.jdbc.driver.OracleDriver</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>param</servlet-name> <url-pattern>/ipar</url-pattern> </servlet-mapping> */
servlet文件夹下的jsp提交:
<form action="../formServlet" method="post"> 用户名:<input type="text" name="uname"> <input type="submit" value="提交"> </form> ----------------------------或-------------------------------------- <servlet> <servlet-name>form</servlet-name> <servlet-class>org.sky.darkness.servlet.FormServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>form</servlet-name> <url-pattern>/servlet/formServlet</url-pattern> </servlet-mapping>
ServletContext对象如何取得:
init():不写,直接取得
ServletContext app = this.getServletContext() ;
init(ServletConfig config):通过config对象取得:
ServletContext app = this.config.getServletContext() ;
package org.sky.darkness.servlet ; import java.io.* ; import javax.servlet.* ; import javax.servlet.http.* ; public class FormServlet extends HttpServlet { private ServletConfig config = null ; public void init(ServletConfig config) throws ServletException { this.config = config ; } // 表示处理get请求 public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { // System.out.println("** Servlet doGet处理提交参数 ...") ; this.doPost(req,resp) ; } // 处理post请求 public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException { String name = req.getParameter("uname") ; // 取得application对象 // ServletContext app = this.getServletContext() ; ServletContext app = this.config.getServletContext() ; app.setAttribute("addr","sky") ; // 取得一个session对象 HttpSession session = req.getSession() ; session.setAttribute("sname",name) ; // System.out.println("** Servlet doPost处理提交参数 ...") ; System.out.println("name = "+name) ; // 重定向 resp.sendRedirect("demo.jsp") ; } }; /* <servlet> <servlet-name>form</servlet-name> <servlet-class>org.sky.darkness.servlet.FormServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>form</servlet-name> <url-pattern>/formServlet</url-pattern> </servlet-mapping> */ -------------form.jsp-------------- <form action="formServlet" method="post"> 用户名:<input type="text" name="uname"> <input type="submit" value="提交"> </form> ------------demo.jsp------------- <h1><%=session.getAttribute("sname")%></h1> <h1><%=getServletContext().getAttribute("addr")%></h1> <h1><%=application.getAttribute("addr")%></h1>