1、实现第一个Servlet技术
(1)新建Java文件
新建Project--》web--》Dynamic Web Project,项目名ServletTest
在src(Java Resources/src)中新建包com/liuyanzhao
然后在包内新建类名 FirstServlet
FirstServlet.java文件代码如下
- package com.liuyanzhao;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.GenericServlet;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- /*
- * @author LiuYanzhao
- */
- public class FirstServlet extends GenericServlet {
- public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
- //得到输出流PrinterWriter对象,Servlet使用输出流来产生响应
- PrintWriter out = response.getWriter();
- //使用输出流对象向客户端发送字符数据
- out.println("This is my First Servlet!");
- }
- }
这时候,如果我们运行tomcat,在浏览器中输入url:http://localhost:8080/ServletTest/FirstServlet
出现404,原因是没有映射对外访问的虚拟路径
具体配置方法请看第2步
(2)配置web.xml
在WebContent/WEB-INF中新建web.xml,具体代码可以参考tomcat安装目录中如下路径中的web.xml。
D:\java\apache-tomcat-7.0.72\webapps\examples\WEB-INF
这里我们的web.xml代码如下
- <?xml version="1.0" encoding="ISO-8859-1"?>
- <web-app xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
- version="3.0"
- metadata-complete="true">
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.liuyanzhao.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/FirstServlet</url-pattern>
- </servlet-mapping>
- </web-app>
(3)重新部署项目,刷新浏览器
结果如下
补充:正常情况下,这时候修改FirstServlet.java里的输出内容,需要重新部署web项目(run as java文件),然后刷新浏览器,才能看到有变化。
2、Servlet的多重映射
Servlet多重映射指的是,同一个Servlet可以映射成几个虚拟路径(url)。也就是说,可以通过多个路径访问同一个Servlet。Servlet多重映射的实现方法有两种,具体如下
(1)配置多个<servlet-mapping>元素。如下
web.xml核心代码如下
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.liuyanzhao.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 FirstServlet -->
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/FirstServlet</url-pattern>
- </servlet-mapping>
- <servlet-mapping>
- <!-- 映射为 Test01 -->
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/Test01</url-pattern>
- </servlet-mapping>
(2)重启tomcat服务器,打开浏览器
①在浏览器输入 http://localhost:8080/ServletTest/Test01
②在浏览器输入 http://localhost:8080/ServletTest/ServletFirst
(2)在一个<servlet-mapping>元素下配置多个<url-pattern>子元素,具体代码如下
web.xml核心代码如下
- <servlet>
- <servlet-name>FirstServlet</servlet-name>
- <servlet-class>com.liuyanzhao.FirstServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 FirstServlet 和 Test01 -->
- <servlet-name>FirstServlet</servlet-name>
- <url-pattern>/FirstServlet</url-pattern>
- <url-pattern>/Test01</url-pattern>
- </servlet-mapping>
结果和(1)相同
3、设置默认Servlet
如果某个映射路径是 政协刚(/),那么这个Servlet就是当前Web应用的默认Servlet。也就是说,如果Servlet服务器在接受到访问请求时,如果在web.xml文件中找不到匹配的<Servlet-mapping>元素的URL,就会将访问请求交给默认Servlet处理,具体如下
(1)我们在src下新建一个Default.java文件
代码如下
- package com.liuyanzhao;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.GenericServlet;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- /*
- * @author LiuYanzhao
- */
- public class Default extends GenericServlet {
- public void service(ServletRequest request,ServletResponse response) throws ServletException,IOException{
- //得到输出流PrinterWriter对象,Servlet使用输出流来产生响应
- PrintWriter out = response.getWriter();
- //使用输出流对象向客户端发送字符数据
- out.println("This is a Default Page");
- }
- }
(2)然后在web.xml里加映射
- <servlet>
- <servlet-name>Default</servlet-name>
- <servlet-class>com.liuyanzhao.Default</servlet-class>
- </servlet>
- <servlet-mapping>
- <!-- 映射为 /,即所有的虚拟路径(在web.xml里找不到的) -->
- <servlet-name>Default</servlet-name>
- <url-pattern>/</url-pattern>
- </servlet-mapping>
(3)重新部署tomcat,然后打开浏览器
①在地址栏输入url:http://localhost:8080/ServletTest
显然,本来如果不设置默认Servlet,访问这个url,一定是404的
②在地址栏输入url:http://localhost:8080/ServletTest/abc
道理和①一样
③在地址栏输入url:http://localhost:8080/ServletTest/FirstServlet
因为只有web.xml里不存在那个路径,我们才会使用默认Servlet,因为FirstServlet这个路径是存在的,自然会使用他自己的映射。
4、ServletConfig接口
ServletConfig:代表当前Servlet在web.xml中的配置信息,例如,文件使用的编码,公司的名字等,这些信息只需要放在web.xml里一个和多个<init-param>中
- String getServletName() -- 获取当前Servlet在web.xml中配置的名字
- String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值
- Enumeration getInitParameterNames() -- 获取当前Servlet所有初始化参数的名字组成的枚举
- ServletContext getServletContext() -- 获取代表当前web应用的ServletContext对象
(1)在web.xml文件中为Servlet配置一些参数信息
- <servlet>
- <servlet-name>SecondServlet</servlet-name>
- <servlet-class>com.liuyanzhao.SecondServlet</servlet-class>
- <init-param>
- <param-name>name1</param-name>
- <param-value>value1</param-value>
- </init-param>
- <init-param>
- <param-name>encode</param-name>
- <param-value>utf-8</param-value>
- </init-param>
- <init-param>
- <param-name>author</param-name>
- <param-value>LiuYanzhao</param-value>
- </init-param>
- </servlet>
上面的参数信息很明显,<init-param>表示要设置的参数,该节点的<param-name>表示参数名称,<param-value>表示参数的值。
(2)编写 SecondServlet类,实现读取web.xml文件中的参数信息
- package com.liuyanzhao;
- import java.io.*;
- import java.util.Enumeration;
- import javax.servlet.*;
- import javax.servlet.http.*;
- /*
- * @author LiuYanzhao
- */
- public class SecondServlet extends HttpServlet {
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- //防止中文参数乱码
- response.setContentType("text/html;charset=utf-8");
- request.setCharacterEncoding("utf-8");
- PrintWriter out = response.getWriter();
- //拿到init方法中的ServletConfig对象
- ServletConfig config = this.getServletConfig();
- // --获取当前Servlet 在web.xml中配置的名称(用的不多)
- String sName = config.getServletName();
- out.println("当前Servlet 在web.xml中配置的名称:"+sName+"<br/>");
- // --获取当前Servlet中配置的初始化参数(只能获取一个)经常用到
- String value = config.getInitParameter("name2");
- out.println(value+"<br/>");
- // --获取当前Servlet中配置的初始化参数(全部获取)经常用到
- Enumeration enumration = config.getInitParameterNames();
- while(enumration.hasMoreElements()){
- String name = (String) enumration.nextElement();
- String value1 = config.getInitParameter(name);
- out.println(name+":"+value1+"<br/>");
- }
- }
- protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
- this.doGet(req, resp);
- }
- }
(3)部署项目,打开浏览器
输入url:http://localhost:8080/ServletTest/SecondServlet
5、ServletContext 接口
暂时不写了
参考这里:https://liuyanzhao.com/4867.html
本文地址:https://liuyanzhao.com/4847.html
2017年07月09日 14:49:51
赞!