req和resp常用的方法
req:
1. setAttribute() 在Request域中存储数据
2. setCharacterEncoding() 设置请求参数的编码方式,只对post请求有效
3. getMethod() 获取请求类型
4. getParameter() 获取指定请求参数值
5. getParameterNames() 获取所有请求参数,返回一个Enumeration枚举类
6. getAttribute() 获取域中存储的数据
7. getAttributeNames() 获取域中所有数据,返回一个Enumeration枚举类
8. getContextPath() 返回当前WEB项目相对路径
9. getCookies() 获取所有Cookie,返回一个Cookie数组
10. getRequestDispatcher() 获取转发器,参数路径以/打头,代表WebRoot(当前WEB项目根目录)
11. getSession() 获取Session对象
resq:
1. setContentType() 告知浏览器数据类型
2. setCharacterEncoding 设置Response的编码方式
3. setHeader() 设置消息头
4. setStatus() 设置状态吗
5. addCookie() 添加Cookie
6. sendRedirect() 重定向
7. getOutputStream() 获取通向浏览器的字节流(同一次请求处理中,字节流和字符流不能同时存在)
8. getWriter() 获取通向浏览器的字符流(同一次请求处理中,字节流和字符流不能同时存在)
1. 编写一个雷实现Servlet接口
2. 实现service方法,处理请求并响应数据
3. 到web.xml中去配置servlet程序的访问地址
约定大于配置
通过 /hello 访问HelloServlet,执行service方法
访问ip地址,访问Servlet程序
Servlet注解配置
创建一个表单(提交按钮)action传入访问servlet程序的url
当启动tomcat实例,通过url中访问a.html页面,点击提交,访问servlet程序
==》==》返回结果
可以通过servlet的实现类对象中方法servle() , 参数 servletRequest,转换为子类httpservletRequest,getMethod获取请求方法
实现Servlet程序,一般通过继承子类HttpServlet,操作doGet、doPost方法
直接实现Servlet接口的,去实现Servlet程序,就使用service方法执行操作
继承了Servlet实现类,去实现Servlet程序,就使用doGet、doPost方法执行操作
自动创建继承HttpServlet的类
重写doPost、doGet方法
创建servlet程序,指定地址
提交按钮访问域名修改
servlet程序第一次访问,就创建
servletConfig对象是每个servlet程序创建时,就创建了一个对应的servletConfig对象
在初始化init( )方法处,获取servlet程序的信息
init()方法中的ServletConfig对象是通过参数传递过来的,doGet()方法中的ServletConfig对象是通过getServletConfig()获取的
继承了HttpServlet类的子类,重写了doGet、doPost方法,当重写init()方法时,需要调用父类的init()方法,将config保存到父类
ServletContext对象是域对象------该对象在整个web项目中被使用(只有一个)
添加<context-param>和servlet程序
注意事项:
获取web.xml的配置上下文参数context-param
通过 getServletConfig().getServletContext()
通过 getServletContext()
变更信息----执行步骤:1、更新classes和resources 2、 重新部署
一个web项目只有一个ServletContext实例,地址一样
改变一个ServletContext对象的键值,其他对象中也可以创建并使用
---------获取服务器封装的HTTP协议的请求
请求进入Tomcat服务器,服务器就会把请求过来的HTTP协议信息解析好,封装到Request对象中
然后传入service方法(doGet和doPost),我们就可以通过HttpServletRequest对象,获取请求
getRemoteHost()获取客户端IP,当返回0:0:0:0:0:0:0:1-----Ipv6协议地址,只有在你的服务器和你的客户端是同一台机器所导致的,只有在这种情况下才会这样。
访问路径,用127.0.0.1代替localhost访问-------解决返回路径不是本机Ipv4
getRequestURI------获取资源路径(相对路径)
getRequestURL-----获取资源定位符(绝对路径)
当localhost设置为真实IP,访问该url服务器getRequestURL返回的就是,客户端的真实IP
getRemoteHost------获取客户端ip地址
getHeader--------获取请求头
getMethod--------获取请求的方式
获取客户端IP--------------访问服务器的客户端的IP
getParameter()--------获取单个请求
此时用getParameter() ,多选会返回出错
getParameterValues()-----获取多个值时
getParameterMap()------获取请求参数---返回一个Map<string,string[]>集合,value为数组,防止参数名重复
Post方式,用户名中文获取乱码
解决:在doPost()中,使用setCharacterEncoding()
Servlet1:
Servlet2:
精简:
请求转发必须以斜杠 / 开头,表示web
通过请求转发,访问到WEB-INF中的文件
一般情况在WEB-INF目录下的文件是不允许访问的,通过请求转发,自定义到其下的文件,就可以访问到了
base标签设置页面相对路径工作时参照的地址
页面跳转都是通过参照当前页面网址加上跳转地址
静态跳转:
首页页面
c页面
1. 访问初始页面
2. 页面跳转,通过参照当前浏览器的网址
即--------------------------- (当前目录下的文件可以省略)+
成功跳转到c.html页面--------------------------
3.跳回首页,同样参照当前页面网址
+ =
通过servlet跳转
此时就需要使用base标签,设置所有页面跳转的参照地址
路径下的c.html文件可以省略
所有的都不能通过静态直接打开,否则路径中会多出一个web,导致路径出错
特殊情况,是将 / 发送给浏览器解析得到
getWriter()
getOutputStream()
setCharacterEncoding()
setHeader()
setContentType()
getWriter()
getOutputStream()
resp.getWriter().write("");
通过response对象,获取字符输出流对象,返回一个字符串数据
d) 响应的乱码解决
回传中文乱码
setCharacterEncoding()
setHeader()
解决:
方法一:
setCharacterEncoding("UTF-8")---------给服务器设置字符编码UTF-8
setHeader("Content-Type","text/html; charset=UTF-8")----------给浏览器设置字符编码UTF-8
setContentType()
方法二:(推荐)
请求重定向第一种方案
第一次请求 第二次请求
请求重定向的第二种方案:
注解
对应servlet-name
对应着
当只有一个路径时,大可好可以省略
只有一个路径,value也可以省略
大括号,可同时配置多个路径