Tomcat&Servlet
Tomcat&Servlet
一、web开发相关的概念
1. 软件架构
1.1 C/S架构
C:Client客户端, S:Server服务器
比如:QQ、微信、大型网游
优点:
显示效果炫
安全性高
服务器压力小
缺点:
需要安装软件,可能还要有依赖软件
更新维护不方便
1.2 B/S架构
B:Browser浏览器,S:Server服务器
比如:网页游戏,京东,淘宝,12306,网银
优点:
不需要安装软件,直接使用浏览器访问
更新维护方便
缺点:
安全性较低:HTTPS,U盾
服务器压力大:集群
显示效果较差:HTML5和CSS3
2. web资源
静态资源:不同人在不同时间不同地方,访问同一资源,看到的效果是一样的。比如:HTML、CSS、js、图片、音频、视频。
动态资源:不同人在不同时间不同地点,访问同一资源,看到的效果是不同的。比如:JSP、Servlet、asp、php
3. 服务器
Tomcat:Apache的开源免费的小型服务器软件,支持Servlet和JSP规范。小巧、灵活、使用广泛
WebLogic:Oracle的收费的大型服务器软件,支持JavaEE所有规范。功能强大
WebSphere:IBM的收费的大型服务器软件,支持JavaEE所有规范。功能强大,并且稳定
二、Tomcat软件
1. 下载与安装
安装:免安装,直接解压即可。目录结构如下:
bin:可执行命令的文件夹。比如:启动和关闭
conf:配置文件夹。
server.xml修改Tomcat本身的配置;
web.xml是web项目的的默认配置
lib:是Tomcat的核心程序jar包
logs:日志文件夹
temp:临时文件夹
webapps:用于部署web项目的文件夹
work:工作目录,主要给JSP使用的
2. 启动与关闭
2.1 如何启动和关闭
启动:双击tomcat/bin/startup.bat
关闭:
双击tomcat/bin/shutdown.bat
直接关闭Tomcat的窗口
2.2 启动时可能遇到的问题
2.2.1 Java环境变量配置不正确,导致的启动闪退
正确配置Java的环境变量:
JAVA_HOME
:配置Java的安装位置CLASSPATH
:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
Path
:增加%JAVA_HOME%\bin
2.2.2 端口冲突导致Tomcat启动不了
现象:在
tomcat/logs/catalina*
日志文件里有:Caused by: java.net.BindException: Address already in use: bind
解决方案:
杀掉占用端口的进程,然后再启动Tomcat
查找占用端口的进程pid
在cmd里执行命令:
netstat -ano|findstr "要查找的端口号"
看结果里最后一列,值就是pid
去任务管理器里结束掉pid进程
更改Tomcat的配置文件,使用其它端口
找到tomcat/conf/server.xml
搜索
port=
,把搜索到的端口号改成其它:建议改成:1024~65535之间,或者:80Tomcat默认占用3个端口:8080, 8005, 8009
3. 部署web项目
访问web资源路径的写法
浏览器里地址的写法:
http://ip:port/web项目路径(名称)/资源路径
比如:
http://192.168.67.51/examples/index.html
如果不写项目名称,默认访问的是ROOT项目
给Tomcat部署web项目
把web项目直接放在tomcat/webapps文件夹里
4. 集成到idea
File-->Settings-->Build,Execution,Deployment-->application Servers
点击加号,选择
Tomcat Server
选择Tomcat的文件夹,确定
5. idea里创建web项目
6. 把web项目部署到Tomcat
三、Servlet
1. Servlet简介
1.1 什么是Servlet
Servlet:Server Applet,运行在服务端的Java程序。是Sun公司提供的一套规范(接口),让客户端可以通过url来远程访问Servlet。
1.2 Servlet的作用
和客户端交互的:
接收客户端提交的参数
完成客户端请求的功能
给客户端返回功能处理的结果
2. Servlet快速入门
步骤:
创建一个Java类,实现javax.servlet.Servlet接口
重写接口的方法(共5个方法,了解3个,重点学习1个:service方法)
给Servlet配置虚拟访问路径(使用注解@WebServlet来配置)
部署到tomcat,启动tomcat, 浏览器就可以访问Servlet
@WebServlet(urlPatterns = "/demo01")
public class Demo01Servlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Demo01Servlet.service 运行了");
servletResponse.getWriter().print("hello, laodi");
}
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
}
3. Servlet的原理
4. Servlet的生命周期和API
4.1 Servlet的生命周期(面试题)
何时创建:
默认第一次访问时,Tomcat会创建Servlet对象
创建Servlet对象时,会执行init方法
init方法只执行一次
何时销毁:
服务器关闭时/把web项目从Tomcat里取消部署时,Servlet对象会销毁
Servlet对象销毁时,会执行destroy方法
destroy方法只执行一次
每次访问必定执行的方法:service方法
问题:
有一个DemoServlet部署在Tomcat里。有10个人,每人访问1次,然后关闭Tomcat。问:
DemoServlet类,有几个对象存在?1个
service方法执行了几次:10次
destroy方法执行了几次:1次
4.2 Servlet的API
init(ServletConfig)
:初始化方法参数ServletConfig:是Servlet的配置信息对象,由Tomcat创建并传递进来的。作用了解:
config.getServletName()
:获取Servlet的名称config.getInitParameter("参数名")
:获取初始化参数config.getServletContext()
:获取ServletContext对象
service(ServletRequest, ServletResponse)
:业务处理的方法参数ServletRequest:代表http请求的对象,用于接收客户端提交的参数
request.getParameter("表单项的name")
:得到提交的表单项的值
参数servletResponse:代表http响应的对象,用于向客户端返回响应结果
response.getWriter().print("显示到客户端页面上的内容")
destroy()
:销毁方法
5. Servlet的简化开发方式
5.1 Servlet的开发方式
创建Java类,实现Servlet接口:
有大量的冗余重复代码,用不上,也必须要写。除了service方法,其它方法都是重复冗余的
创建Java类,继承GenericServlet:
GenericServlet实现了Servlet接口,帮我们实现了不需要的抽象方法。
我们的代码只要实现service方法即可
@WebServlet(urlPatterns = "/demo02")
public class Demo02GenericServlet extends GenericServlet {
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Demo02GenericServlet.service 运行了......");
}
}创建Java类,继承HttpServlet
HttpServlet继承了GenericServlet
根据不同的请求方式,调用了不同的方法
get请求,调用了doGet方法
post请求,调用 了doPost方法
GenericServlet实现了Servlet接口
@WebServlet(urlPatterns = "/demo03")
public class Demo03HttpServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("处理get和post请求的功能代码");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
5.2 HttpServlet创建的模板
四、作业
要求:
提供一个页面,页面里有登录表单。写完用户名和密码,点击登录时,提交到LoginServlet里。
在LoginServlet里:
接收表单提交的用户名和密码。执行SQL语句,校验用户名密码是否正确
如果用户名和密码正确,要求给客户端返回显示:login success
如果用户名或密码错误,要求给客户端返回显示:login failded
内容总结
知道软件开发的架构:C/S 和B/S
知道web资源的分类:静态资源, 动态资源
了解常见的服务器软件:Tomcat, WebLogic, WebSphere
能够启动和关闭Tomcat
如果启动时遇到问题:会解决
环境变量配置不正确,导致无法启动
端口冲突导致无法启动
把Tomcat配置到idea里
能够在idea里创建web项目,并把web项目部署到Tomcat,使用浏览器访问
Servlet
Servlet的作用:和客户端交互的
能够编写Servlet的快速入门
能够说出Servlet的生命周期(面试题)
能够理解Servlet的运行原理
能够创建HttpServlet
Tomcat&Servlet的更多相关文章
- What is the difference Apache (Http Server) and Tomcat (Servlet Container)
The Apache Project The Apache Project is a collaborative software development effort. Its goal is to ...
- TOMCAT ---> servlet概念
1 TOMCAT ---> servlet概念 2 TOMCAT 目录结构 (各个文件夹都存放什么东西) 3 TOMCAT 程序的层级 web | |---- js,jsp,html,css ( ...
- Android网络(3):HttpClient作client,Tomcat Servlet作server的交互演示样例
前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后 ...
- Web开发之Tomcat&Servlet
<!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...
- tomcat&servlet初记
tomcat&servlet初记 1. web相关概念 2. web服务器软件的学习:tomcat 3. servlet入门学习 web相关概念 1,软件架构 1,cs架构:客户端/服务器端 ...
- JavaWeb基础(day15)( http + tomcat + servlet + 响应)
HTTP+Tomcat+Servlet+响应 HTTP HTTP 超文本传输协议(Hyper Text Transfer Protocol ),一种网络协议. 协议的组成和过程 HTTP协议由 ...
- tomcat servlet 线程
在服务器里,有一个servlet,当客户端第一次访问服务器时,tomcat会 帮我们建一个servlet的对象出来,(注意: tomcat里面可能部署了10个Servlet,如果某一个Servlet从 ...
- Tomcat+Servlet面试题都在这里
下面是我整理下来的Servlet知识点:  图上的知识点都可以在我其他的文章内找到相应内容. Tomcat常见面试题 Tomcat的缺省端口是多少,怎么修改 Tomcat的缺省端口是多少,怎么修改 ...
- Tomcat &servlet字符集编码问题
1.字符编码的原由 1.1 request和response的默认编码是? 如果未指定字符编码,则Servlet规范要求使用ISO-8859-1的编码. HTTP消息正文(请求或响应)的字符编码在Co ...
随机推荐
- PHP中怎样让数组以字母为键值来递增
//小写字母 $key = 97; $arr = array(); for($i=1;$i<=26;$i++){ $arr[chr($key)] = $i; $key++; } print_r( ...
- IP通信中音频编解码技术与抗丢包技术概要
此文较长,建议收藏起来看. 一.一个典型的IP通信模型 二.Server2Server技术分类 Server2Server这块也是一个专门的领域,这里只简单分个类. 1.同一国家相同运营商之间: 同一 ...
- ACM学习历程—UESTC 1226 Huatuo's Medicine(数学)(2015CCPC L)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. ...
- ACM学习历程—SGU 275 To xor or not to xor(xor高斯消元)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=275 这是一道xor高斯消元. 题目大意是给了n个数,然后任取几个数,让他们xor和 ...
- Asp.net工作流workflow实战(一)
最近开发一个项目用到了工作流引擎,之前研究过微软的workflow所有就用它了,距离上次用有一段时间了,好多东西有点模糊了,就在此处一遍写代码一遍回忆. 首先,在我的项目中新建了.netframwor ...
- CCS V5 使用教程二:创建工程和配置软件仿真
新建CCS项目 选择File/New/CCS Project: 新建项目对话框 1) Project name: 指项目名称,这里要注意的项目名称不区分大小写. 2) Ou ...
- 【转】 Pro Android学习笔记(五四):调试和分析(2):View层次结构
目录(?)[-] 帮助性能分析 帮助精简UI设计 对于模拟器上的应用(非真实设备),可以查看Hierarchy View,如下图: 帮助性能分析 当我们选择某个view时,我们可以看到measurin ...
- .net 缓存之文件缓存依赖
CaCheHelp 类中代码如下: #region 根据键从缓存中读取保持的数据 /// <summary> /// 根据键从缓存中读取保持的数据 /// </summary> ...
- arguments详解
arguments 是什么? 是一个对象,一个 很像数组的对象 arguments内容是什么? 1是函数运行时的实参列表 2收到实参收集起来,放到一个arguments对象里 在词法分析中,首先按形参 ...
- 【总结整理】javascript的函数调用时是否加括号
javascript的函数调用时是否加括号 if(event.preventDefault){ event.preventDefault(); if判断条件里面不要加括号,不加括号是应该以属性形式,i ...