Servlet解刨
Posted oycq9999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet解刨相关的知识,希望对你有一定的参考价值。
1:使用Java EE版本的Eclipse开发动态的WEB工程(Java WEB项目)
1)把开发选项切换到Java EE
2)可以window->show view中找到package Explore,把其拖到开发区左边
3)在Servers面板中新建Tomcat服务器
4)新建Dynamic Web project(动态web工程) ,其中Target Runtime需要选择Tomcat
5)开发Java Web应用
6)可以通过run on server 运行 WEB项目
2:ServLet的HelloWorld
1)创建一个ServLet接口实现类
2)在web.xml文件中配置和映射ServLet
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>com.test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3)浏览器访问ServLet通过<url-pattern>/hello</url-pattern>
3:servLet容器:运行ServLet,JSP,Filter,Listener
1)可以来创建ServLet,并调用ServLet的相关生命周期方法
2)JSP,Filter,Listen,Tag...运行在ServLet容器中
4:ServLet生命周期的方法:以下方法都是由ServLet容器负责调用
1)构造器:第一次请求ServLet时,创建ServLet的实例,调用构造器(说明是ServLet一个单实例)
2)init:只被调用一次,在ServLet容器被实例化后立即调用,用于初始化ServLet
3)service:被多次调用,每次调用时都会调用service方法,实际用于响应请求
4)destory:在ServLet容器销毁时调用,只被调用一次,释放ServLet当前所占用的资源
5:load-on-startup:在被加载时创建实例
6:关于servlet-mapping
1)同一个servlet可以被映射到多个URL上,即多个<servlet-mapping>元素的<servlet-name>子元素的设置可以是同一个servlet的注册名
2)再Servlet映射到URL中也可以使用*(通配符),但是只能有2种固定格式
一种是:*.扩展名(html,jsp),另外一种是:/*
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
以下是不合法的:
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/*.html</url-pattern>
</servlet-mapping>
7:ServletConfig:是一个接口,封装了servlet配置信息,并且可以获取ServletContext对象
1) 配置ServLet初始化参数
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
2):获取初始化参数:getInitParameter(String name):获取指定参数名的初始化参数
getInitParameterName();获取参数名组成的Enumeration对象
String user=servletConfig.getInitParameter("user");
String password=servletConfig.getInitParameter("password");
System.out.println("用户:"+user+",密码:"+password);
Enumeration<String> names=servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
String value=servletConfig.getInitParameter(name);
System.out.println("^^"+name+":"+value);
}
3):ServletContext:是一个接口(是ServLet上下文)
Sevlet引擎为每一个WEB应用程序都创建一个对应的ServletContext对象,包含在ServletConfig对象中
调用ServletConfig.getServletContext方法可以返回ServletContext对应的引用
--由于每一个Servlet WEB应用程序共享ServletContext对象,所以ServletContext是application(应用):用于保存所有用户的公共的数据信息
①获取当前web应用程序的初始化参数
设置初始化参数:servletContext可以为所有的Servlet所获取,而Servlet的初始化参数只能被指定的一个servlet获取
<!-- 配置当前WEB应用程序的初始化参数 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>jdbcUrl</param-name>
<param-value>jdbc:mysql://localhost/testjdbc</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
方法:
ServletContext servletContext=servletConfig.getServletContext();
String driver=servletContext.getInitParameter("driver");
String jdbcUrl=servletContext.getInitParameter("jdbcUrl");
String user=servletContext.getInitParameter("user");
String passwords=servletContext.getInitParameter("password");
System.out.println("driver:"+driver);
System.out.println("jdbcUrl:"+jdbcUrl);
System.out.println("user:"+user);
System.out.println("passwords:"+passwords);
System.out.println("---------------------------
");
Enumeration<String> names2=servletContext.getInitParameterNames();
while(names2.hasMoreElements()){
String name2=names2.nextElement();
String value=servletContext.getInitParameter(name2);
System.out.println(name2+"-->"+value);
}
②获取当前WEB应用的某一个文件绝对路径:getRealPath()方法,不是文件部署前的路径
③获取当前WEB应用的根目录名称:
String contextPath=servletContext.getContextPath();
System.out.println("WEB根目录名称:"+contextPath);
④获取当前WEB应用的某一个文件对应的输入流
getResourceAsStream(String path):path的/ 为相当于当前WEB应用的路径
InputStream isInputStream2=servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
System.out.println("2."+isInputStream2);
jdbc.properties
driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/testjdbc</param-value>
user=root
password=123456
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Servlet1</display-name>
<!-- 配置当前WEB应用程序的初始化参数 -->
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>jdbcUrl</param-name>
<param-value>jdbc:mysql://localhost/testjdbc</param-value>
</context-param>
<context-param>
<param-name>user</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
<!-- 配置和映射ServLet-->
<servlet>
<!-- ServLet注册的名字 -->
<servlet-name>helloServlet</servlet-name>
<!-- ServLet的全类名 -->
<servlet-class>com.test.HelloServlet</servlet-class>
<!-- 配置ServLet初始化参数 -->
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
</servlet>
<servlet-mapping>
<!-- 需要和某一个ServLet节点的servlet-name子节点保持一致 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射具体访问路径:/当前WEB应用的根目录 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
以上是关于Servlet解刨的主要内容,如果未能解决你的问题,请参考以下文章
Servlet 类 org.restlet.ext.servlet.ServerServlet 不是 jakarta.servlet.Servlet