servlet大家都陌生了吧,今天带着大家回顾一下老古董
1.servlet
是一个类,是一个java文件
用来接收、处理、响应页面请求
一个类怎么样才能成为一个servlet
继承HttpServlet
使用servlet + jsp 这种方式,让业务代码和显示完全分离
jsp: 只做显示
servlet: 业务逻辑处理,接收请求,处理之后,响应页面给浏览器
2.第一个servlet
需求: 定义一个servlet,当页面请求/hello的时候,自定义的servlet接收、处理这个请求,并响应“HelloWorld” 并浏览器
1)定义HelloServlet
2)编写
a) HelloServlet 继承HttpServlet

b) 重写父类的service方法,这个方法为入口方法

3)请求地址和servlet之间的映射配置
web.xml中

4)部署工程
5)启动tomcat
6)浏览器访问http://localhost:8080/teacher_servlet/hello
3.访问执行流程
浏览器请求http://localhost:8080/teacher_servlet/hello
1)tomcat启动的时候,会加载webapps目录下所有的应用,加载应用的时候,会解析WEB-INF下的web.xml文件
2)浏览器访问http://localhost:8080/teacher_servlet/hello
3)tomcat接收到浏览器请求,先解析端口后面的应用名,确定请求的是哪一个应用
--确定请求应用为 teacher_servlet
4)tomcat截取请求地址 /hello
5)tomcat会到web.xml中寻找请求地址匹配的servlet-mapping标签

6)找到之后,会继续找servlet-name对应的servlet标签对象

--找不到,就会到webRoot下找具体的资源,再找不到,404
7)拿到servlet-class标签值,也就是指定的servelt类地址,然后创建这个类的实例

HttpServlet helloServlet = Class.forName(addr).newInstance();
8) tomcat会调用helloServlet.service(req,resp)方法
9)线程在运行的时候,因为实例是HelloServlet,所以线程会执行子类HelloServlet.service()方法

10) HelloServlet接收到了请求,处理,并通过response响应文本给浏览器
4.servlet生命周期
生命周期
实例化, 初始化,服务阶段, 销毁
阶段 执行时间 执行次数
实例化 ---------------------第一次被访问的时候----------1
初始化----------------------第一次被访问的时候------------1
服务阶段--------------------每次被访问的时候---------------N次
销毁--------------------------服务器正常停止的时候------------1次
servlet是单例还是多例??
--单例类
单例类,需要小心全局变量!!!!!

5.servlet 与jsp
servlet中可以响应html
jsp中又可以写代码
jsp就是一个servlet

HttpJspBase继承HttpServlet

6.servlet正确使用
重写方法:最末端的do方法
public void service ---》对外的公共方法
protected void service -请求的分发,根据提交方式
do….-----》请求处理
请求方式get—》重写doGet方法
请求方式post-->重写doPost方法
如果请求方式既有get,也有post--->重写doGet,doPost

从今往后!jsp中不允许出现小脚本
7. 项目重构
1)登录

a)编写LoginServlet
继承HttpSevlet
重写哪个方法?--》(取决于login.jsp中的提交方式)doPost方法



重定向,路径处理:需要带上appName

b)web.xml配置

c) main.jsp
d)修改login.jsp中的提交地址
2) 查询学生列表
main.jsp 添加“查询所有学生”按钮
需求:点击“添加所有学生”---》页面需要展现所有的学生数据

流程分析

今天练习:
登录,查询所有, 查详情
查详情


修改:

StuDetailServlet和StuEditBeforServlet 重复率比较高
stuDetail.jsp和stuEdit.jsp重复率也比较高
-- servlet合并
--jsp合并
提示: 使用来源标识作为参数
jsp中,使用c:if标签
表单action请求地址之后,不适合加参数

退出功能

8.log4j日志使用
1)导包

2)导配置文件

配置文件放在src根目录下,或者config资源目录的根目录

3)代码中使用log4j


异常也有四种级别

9.过滤器
目前工程中的权限:
jsp
servlet
jsp:
提取公共的jsp页面、

其他页面引用

servlet:

过滤器:

过滤器使用
1)自定义一个类 实现Filter接口, javax.servlet.Filter

2)实现接口中的方法

3)web.xml中配置过滤器

今天练习:
1.servlet继续
2.权限过滤器
3.免校验的判断,提取成私有方法
需求: String noAuth = “.js,.jpg,/login.jsp,.png”


硬编码:

配置文件:
不是只有.properties才是配置文件
txt也可以是配置文件,xls也可以是配置文件,xml也可以是配置文件
常用: .properties .xml
properties体现不出层级关系,简单的key,value
xml 体现层级,或者说对象的概念
过滤器配置参数:

取值,在代码中,从过滤器配置对象中取

配置全局参数

代码中取值

同理,servlet中也可以配置初始化参数,也可以通过上下文取全局参数

servlet默认是在第一次被访问的时候初始化,如果想要tomcat启动的时候初始化,使用标签

10.mvc模式

11.servlet文件上传
新需求: 每个学生信息中需要展示照片
1)添加图片上传
2)修改也有图片修改
3)列表页展示图片
4)详情页要展示
首先要知道,图片是怎么上传的?

代码:
1) jsp

2)servlet
导包


如果form表单中有多个input

代码中,需要分开处理(普通文本域和file控件需要分开处理)

文件如何与数据相关联?
1.数据库数据中,表数据中,有一个字段,肯定要可以和这个文件关联起来
字段1: 地址+文件名(重命名后)
字段2:原始文件名
如果上传的文件,文件名一致,那么会出现覆盖的情况
解决办法: 重命名
新需求: 每个学生信息中需要展示照片
1)添加图片上传
a)数据库表添加字段
实体类
jsp-servlet
jsp(添加file,修改method,enctype)
servlet
取参要改
上传文件
保留文件路径
2)修改也有图片修改
3)列表页展示图片
4)详情页要展示

ls 查看当前文件夹下有什么文件和文件夹
cd upload 进入upload目录
pwd 查看当前目录的路径
今天练习:
1)添加学生信息,添加图片上传
上传图片的访问


如果图片上传地址 uploadPath + 文件名
C:\Tomcat601\webapps\upload\1513819315113.jpg
数据库存储,文件名:\1513819315113.jpg
页面需要的地址 tomcatPath + 文件名
/upload/1513819315113.jpg
<img src=”${tomcatPath}${student.imgUrl}” />

如果图片上传地址:uploadPath + stuUploadPath + 文件名
C:\Tomcat601\webapps\upload\stuImg\1513819315113.jpg
数据库存储:stuUploadPath + 文件名
\stuImg\1513819315113.jpg
页面需要的地址 tomcatPath + stuUploadPath + 文件名
/upload/stuImg/1513819315113.jpg
<img src=”${tomcatPath}${student.imgUrl}” />
在开发过程中,
文件上传目录和tomcat,不会在一起。是分开,独立的两个目录
怎么访问呢??
tomcat虚拟目录
比如
http://localhost:8080/resource/1513819315113.jpg
tomcat有个虚拟目录配置
/resource - D:\upload
当访问/resource 那么tomcat会到D:\upload目录下去找
配置:
在tomcat/conf/server.xml的host标签中配置Context标签


[注:本文部分图片来自互联网!未经授权,不得转载!每天跟着我们读更多的书]
互推传媒文章转载自第三方或本站原创生产,如需转载,请联系版权方授权,如有内容如侵犯了你的权益,请联系我们进行删除!
如若转载,请注明出处:http://www.hfwlcm.com/info/196717.html