servlet基础
一:什么是servlet?
servlet 是运行在web服务器的java小程序,可以获取并针对web客户端的请求做出响应(一般情况下通过Http进行传输通信。),是一种用于开发动态web资源的技术。
补充:静态web资源(HTML页面):指web页面提供给浏览器的数据始终不变。
动态web资源(servlet,jsp):指web页面提供给浏览器的数据是由程序产生的,不同的时刻访问web页面呈现的内容不一样。
二:开发动态web资源步骤:
- 编写一个实现servlet接口的java类。
- 把开发好的Java类部署到web服务器中。
三:servlet生命周期:
- 初始化阶段:ini()方法(一次)
- 运行阶段:service(HttpServletRequest request,HttpServletResponse reponse)方法,线程处理。
- 消亡阶段:destroy()方法(一次),释放资源。
具体过程如下:从浏览器(Client)获取连接”/helloWorld.html” — Tomcat Connector模块将请求(Request)传递给 Container模块 — Container 模块会做以下事情 —— 分析HTPP请求信息,组装成HttpServletRequest对象 —— 创建新的HttpServletResponse对象 —— 根据路由配置,搜索相应的Servlet,并创建一个线程用于处理本次请求。此时线程会将上面Request和Response对象的索引,传递给Servlet — 新线程中的Servlet处理逻辑 — 线程结束后,通过HttpServletResponse对象的PrintWriter,返回浏览器一个信息。 (转自:https://zhuanlan.zhihu.com/p/25828675)
语句分析:
response.setContentType("text/html;charset=gbk");//设置响应的页面类别和页面编码
PrintWrite out = response.getWriter(); //构造一个标准的输出流,把想要表达的内容传输到页面上。
①:编写一个servlet类(包括init(),service(),destroy(),doGet(),doPost()方法)
package gacl.servlet.study; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; @WebServlet("/ServletDemo1") public class ServletDemo1 extends HttpServlet { private static final long serialVersionUID = 1L; public void init() throws ServletException{ System.out.print("初始化init()方法"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.print("调用doGet()方法"); response.setContentType("text/html;charset = gbk"); PrintWriter out = response.getWriter(); out.print("<html>"); out.print("<head><title>测试0-10循环</title>"); out.print("<body>"); out.print("开始执行。。。。"); int count = 0; for(int i=0;i<=10;i++) { count+=i; } out.print("程序结果为:"+count); out.print("</body>"); out.print("</head>"); out.flush(); out.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void destroy() { System.out.print("调用destroy()方法"); } }
②配置web.xml文件。(供servlet给外界访问,把这个servlet映射到一个URL地址上。)
<servlet> <servlet-name>ServletDemo1</servlet-name> <servlet-class>gacl.servlet.study.ServletDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo1</servlet-name> <url-pattern>/servlet/ServletDemo1</url-pattern> </servlet-mapping>
四:servlet初始化参数:在web.xml中通过<init.param>配置
//servlet初始化参数:会将参数封装到servletConfig对象中,在servlet调用init方法时将servletconfig对象传给servlet。进而获得servlet初始值
private ServletConfig config; public void init(ServletConfig config) throws ServletException { this.config = config; }
调试过程中遇到问题:Server Tomcat v8.5 Server at localhost failed to start.

原因是xml.web中的<servlet-mapping>重复了,删掉即可。
关于web.xml配置servlet问题:在web.xml文件中可以配置多个servlet,格式如下:
<servlet>
<servlet-name>ServletContextDemo1</servlet-name>
<servlet-class>gacl.servlet.study.ServletContextDemo1</servlet-class>
</servlet>
<servlet>
<servlet-name>ServletContextDemo2</servlet-name>
<servlet-class>gacl.servlet.study.ServletContextDemo2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletContextDemo1</servlet-name>
<url-pattern>/servlet/ServletContextDemo1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ServletContextDemo2</servlet-name>
<url-pattern>/servlet/ServletContextDemo2</url-pattern>
</servlet-mapping>
五:ServletContext对象实现数据共享


浙公网安备 33010602011771号