Servlet
Posted __Ethan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet相关的知识,希望对你有一定的参考价值。
(单体架构使用servlet创建的模板用Java Enterprise,可以指定Tomcat版本,JavaEE版本以及Web)
Tomcat的核心
1 servlet ; 2 jsp引擎
servlet作用:
接受浏览器的url到serlvet
拦截url上 /* 的所有链接到DispatchServlet
<servlet>
<servlet-name>dispatchServlet</servlet-name>
<servlet-class>servlet.DispatchServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatchServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
然后把jsp引擎转译成的java页面返回给浏览器 ,并且转译后jsp页面实现了serlvet接口
此时接收和返回流都受控于servlet
public class Jsp引擎转译后的Jsp页面 extends HttpServlet{
在springMVC中会指定转译后的jsp页面存放地址
(默认Idea绑定Tomcat后 会采用第三种方式发布项目 即:在config.xml中指定目录存放jsp转译后的文件 一般指定在Idea 的 out 目录下)
servlet 3.0
省略Web.xml配置文件(指定url-pattern和servlet-class)
将url-pattern写在了Servlet注解中
实际开发中jsp引擎转译后的jsp页面已经实现了Servlet接口,交由Servlet管控 只需要在Web.xml编写url-pattern和servlet-class, 还可以采用servlet3.0方式 在jsp转译后的java类上添加@WebServlet(....)实现Web.xml的功能
Servlet原理:
url请求经过url-pattern到达指定的servlet-class即Servlet接口实现类(转译后的jsp页面) 实现类中的service方法会把页面信息一行一行的返回给浏览器解析 以上代码模拟出了jsp的转译类如何实现信息到浏览器的返回
(Servlet接口中的service方法在实现类HttpServlet中根据请求方式细分出了doGet和doPost方法)
Servlet接口的生命周期
操作Web.xml中 init-param 标签
web.xml中会初始化一些参数 init-param 标签中的代码
<servlet>
<servlet-name>DispacherServlet</servlet-name>
<servlet-class>servlet.DispatcherServletSDemo</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>张三</param-value>
</init-param>
<init-param>
<param-name>age</param-name>
<param-value>25</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
url请求进入servlet时就携带了 init-param 初始化参数, 需要在servlet中的init方法中获取init-param里的参数
public void init(ServletConfig config) throws ServletException {
Enumeration<String> initParameterNames = config.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
String name = initParameterNames.nextElement();
String value = config.getInitParameter(name);
System.out.println(name+" :"+value);
}
}
细节
@WebServlet(name = "SerrvletDemo",urlPatterns = "/*")
urlPatterns是一个String类型的数组容器 String[] urlPatterns() default {};
Servlet默认第一次被访问时init会和service方法一起执行, 当loadOnStartup = 1时init方法会在Tomcat启动时执行 会比service方法早执行 (SpringMVC在Web.xml中会设置loadOnStartup =1,使init方法比service方法早执行)
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public interface HttpServletResponse extends ServletResponse {
以上是关于Servlet的主要内容,如果未能解决你的问题,请参考以下文章