Servlet从入门到精通(超级详细!)攻略
什么是Servlet?
Servlet(Server Applet)是运行在Web服务器或应用服务器上的程序,用于扩展服务器功能。Servlet的运行是由Servlet容器负责的,Servlet容器负责将请求和响应封装成ServletRequest和ServletResponse,并将它们传递给Servlet进行处理。
Servlet的生命周期
Servlet生命周期分为四个阶段:初始化、服务、销毁和空闲。
初始化阶段
在Servlet容器启动的时候,会创建Servlet实例并调用Servlet的init()方法。init()方法在整个生命周期中只会被调用一次,可以在这个时候进行资源的初始化操作。
服务阶段
每当有一个请求到达时,Servlet容器就会在一个新的线程中调用Servlet的service()方法。service()方法根据请求类型(GET、POST等)调用doGet()、doPost()等方法进行处理。
销毁阶段
Servlet容器在停止或重启时会销毁所有的Servlet实例,同时调用Servlet的destroy()方法。在destroy()方法中可以进行一些资源释放的操作。
空闲阶段
在服务阶段中,如果Servlet的处理需要一段时间,Servlet容器会将线程暂停,直到请求被处理完成。这个时候Servlet会进入到空闲状态,并等待下一个请求的到来。
Servlet的开发
创建Servlet
创建Servlet的方式有两种,一种是实现javax.servlet.Servlet接口,另一种是继承javax.servlet.http.HttpServlet类。下面以继承javax.servlet.http.HttpServlet类的方式为例进行讲解。
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8"); //设置响应数据类型
PrintWriter out = response.getWriter(); //获取输出流
out.println("<html>");
out.println("<head><title>我的Servlet程序</title></head>");
out.println("<body>");
out.println("<h1>Hello,World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
配置Servlet
在web.xml中配置Servlet,可以使用
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
部署运行Servlet
将编写好的Servlet程序打包成一个war文件,放到Tomcat或其他Servlet容器的webapps目录下,并启动Tomcat即可。
示例
示例1:使用Servlet处理表单提交
public class FormServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//获取表单参数
String username = request.getParameter("username");
String password = request.getParameter("password");
//向浏览器输出结果
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>表单处理结果</title></head>");
out.println("<body>");
out.println("<h1>提交的表单数据如下:</h1>");
out.println("<p>用户名:"+username+"</p>");
out.println("<p>密码:"+password+"</p>");
out.println("</body>");
out.println("</html>");
}
}
<servlet>
<servlet-name>FormServlet</servlet-name>
<servlet-class>com.example.FormServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FormServlet</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
示例2:使用Servlet读取数据库数据
public class DatabaseServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
//连接数据库,查询数据
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123456");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
//处理查询结果
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>数据库查询结果</title></head>");
out.println("<body>");
out.println("<h1>查询结果如下:</h1>");
out.println("<table border='1'>");
out.println("<tr><th>ID</th><th>姓名</th><th>年龄</th></tr>");
while(rs.next()){
out.println("<tr>");
out.println("<td>"+rs.getInt(1)+"</td>");
out.println("<td>"+rs.getString(2)+"</td>");
out.println("<td>"+rs.getInt(3)+"</td>");
out.println("</tr>");
}
out.println("</table>");
out.println("</body>");
out.println("</html>");
//释放资源
rs.close();
stmt.close();
conn.close();
}
}
<servlet>
<servlet-name>DatabaseServlet</servlet-name>
<servlet-class>com.example.DatabaseServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DatabaseServlet</servlet-name>
<url-pattern>/database</url-pattern>
</servlet-mapping>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Servlet从入门到精通(超级详细!) - Python技术站