Servlet基础

来源:互联网 发布:linux yum安装命令 编辑:程序博客网 时间:2024/06/06 07:50
http协议:超文本传输协议
请求和响应
servlet:运行在服务器端的java小程序,本质就是个类。
接受请求,处理逻辑,生成动态内容
编写步骤:
1.编写一个类
继承HttpServlet
重写doGet或者doPost方法
2.编写路径
<servlet>
<servlet-name>
<servlet-class>
<servlet-mapping>
<servlet-name>
<url-pattern>
3.测试
http://主机:端口号/项目名称
servlet体系结构:
Servlet->GennericServlet->HttpServlet
doGet():处理get请求的逻辑
doPost():
servlet生命周期
<url-pattern>
当我们项目处理不了请求的时候,服务器里面的defaultServlet来处理
ServletContext
上下文(全局管理者)
作用:
1.获取全局的初始化参数
2.共享资源
3.获取资源
4.获取文件的mime类型
获取:getServletContext()
常用方法:
String getInitParameter(String key):根据key获取指定的初始化参数
String getRealPath(String 文件):获取指定文件在tomcat上的绝对路径
InputStream getResourceStream(String 文件路径):以流的形式返回一个文件
String getMimeTye(文件名):返回文件类型
servletConfig(了解)
servlet的配置对象
作用:
获取servlet名称
获取servlet初始化参数
获取全局管理者
response:响应
作用:往浏览器中写东西
组成部分: 响应行 响应头 响应体
响应行:操作响应行 格式:协议/版本 状态码 状态码说明
状态码:
1xx:已发送请求
2xx:已完成响应
200:正常响应
3xx:
302:重定向
4xx:用户操作错误
404:页面没找到
405:访问方法不存在
5xx:服务器错误
500:服务器内部异常
响应头:常用响应头:location:重定向,refresh:定时刷新,content-type:设置文件的mime类型,及设置响应的编码并告诉浏览器用什么编码打开,content-disposition:文件下载
location:重定向
//方式一重定向
//1.设置重定向状态码
response.setStatus(302);
//2.设置响应头
response.setHeader("location", "/day15/loc2");
//*方式二
response.sendRedirect("/day15/loc2");
refresh:定时刷新
//方式一
heep的meta标签
<meta http-equiv="refresh" content="3;/day15/refresh2.html">
//方式二
response.setHeader("refresh","秒数;url=地址")
响应体:页面上显示的内容
getWriter():字符流
getOutputStream():字节流
自己写的同喜要用字符流,其他的一概字节流。
处理响应体中文乱码:
方式1:
response.setContentType("text/html;charset=utf-8");
方式2:
response.setHeader("content-type","text/html;charset=utf-8");
文件下载:
1.超链接下载
若浏览器能解析文件类型,则打开,若不能直接下载
2.编码下载 通过servlet完成
a.设置文件mime类型
String fileName = request.getParameter("name");
ServletContext context = getServletContext();
String mimeType = context.getMimeType(fileName);
response.setContentType(mimeType);
b.设置下载头信息
response.setHeader("Content-disposition", "attachment;filename="+fileName);
c.拷贝流
扩展:通过response生成验证码,防止暴力攻击
request
作用:浏览器发送过来的数据
组成部分:请求行 请求头 请求体
请求行:
格式:请求方式 请求资源 协议/版本
掌握方法:
String getMethod():获取请求方式
String getRemoteAddr():获取ip地址
String getContextPath():获取项目名称(/day15)
了解方法:
getRequestURI():获取的是从项目名称到参数之前的内容
getRequestURL():获取的是带协议的完整路径
http://localhost:80/day15/regist
String getQueryString():获取get请求的所有的参数
String getProtocol():获取协议和版本
请求头
格式:key/value(value可以是多个值)
常用方法:
*String getHeader(String key):通过key获取指定的一个vlaue
了解方法:
Enumeration getHeaders(String key):通过key获取所有value
Enumeration getHeaderNames():读取所有请求头名称
int getIntHeader(String key):获取整型的请求头
long getDateHeader(String key):获取时间的请求头
重要的请求头
user-agent:浏览器的内核
referer:页面从哪里来 防盗链
操作请求参数
username=name&password=123&hobby=eat&hobby=coding
常用方法
String getParameter(String key):获取一个值
String[] getParameters(String key):获取所有值
Map<String,String[]> getParameterMap():获取所有参数和值
请求的中文乱码:
原因:编码和解码的格式不一
对于get请求:参数追加到地址栏,使用utf-8,服务器接收到请求后,使用iso-8859-1解码,所以会产生乱码。
对于post请求:参数放在请求体中,服务器获取请求体的时候使用iso-8859-1解码,也会出现乱码。
通用方式:编码解码格式一样
new String (参数.getBytes("iso-8859-1"),"utf-8")
针对post请求来说,另一种方法:只需要将请求流的编码设置成utf-8即可
request.setCharacterEncoding("utf-8")
域对象
request:
创建:一次请求的时候
销毁:响应生成的时候
请求转发
request.getRequestDispatcher("内部路径").forwwrd(request,response)
*请求转发和重定向区别:
重定向发出两次请求;请求转发发一次请求
重定向地址栏改变;请求转发地址栏不变
重定向从浏览器发送;请求转发是服务器内部转发
重定向是response的方法;请求转发是request的方法
重定向可以请求站外资源;请求转发只能请求站内资源
扩展:
URLEncoder.encode(s,"utf-8"):指定编码
URLEncoder.decode(s,"iso-8859-1"):指定解码

原创粉丝点击