前言
在学servlet的时候总是感觉有点懵懵的,做了写笔记,不知道有没有用,今天没事就又看了看.还真是温故而知新啊!!!
开搞
1.HTTP协议:
超文本传输协议:规定数据的格式
浏览器网服务器发送-----------请求
服务器往浏览器会写-----------响应
请求:请求行 请求头 请求体
响应:响应行 响应头 响应体
登录案例:
需求:
在页面上输入用户名和密码,提交到服务器上,服务器拿着用户名和密码去数据库中查找有无此用户若有用户,则提示登录成功
若无此用户,则提示用户名密码不匹配
技术分析:
表单
servlet
请求(request)
响应(response)
表单:
收集用户数据
所有的字段要想提交到服务器必须有name属性
提交的地址action
请求方式:post(将数据放到了请求体中)
///////////////////////////////////////////////////////////////////////////////
2.servlet:
动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序处理业务逻辑,生成动态web内容
编写一个servlet步骤:
1.编写一个类
a.继承Httpservlet
b.重写doGet或者doPost方法
2.编写配置文件(web-inf/web.xml)
a.注册servlet
b.绑定路径
3.访问
http://主机:端口号/项目名/路径
localhost:8080/项目名/路径名
例如:
a.注册servlet 使用servlet标签
serlvet-name:给servlet起个名字全局唯一
serlvet-class:存servlet的全限定名复制过来
<servlet>
<servlet-name>First</servlet-name>
<servlet-class>org.vector.first.First</servlet-class>
</servlet>
b.绑定路径使用servlet-mapping标签
servlet-name:使用上面已起好的名字建议夏制
ur1-pattern:访问路径要求:目前必须以“/“开头唯一
<servlet-mapping>
<servlet-name>First</servlet-name>
<url-pattern>/ss</url-pattern>
</servlet-mapping>
接受参数:
格式:key=value
sting value=request.getparameter("key")
例如:http://localhost:8080/项目名/路径?username=tom
request.getParameter("username")就可以获取tom值
回写内容:
response
response.getWriter().print("success");
在doGet方法中写设置编码格式为utf-8
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=UTF-8");
步骤分析:
1.先有数据库和表
2.创建工程
3.复制页面
4.导入jar包:
驱动dbutils c3p05.导入工具类和配置文件
datasourceUtilsc3pO-config.xml
6.创建servlet(Loginservlet:路径/1ogin)
接受用户名和密码
调用service层(Userservice)完成登录操作提示信息
1ogin(username,password)
调用dao8.dao通过用户名和密码查询数据库
<form class="form-horizontal" action="路径" method="post">
<input type="text" name="名字" class="form-control" id="username" placeholder="请输入用户名">
<input type="password" name="密码" class="form-control" id="inputPassword3" placeholder="请输入密码">
配置文件地址要用localhost
servlet总结
servlet的体系结构:
Servlet:接口
|
Genericservlet:抽象类
|
HttpServlet:抽象类
|
自定义servlet
servlet常用方法:
void init(servletconfig config):初始化
void service(ServletRequest request,ServletResponse response):服务处理业务逻辑
void destroy():销毁
Servletconfig getservletconfig():获取当前servlet的配置对象
Genericservlet常用方法:
空参的Init()若我们自己想对servlet进行初始化操作,重写这个init()方法即可
Httpservlet常用方法:
service做了实现,把参数强转,调用了重载的service方法
重载的service方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法
doGet和doPost
///////////////////////////////////////////////////////////////////////////////
3.servlet生命周期★★★
serlvet是单实例多线程
void init(Servletconfig config):初始化
*初始化方法
*执行者:服务器
*执行次数:一次
*执行时机:默认第一次访问的时候
void service(ServletRequest request,ServletResponse response):服务处理业务逻辑
*服务
*执行者:服务器
*执行次数:请求一次执行一次
*执行时机:请求来的时候
void destroy():销毁
*销毁
*执行者:服务器
*执行次数:只执行一次
*执行时机:当servlet被移除的时候或者服务器正常关闭的时候了
4.url-pattern的配置:★
方式1:完全匹配必须以"/”开始例如:/hello /a/b/c
方式2:目录匹配必须”/”开始以””结束例如:/a/ /*
方式3:后缀名匹配以””开始以字符结尾例如:.jsp *.do *.action
优先级:
完全匹配>目录匹配>后缀名匹配
练习:
有如下的一些映射关系:
servlet1I映射到/abc/*
servlet2映射到/*
Servlet3映射到/abcServlet4映射到*.do
问题:
当请求URL为“/abc/a.html",“/abc/”和"/"都匹配,哪个servlet响应
Servlet引擎将调用servlet1。
当请求URL为“/abc"时,"/*”和"/abc”都匹配,哪个servlet响应
servlet引擎将调用servlet3。
当请求URL为"/abc/a.do"时,“/abc/”和“.do”都匹配,哪个servlet响应
Servlet引擎将调用servlet1。
当请求URL为“/a.do"时,/”和.do”都匹配,哪个servlet响应
servlet引擎将调用servlet2.
当请求URL为“/xxx/yyy/a.do"时,/*”和w.do”都匹配,哪个servlet响应
servlet引将调用Servlet2。
在servlet标签有一个子标签load-on-startup作用:
用来修改servlet的初始化时机取值:正整数值越大优先级越低
当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml,
若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息
案例2-当我们登录失败,提示”用户名密码不匹配”,3秒以后跳转到登录页面
技术分析:
定时刷新
常见的响应头-refresh响应头格式:
refresh:秒数;url=跳转的路径
设置响应头:
response.setHeader(string key,string value);设置字符串形式的响应头 response.addHeader(string key,string value);追加响应头,若之前设置设置过这个头,则追加;若没有设置过,则设置设置定时刷新
response.setHeader("refresh","3;url=/day0901/login.htm");
案例3-统计登录成功的总人次,
需求:
在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.
在访问另一个servlet的时候,显示登录成功的总人次技术分析:servletContext
ServletContext:上下文(全局管理者)
常用的方法:
setAttribute(String key,object value);//设置值
object getAttribute(String key);//获取值
removeAttribute(String key)://移除值
获取全局管理者:getServletcontext():
步骤分析:
1.在项目启动的时候,初始化登录次数
在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext上
2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数
3.然后将次数+1,让后将值设置回去
4.当访问showservlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可
快速创建servlet
New->other->搜索servlet->Next->Class Name->Next->url mapping->Eidt修改->OK->Next->勾选Inher , doGet , doPost->finish
5.servletcontext:理解
上下文(全局管理者)一个项目的引用.代表了当前项目。
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
作用:
1.获取全局的初始化参数
2.共享资源(xxxAttribute)
3.获取文件路径
4.其他操作
获取servletcontext:
方式1:了解
getservletconfig().getservletcontext()
方式2:
getservletContext()
常用方法:
方式1:了解
String getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitParameterNames():获取所有的参数名称
在根标签下有一个context-param子标签用来存放初始化参数
<context-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</context-param>
2.共享资源(xxxAttribute)xxxAttribute
3.获取文件路径
String getRealPath(string path):获取文件部署到tomcat上的真实路径(带tomcat路径)
Inputstream getResourceAsStream(String path):以流的形式返回一个文件
4.获取文件的mime类型大类型/小类型
String getMimeType(String 文件名称)
<load-on-startup>2</load-on-startup>
///////////////////////////////////////////////////////////////////////////////
5.域对象:★★★
servletcontext当成map集合
常用方法:
xxxAttribute()
servletcontext创建和销毁:.
当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象。
当项目被移除的时候或者服务器关闭的时候servletcontext销毁
存放:
共享的数据
获取文件的路径:
通过类加载器获取文件:
先创建2.txt 放在Webcontext目录下
在doGet中创建写:String l = 类.class.getclassLoader().getResource("2.txt").getpath();
Systemout.println(l);
///////////////////////////////////////////////////////////////////////////////
6.servletconfiq:(了解)
servlet配置对象
作用:
1.获取当前servlet的名称
2.获取当前servlet的初始化参数
3.获取全局管理者
方法:
string getservletName():获取当前servlet的名称(web.xwm1配置的servlet-name)
string getInitParameter(String key):通过名称获取指定的参数值
Enumeration getInitparameterNames():获取所有的参数名称
初始化参数是放在web.xml文件
servlet标签下子标签init-param
getservletcontext():获取全局管理者
网友评论