您的位置:首页 > 运维架构 > Tomcat

Java中Javaweb之TomCat配置和Servlet方法和ServletConfig方法

2018-03-26 21:30 627 查看

Tomcat

先下载apache-tomcat-9.0.0.M26
下载完后其中有几个文件夹

Tomcat文件夹

bin: 可执行文件(打开 关闭服务器的文件)
conf: 服务器的配置信息
lib: 服务器使用的jar包
logs: 服务器日志
temp: 产生的临时文件
webapps: 默认的存放工程(应用程序)的文件夹
work: 服务器自己的工作空间
wtpwebapps: 跟Eclipse关联后产生的存放工程的文件夹


创建Servlet的几种方式

创建Servlet的方式一

从控制台启动Tomcat服务器命令
先去往Tomcat服务器下的 bin文件夹
cd (apache-tomcat-9.0.0.M26文件夹的目录)
获取文件夹权限(读写)
sudo chmod 775*.sh
执行打开服务器
sudo sh ./startup.sh
执行关闭服务器
sudo sh./shutdown.sh
访问服务器网址(url) http://localhost:8080 协议://本地地址:端口号/项目名(应用程序名)/访问的资源

Servlet 小服务程序
是个Java类 是个接口
注意:在浏览器上访问的每一个页面都是Servlet
每个Servlet都需要配置一个网址 在web.xml中配置

完成后在Eclipse上 实现Servlet接口
public class Demo01 implements Servlet{

// 生命周期方法 以下4个
//实例化方法(无参构造方法)
public Demo01() {
System.out.println("我是实例化方法");
}

@Override
public void init(ServletConfig arg0) throws ServletException {
// TODO Auto-generated method stub
System.out.println("我是初始化方法init");
}

@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
// Servlet只创建了一个 多次访问 实际上就是
// 多次调用服务的方法service
System.out.println("我是服务方法service");
}

@Override
public void destroy() {
// TODO Auto-generated method stub
// 1.删除该应用程序调用
// 2.停止服务器
System.out.println("我是销毁方法destroy");
}

@Override
public ServletConfig getServletConfig() {
// TODO Auto-generated method stub
return null;
}

@Override
public String getServletInfo() {
// TODO Auto-generated method stub
return null;
}

}


用户如何从浏览器访问到Servlet类?
1.用户通过浏览器,使用网址访问服务器(Tomcat)
2.服务器通过网址可以找到对应项目的web.xml文件
3.通过网址找到对应Servletname
4.通过Servletname找到对应的Servlet类
5.创建Servlet对象
6.执行生命周期几个方法
实例化(无参构造方法) -> init初始化方法 -> service服务方法 -> 销毁destroy方法


配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 下面是xml文件头文件 限制了该xml文件所能书写的内容  -->
<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>SH-web-servlet-01</display-name>
<!-- 设置欢迎页面 -->
<welcome-file-list>
<welcome-file>1.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名字 -->
<servlet-name>demo01</servlet-name>
<!-- 设置该Servlet使用哪个类 全限定类名 -->
<servlet-class>com.lanou3g.Demo01</servlet-class>
</servlet>
<!-- 给该Servlet配置一个访问地址(映射地址) -->
<servlet-mapping>
<!-- 配置哪个Servlet的映射地址 -->
<servlet-name>demo01</servlet-name>
<!-- 配置映射地址 -->
<!-- 注意:这里斜杠代表工程名后面斜杠 必须加上 -->
<url-pattern>/demo01</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo02</servlet-name>
<servlet-class>com.lanou3g.Demo02</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo02</servlet-name>
<!-- 配置访问路径通配符 -->
<!-- *.action 只要是以.action 结尾的访问路径 都可以访问到demo02 这个Servlet -->
<!-- /* 项目目录下 随便 输入网址 都能访问到 demo02 -->
<!-- 注意:上面两种方式不能连用  /*.action -->
<url-pattern>/demo02</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo03</servlet-name>
<servlet-class>com.lanou3g.Demo03</servlet-class>
<!-- 添加Servlet的配置信息 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>demo03</servlet-name>
<url-pattern>/demo03</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>demo04</servlet-name>
<servlet-class>com.lanou3g.Demo04</servlet-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>demo03</servlet-name>
<url-pattern>/demo04</url-pattern>
</servlet-mapping>
</web-app>


创建Servlet方式二

/*
* 创建Servlet的方式二(适配器模式创建)
* 使用哪个方法就重写哪个方法
* 用不上的方法可以不重写
*/
public class Demo02 extends GenericServlet{

@Override
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
System.out.println("我是demo02");
}
}


创建Servlet方式三

/*
* Servlet创建方式三(模板设计模式)
* 常用方式(必会)
*/
public class Demo03 extends HttpServlet {
// 声明一个ServletConfig对象 当做成员变量
private ServletConfig config;

// 初始化方法(通过该方法的参数 获取ServletConfig对象)
// ServletConfig对象 保存的是 Servlet中的配置信息
@Override public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
// 接收一下ServletConfig
this.config = config;
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用父类的doGet 怎么都会报错
// 不是400 就是 405
// 重写完doget方法 注意不要调用父类的doget方法
// super.doGet(req, resp);

// 获取Servlet的配置信息
// 参数是 配置时的 name(相当于 key)
// 用key获取对应的value
String value = this.config.getInitParameter("encoding");
System.out.println(value);

}

// 接收post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}


创建ServletConfig方式一

public class Demo03 extends HttpServlet {
// 声明一个ServletConfig对象 当做成员变量
private ServletConfig config;

// 初始化方法(通过该方法的参数 获取ServletConfig对象)
// ServletConfig对象 保存的是 Servlet中的配置信息
@Override public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
// 接收一下ServletConfig
this.config = config;
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 调用父类的doGet 怎么都会报错
// 不是400 就是 405
// 重写完doget方法 注意不要调用父类的doget方法
// super.doGet(req, resp);

// 获取ServletConfig方式一
// 获取Servlet的配置信息
// 参数是 配置时的 name(相当于 key)
// 用key获取对应的value
String value = this.config.getInitParameter("encoding");
System.out.println(value);

}

// 接收post请求
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}


获取ServletConfig方式二

public class Demo04 extends HttpServlet{

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 通过父类中的方法 获取getServletConfig对象
String parameter = this.getServletConfig().getInitParameter("encoding");
System.out.println(parameter);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(req, resp);
}
}


域对象

ServletContext

域对象(在一定范围内 存储信息的对象)
ServletContext范围: 整个程序中都可以访问到 并且只有一个  单例对象
每个Servlet都可以访问到整个域对象

如何获取ServletContext对象
方法1:从ServletConfig对象中获取
方法2:从父类中直接获取
注意: 所有的域对象 都有设置/获取/删除的方法


方式一

public class Demo05 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 从ServletConfig对象中获取
ServletContext application = this.getServletConfig().getServletContext();
// 添加一个数据到Context域中
// 相当于添加一个键值对 key 和 value
application.setAttribute("username", "xiaoming");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}


方式二

a10f
public class Demo06 extends HttpServlet{

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取域对象
Object object = this.getServletContext().getAttribute("username");
System.out.println(object);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  servlet tomcat java java web