request和response的笔记

servlet ==>  server applet ==> 服务器端的小程序

1.作用是用来处理请求(request),完成响应(response)的.

2.如何创建一个servlet
	*实现servlet接口
	*继承GenericServlet
	*继承HttpServlet
	
3.servlet接口中的方法
	*init (ServletConfig )
	*service (ServletRequest , servletResponse )
	*destory ()
//=======
	*getServletConfig
	*getServletInfo
	
4.ServletConfig 的 作用.
	*getServletName
	*getInitParameter()
	*getInitParameterNames()
	*getServletContext()
5.servlet线程是不安全的.
	因为在服务器中,一个servlet只存在一个实例.所以当有多个请求同时访问的时候,如果使用成员变量接受线程参数,就会有问题.
	解决办法: 使用局部变量接受线程参数.
6.url-pattern
	路径匹配:   "/"开头  例如: /AServlet 
	后缀名匹配:  "*"开头 例如: *.do
注意: 1.匹配范围越广优先级越低
	  2.两种匹配方式不能同时使用.
7.load on  startup
	该配置可以让servlet在服务器启动时加载.
	填入的数字表示优先级.数字越小,优先级越高.
	优先级一样,按配置顺序加载.
8.servletContext 
	范围: 一个项目对应一个servletContext.
	获取: 通过servletConfig获取
	作用: 
		1.获得配置文件(web.xml根下的)中的参数
			*getInitParameter()
			*getInitParameterNames()
		2.域的功能 => application
			增加一个:setAttribute
			删除一个:removeAttribute
			获得一个: getAttribute
			获得所有键: getAttributeNames
		3.获得项目内资源
			getResourceAsStream
			getRealPath
		*以上两个方法都是填写相对路径. "/" ==> 项目的根下(WebRoot)
		
//----------------------------------------------------------------------------------------
Day08 --- request & response
//----------------------------------------------------------------------------------------
1.response 代表响应, 可以理解为一个空的箱子,我们在里面填入要发送到浏览器的内容. 服务器会把这些内容组装成http响应.
	
	响应首行  协议/版本号  状态码  状态码描述
		添加状态码 和 描述
		void setStatus(int sc)  只设置状态码
		void setStatus(int sc, String sm)   设置状态码和描述
		void sendError(int sc) 只设置状态码,错误的
        void sendError(int sc, String msg)  设置状态码和描述
	响应头
		添加响应头
			void setHeader(String name, String value) 设置响应头,如果key一样会覆盖
				setIntHeader(String name, int value) 
				setDateHeader(String name, long date) 

			void addHeader(String name, String value) 设置响应头,无论如何都新增.
				 void addIntHeader(String name, int value) 
				 void addDateHeader(String name, long date)  
	响应空行
	响应正文
		发送字节流
			getOutputStream
		发送字符流
			getWriter
			
//==========================================================================================================
应用.

例一: 手动向浏览器发送404

例二: 重定向 

例三: Refresh头.刷新 

例四: 发送字节流. 发送中文.
  
例五: 发送字符流. 发送中文.

字符流和字节流要注意的一个问题:
	字节流和字符流一定不能同时使用.
	
例六:使用字节流发送图片
		
例七:使用字节流发送文件(文件下载)

//=============================================================================================================
request对象	
	一.封装了浏览器发送来的请求信息.
	

	请求首行  请求方式 请求路径  协议/版本号
		request.getMethod(): GET
		request.getRequestURI(): /Day08-request/AServlet
		request.getServletPath(): /AServlet
		request.getContextPath(): /Day08-request
		request.getScheme(): http
	请求头
//--原始方式获得请求头
		String getHeader(String name)  
		long getDateHeader(String name) 
		int getIntHeader(String name)
		Enumeration getHeaders(String name)
		Enumeration getHeaderNames() 
		
//---javaee封装好的方法.
		request.getContentLength(): -1
		request.getContentType(): null
		request.getLocale(): zh_CN
		request.getQueryString(): name=tom&age=18
		request.getRequestURL(): http://localhost:8080/Day08-request/AServlet
		request.getRemoteAddr(): 0:0:0:0:0:0:0:1
		request.getRemoteHost(): 0:0:0:0:0:0:0:1
		request.getRemotePort(): 52074
		request.getServerName(): localhost
		request.getServerPort(): 8080
	请求空行
	请求正文 表单传送过来的键值对
	
	获得表单提交的参数.
	1.GET  http://localhost:8080/Day08-request/AServlet?name=tom&age=18
		乱码:只要确保编码和解码一致,就绝对没有问题.
			1.浏览器负责编码.浏览器使用的码表就是表单所在页面的码表.
			
			2.服务器负责解码.服务器默认使用ISO-8859-1解码. 如下配置的URIEncoding来决定解码码表
				 <Connector port="8080" protocol="HTTP/1.1"  URIEncoding="UTF-8"
					connectionTimeout="20000" 
				redirectPort="8443" />
			如上配置会影响整个服务器不推荐.
				我们使用如下代码解决:
						//获得参数
						String name = request.getParameter("name");
						//因为服务器使用了错误的码表,那么我们按照错误的码表原路返回
						byte[] nameByte = name.getBytes("ISO-8859-1");
						//用正确的码表重新解码
						String newName = new String(nameByte,"UTF-8");
						
						System.out.println("解决之后的:"+newName);
			
		
	2.POST
		因为Post解码是在第一次调用getParameter之前,那么解决乱码只需要在调用该方法之前设置编码:
			request.setCharacterEncoding("UTF-8");
		
			String name = request.getParameter("name");
			
			System.out.println(name);
			
涉及到获得表单参数的方法还有哪些呢?
		String getParameter 根据键获得值
		Map getParameterMap()  获得服务器保存表单参数的容器. 就是map<String,String[]>. 泛型: habit=chi&habit=shui&habit=la
		Enumeration getParameterNames()  获得提交的所有键
		String[] getParameterValues(String name)  根据键获得值. 获得一键对应多个值的情况的.
		

//---------------------------------------------------------------------------------------------------------------------
2.request的请求转发和包含功能.
	转发:
		一个Servlet处理完毕交给下面的servlet(JSP)继续处理.
	作用: 
		在现实开发中,没有servlet转发给servlet的情况.都是由servlet转发给JSP.
		这样可以达到分工的作用:
			servlet: 比较适合处理业务.
			JSP: 比较适合显示功能
	注意问题:
			//servlet中不要做 输出正文的动作,没有结果的
			//如果放到前面会出现乱码.
			//但是响应头是可以设置的.
	
	包含:
		两个servlet(jsp)共同向浏览器输出内容.
	作用:
		在现实开发中,多个页面含有相同的内容,我们把相同的内容抽取到一个jsp中,在需要显示这个段内容的jsp中,包含抽取的jsp.可以达到
		统一管理相同的内容.
		
3.request域的应用.
	原理:
		在request对象中含有一个map.这个map就是request域.
	作用:
		在将来开发中. 使用请求转发时,servlet处理完数据, 处理结果要交给jsp显示. 可以使用request域将处理结果有servlet带给jsp显示.
		
	操作:
		1.setAttribute  存入一个键值对
		2.getAttribute  通过键取出值
		3.getAttributeNames 获得域中所有键
		4.removeAttribute 跟据键移除一个键值对		
		
	request的范围:
		一个request对象对应一个request域(map).
		系统当前有多少个request就有多少request域.

//=================================================================================================================
路径总结:
	路径分为两种情况:
		1.客户端路径 ==> 给浏览器用的路径
			<form action="/Day08-request/AServlet" >
			<a href="/Day08-request/AServlet" >
			<img src="/Day08-request/AServlet" >
			response.sendRedirect("/Day08-request/AServlet")
			Refresh:3;url=/Day08-request/AServlet
		路径写法:
			带"/" :  "/" ==> 相对于 主机.
				例如: 表单所在页面路径为==> http://localhost:8080/Day08-request/login.jsp ==> "/" 代表http://localhost:8080/
			
			不带"/":(开发中一定不要出现不带"/"的情况).代表从当前目录找.
				例如: 表单所在页面路径为==> http://localhost:8080/Day08-request/info/login.jsp ==> 代表 http://localhost:8080/Day08-request/info/
		
			
		2.服务器端路径
			<url-pattern> /AServlet  ==> http://localhost:8080/Day08-request/AServlet
			request.getRequestDispatcher("/AServlet") ==> http://localhost:8080/Day08-request/AServlet
		路径写法:
			"/": 相对于项目.  "/"==>http://localhost:8080/Day08-request/
 		
		
		
		
		
		
		
		
		
作业:
		完成学生注册.
	要求:
		写一个注册页面
		在页面点击注册按钮.将注册信息发送到servlet中.
		在servlet中将提交的学生信息交给StudentDao保存到xml中.
		提示用户注册成功.
	(成功之后,要在xml中看到新注册的学生信息算完成)
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值