Servlet学习之Servlet概念与运行流程

Posted poorguy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet学习之Servlet概念与运行流程相关的知识,希望对你有一定的参考价值。

Servlet介绍与使用

  • 什么是服务器:
  • Servlet的概念:
  • Servlet的特点:
  • Servlet的使用:
  • web.xml参数配置:

问题:

服务器在接收到浏览器的请求后,会自动调用对应的逻辑代码进行请求处理。但是逻辑代码是由程序员编写并放到服务器中,那么服务器怎么知道该怎么调用并调用哪个类和哪个方法来进行请求处理。 

解决:

程序员在编写代码的时候如果能够按照服务器能够识别的规则进行编写, 浏览器按照指定的规则进行发送请求,那么服务器就可以调用并执行响应的逻辑代码进行请求处理了。

什么是服务器:

服务器也是一种计算机,只是安装了服务器软件,而服务器软件是由程序员开发出来的容器.(Eg:tomcat服务器就是安装了tomcat容器的计算机,而tomcat容器是java代码编写的,所以要运行tomcat容器,必须配置jdk环境).

Servlet的概念:

狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指 任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者。 Servlet 运行于支持 Java 的应用服务器中。从原理上讲,Servlet 可以响应任何 类型的请求,但绝大多数情况下 Servlet 只用来扩展基于 HTTP 协议的 Web 服 务器 .

Servlet的特点:

  1. 运行在支持java的应用服务器上
  2. Servlet的实现遵循了服务器能够识别的规则,也就是服务器会自动 的根据请求调用对应的servlet进行请求处理。
  3. 简单方便,可移植性强 

Servlet的使用:

  1. 创建普通的java类并继承HttpServlet类
  2. 复写service方法
  3. 在Service代码中书写逻辑代码
  4. 在webRoot下的WEB-INF文件夹下的web.xml 文件中配置servlet (或使用注解,通过反射机制自动配置)

运行流程:

服务器地址:端口号/虚拟项目名 /servlet的别名 

URI:虚拟项目名 /servlet的别名

浏览器发送请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹, 然后在web.xml中检索对应的servlet,找到后调用并执行 Servlet。

 

web.xml参数配置:(三种配置方法)

Eg:

1.直接使用@WebServlet("虚拟项目名")配置

package cn.csuft.poorguy;

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;

/**
 * Servlet implementation class LoginView
 */
@WebServlet("/LoginView")
public class LoginView extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException {
		String str = (String)req.getAttribute("str");
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset = utf-8");
		resp.getWriter().write("<html>");
		resp.getWriter().write("<head>");
		resp.getWriter().write("</head>");
		resp.getWriter().write("<body>");
		resp.getWriter().write("<h1>"+str+"</h1>");
		resp.getWriter().write("<form method = ‘get‘ action = ‘login‘>");
		resp.getWriter().write("用户名:<input type = ‘text‘ name = ‘name‘ value = ‘‘/>");
		resp.getWriter().write("<br/>");		
		resp.getWriter().write("密码:<input type = ‘text‘ name = ‘pwd‘ value = ‘‘/>");
		resp.getWriter().write("<br/>");		
		resp.getWriter().write("<input type = ‘submit‘ value = ‘login‘/>");
		resp.getWriter().write("</form>");		
		resp.getWriter().write("</body>");
		resp.getWriter().write("</html>");
	}
}

  

2.通过配置WebRoot下的WebInfo文件夹下的web.xml配置如下(由于容易出错,不推荐直接配置)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>web02</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <!-- 声明Servlet对象 -->
      <servlet-name>LoginView</servlet-name>
      <!-- 上面一句指定Servlet对象的名称 -->
      <servlet-class>cn.csuft.poorguy.LoginView</servlet-class>
      <!-- 上面一句指定Servlet对象的完整位置,包含包名和类名 -->
  </servlet>
  <servlet-mapping>
      <!-- 映射Servlet -->
      <servlet-name>LoginView</servlet-name>
      <!--<servlet-name>与上面<Servlet>标签的<servlet-name>元素相对应,不可以随便起名  -->
      <url-pattern>/LoginView</url-pattern>
      <!-- 上面一句话用于映射访问URL -->
  </servlet-mapping>
</web-app>

 

3.可以通过Myeclipse自动生成web.xml,也可以使用eclipse自动生成注解

创建过程:

右击项目-->New-->Servlet  填写包名和类名

技术图片

若想添加描述信息-->点击Next  否则-->点击Finish

下面是eclipse自动生成的注解:

package cn.csuft.poorguy;

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;

/**
 * Servlet implementation class LoginView1
 */
@WebServlet("/LoginView1")
public class LoginView1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginView1() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.getWriter().append("Served at: ").append(request.getContextPath());
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

  

这篇博客主要总结了一下servlet的概念和运行流程,同时说明了三种常用的配置servlet的方法

小白创作,大佬勿喷,欢迎大佬指点

 

以上是关于Servlet学习之Servlet概念与运行流程的主要内容,如果未能解决你的问题,请参考以下文章

Java学习之Servlet

Java学习之Javaweb核心servlet

Servlet学习之Tomcat控制台中文乱码问题

javaWeb学习之Listener监听

Java学习之Servlet篇

JaveWeb学习之Servlet:Servlet生命周期和加载机制