request的代码解析

Posted 离落想AC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了request的代码解析相关的知识,希望对你有一定的参考价值。


首先老师给的参考代码是这三个java文件。


这是两个html代码用来实现以下三个过程:

1.注册页面reg.html,点提交,由RegServlet获取用户输入。
2.注册页面reg2.html,点提交,交由Request5来处理,Request5转发至egServlet获取用户输入。
3.RequestLineServlet,验证reques对象的getMethod,getRequestURI、getHeader等方法。

1.注册页面reg.html,点提交,由RegServlet获取用户输入。

这个reg代码除了html本身的框架实质上就是建立了一个form表单,以及表单里面的input语句。

下面是input语句的type类型用法。


主要代码及注释如下所示:

<form action="/MyJspProject/RegServlet" method="post">
	<!-- 建立表单 表单提交后跳转到/MyJspProject/RegServlet处。-->
	用户名:<input type="text" name="username"><br>
	<!-- 表单第一行,用户名行,输入类型:text 索引键:username-->
	密  码:<input type="password" name="password"><br>
	<!-- 表单第二行,密码行,输入类型:password 索引键:password -->
	爱好:
	<!-- 表单第三行,爱好行,输入类型:checkbox 索引键:hobby  单击时的结果:value -->
	<input type="checkbox" name="hobby" value="football" />足球<br>
	<input type="checkbox" name="hobby" value="basket" />篮球<br>
	<input type="checkbox" name="hobby" value="table" />乒乓球<br>
	<!-- 表单的四行,提交行,点击提交  -->
	<input type="submit" value="提交">
	</form>

下面来分析RegServlet代码:

这个代码是个java类型的代码,除去javaservlet框架主要内容是获取通过http协议提交过来的数据并输出。

主要代码及注释如下所示:

response.setContentType("text/html;charset=utf-8");
		//使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
		//此处是html类数据
		PrintWriter out = response.getWriter();
		//限制输出数据类型
		//write():仅支持输出字符类型数据,字符、字符数组、字符串等
        //print():可以将各种类型(包括Object)的数据通过默认编码转换成bytes字节形式,这些字节都通过write(int c)方法被输出
		request.setCharacterEncoding("utf-8");
		//解决中文乱码问题
		String username  = request.getParameter("username");
		//获取通过http协议提交过来的数据,并存到username中
		String password   = request.getParameter("password");
		//获取通过http协议提交过来的数据,并存到password中
		out.write(username+"<br>");
		//利用out.write方法输出打印username
		out.write(password+"<br>");
		//利用out.write方法输出打印password
		String hobbys[] = request.getParameterValues("hobby");
		//获取通过http协议提交过来的数据的values,并存到hobbys[]中。
		if( hobbys!=null  )
			//防止异常。如果没有获得数据的话直接跳走。
		
			for(String s:hobbys)
				//循环输出
				out.write(s+"<br>");
				//输出一个个的s的值
			
			
		

2.注册页面reg2.html,点提交,交由Request5来处理,Request5转发至egServlet获取用户输入。

再来看注册页面reg2,他和reg界面99%相似,唯一不一样的地方是reg2的提交路径改成了/MyJspProject/Request5

主要改变代码及注释如下所示:

<form action="/MyJspProject/Request5" method="post">
	<!-- 建立表单 表单提交后跳转到/MyJspProject/Request5处。-->

接下来看Request5界面 此界面也是一个java界面除了框架其主要代码就是个转发程序。

主要代码及注释如下所示:

RequestDispatcher rd = request.getRequestDispatcher("/RegServlet");
		//跳转到/RegServlet位置
		rd.forward(request, response);

3.RequestLineServlet,验证reques对象的getMethod,getRequestURI、getHeader等方法。

这个java代码是介绍request的各种方法的。

主要代码及注释如下所示:

response.setContentType("text/html;charset=utf-8");
		//使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
				//此处是html类数据
		PrintWriter out = response.getWriter();
        // 获取请求行的相关信息
		out.println("getMethod : " + request.getMethod() + "<br>");
		//请求方式.
		out.println("getRequestURI : " + request.getRequestURI() + "<br>");
		//返回除去host(域名或者ip)部分的路径
		out.println("getQueryString : " + request.getQueryString() + "<br>");
		//字符串形式的附加到URL后面的查询字符串,数据仍旧是URL编码的
		out.println("getProtocol : " + request.getProtocol() + "<br>");
		//返回请求用的协议类型及版本号获取客户端向服务器端传送数据所依据的协议名称。
		out.println("getContextPath : " + request.getContextPath() + "<br>");
		//返回工程名部分,如果工程映射为/,此处返回则为空
		out.println("getPathInfo : " + request.getPathInfo() + "<br>");
		//返回与客户端发出此请求时发送的URL相关联的额外路径信息。
		out.println("getPathTranslated : " + request.getPathTranslated()+ "<br>");
		//映射到服务器实际路径之后的路径信息。
		out.println("getServletPath : " + request.getServletPath() + "<br>");
		// 返回除去host和工程名部分的路径
		
		out.println("-----------------------------------------------------<br>");
		
		Enumeration headerNames = request.getHeaderNames();// 获取请求消息中所有头字段
        // 使用循环遍历所有请求头,并通过getHeader()方法获取一个指定名称的头字段
		while (headerNames.hasMoreElements())  
			String headerName = (String) headerNames.nextElement();
			out.print(headerName + " : " + request.getHeader(headerName)+ "<br>");
		
		
		
	

此外拓展一波:

Object attribute = request.getAttribute("");//获得setAttribute的数据
        Enumeration<String> names = request.getAttributeNames();//返回所有属性名的枚举
        String authType = request.getAuthType();//返回用于保护servlet的验证方法名称
        String encoding = request.getCharacterEncoding();//返回字符编码方式
        Class<? extends HttpServletRequest> aClass = request.getClass();//返回一个类
        int contentLength = request.getContentLength();//返回请求体的长度,以字节数返回请求体的长度
        String contentType = request.getContentType();//得到请求体的mime类型
        String contextPath = request.getContextPath();//获取当前系统的路径,获得应用名称
        Cookie[] cookies = request.getCookies();//返回此次请求发送的cookie对象
        long dateHeader = request.getDateHeader("");//用于将指定头信息的部分转换成方便为转换时间类型的长整数型。
        String header = request.getHeader("");//获取客户端的浏览器类型
        Enumeration<String> headerNames = request.getHeaderNames();//返回请求头包含的所有头名称的枚举,
        Enumeration<String> headers = request.getHeaders("");//获取一个name的多个值序列,返回请求给出的指定类型的所有HTTP头标的名称的枚举值
        ServletInputStream inputStream = request.getInputStream();//得到请求体中一行二进制流
        int intHeader = request.getIntHeader("");//以int 的值返回指定请求头的值
        String ip = request.getLocalAddr();//接受请求的接口的 InternetProtocol (IP) 地址
        Locale locale = request.getLocale();//基于 Accept-Language 头,返回客户端将用来接受内容的首选 Locale(场所或地点) 客户端语言环境
        Enumeration<Locale> locales = request.getLocales();//所有的语言环境
        String IpName = request.getLocalName();//接收请求的 Internet Protocol(IP) 接口的主机名
        int localPort = request.getLocalPort();//接收请求的接口的 InternetProtocol (IP) 端口号
        String method = request.getMethod();//请求方式
        String parameter = request.getParameter("");//获得表单提交的数据
        Map<String, String[]> parameterMap = request.getParameterMap();//返回的类型是一个数组
        Enumeration<String> parameterNames = request.getParameterNames();//将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举
        String[] parameterValues = request.getParameterValues("");//将获取所有form表单中name属性为"name"的值.该方法返回一个数组.遍历数组就可得到value值
        String pathInfo = request.getPathInfo();//返回与客户端发出此请求时发送的URL相关联的额外路径信息。
        String pathTranslated = request.getPathTranslated();//映射到服务器实际路径之后的路径信息。
        String protocol = request.getProtocol();//返回请求用的协议类型及版本号获取客户端向服务器端传送数据所依据的协议名称。
        String queryString = request.getQueryString();//字符串形式的附加到URL后面的查询字符串,数据仍旧是URL编码的
        BufferedReader reader = request.getReader();//返回解码过了的请求体

        String realPath = request.getRealPath("");//返回一虚拟路径的真实路径
        String remoteAddr = request.getRemoteAddr();//返回发送此请求的客户端IP地址
        String remoteHost = request.getRemoteHost();//返回发送此请求的客户端主机名   获取客户端的名字
        int remotePort = request.getRemotePort();//发送请求的客户主机端口
        String remoteUser = request.getRemoteUser();//返回包含在请求RUL中路径后面的查询字符串。如果没有查询字符串返回null

        RequestDispatcher requestDispatcher = request.getRequestDispatcher("");//请求转发,获取请求过来的地址,与该地址共享一个Request
        String requestedSessionId = request.getRequestedSessionId();//返回客户端制定的回话ID
        String requestURI = request.getRequestURI();//请求的资源
        StringBuffer requestURL = request.getRequestURL();//获取URL,包含域名,不包含请求内容

        String scheme = request.getScheme();// 返回请求用的计划名,  返回当前链接使用的协议 如:http.https及ftp等
        String serverName = request.getServerName();//返回接受请求的服务器主机名获取服务器的名字。
        int serverPort = request.getServerPort();//返回服务器接受此请求所用的端口号
        String servletPath = request.getServletPath();//返回请求调用servlet的URL部分
        HttpSession session = request.getSession();//返回与此请求关联的当前HttpSession,如果没有当前会话并且参数为true,则返回一个新会话
        Principal userPrincipal = request.getUserPrincipal();// 返回包含当前已经过验证的用户的名称的java.security.Principal对象。如果用户没有经过验证,则该方法返回null

以上是关于request的代码解析的主要内容,如果未能解决你的问题,请参考以下文章

request的代码解析

Sping bean的作用域

SQL SERVER--单回话下的死锁

解析云代码 request.object.get(key) 总是返回 undefined

什么是回话控制

查看回话资源消耗情况