Servlet_JSP详解

本文详细介绍了Servlet和JSP的基础知识,包括Servlet的运行流程、配置、doGet/doPost方法的区别、Request与Response对象的使用、重定向与转发的区别,以及Session和Cookie的管理。此外,还探讨了JSP的运行原理、JSP页面组成、生命周期以及与Servlet的关系。内容覆盖了Web开发中的核心概念和技术,旨在帮助读者深入理解Servlet和JSP的使用和工作方式。
摘要由CSDN通过智能技术生成

Servlet

img

1. Servlet运行流程:

  1. url:http://localhost:8080/Servlet_Test_login/loginServlet

    组成:服务器地址:端口号/虚拟项目名/servlet的别名

  2. uri:虚拟项目名/servlet别名

浏览器发送请求到服务器,服务器根据请求的URL地址中的URI信息在webapps目录下找到对应的项目文件,然后再web.xml中检索对应的servlet,找到后调用并执行servlet。

2. Servlet配置:

  1. 通过web.xml 配置

  2. 通过注解配置

    @WebServlet("/loginServlet")
    

loginServlet 即为此servlet的别名,通过

http://localhost:8080/Servlet_Test_login/loginServlet 即可访问。

3. doGet/doPost的区别与使用:

  1. 区别:

    在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get。可在中的method属性中指定提交的方式。如:,如果不指定method属性,则会默认该属性为”get”方式。

    不同点一:

    通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。

    不同点二:

    通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。

    不同点三:

    通过Get方式提交的数据安全性不高,而Post方式的更加安全。

  2. 使用:

    h5:

    <body>
        <form action="/loginServlet" method="post">
            用户名:<input type="text" name="username"> <br>
            密码:<input type="password" name="password"><br>
            <input type="submit" value="登录">
        </form>
    </body>
    

    Servlet:

    @Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         
    		// TODO Auto-generated method stub
    		request.setCharacterEncoding("UTF-8");
    		response.setCharacterEncoding("UTF-8");
    		//向服务器发送请求获取到参数
    		String username=request.getParameter("username");
    		String password=request.getParameter("password");
    		System.out.println(username+"--"+password);
    		
    
    		response.setHeader("Content-Type", "text/html; charset=UTF-8");
    		Writer out=response.getWriter();
    		out.write("用户名:"+username);
    		out.write("密码:"+password);
    		out.flush();
    		out.close();
    

4. Request

1.概述

request是Servlet.service()方法的一个参数,在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request中,然后在调用Servlet.service()方法时传递给service()方法

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。

2.常用方法

(1) 域方法:
  1. 存储
//用来存储一个对象,也可以称之为存储一个域属性
void setAttribute(String name, Object value)
    
Eg:servletContext.setAttribute(“xxx”, “XXX”)
//在ServletContext中保存了一个域属性,域属性名称为xxx,域属性的值为XXX
  1. 获取
//用来获取ServletContext中的数据
Object getAttribute(String name)
//获取名为xx的域属性
Eg:String value = (String)servletContext.getAttribute(“xxx”);

//获取所有域属性的名称;
Enumeration getAttributeNames()
  1. 移除
//用来移除ServletContext中的域属性
void removeAttribute(String name)
(2) 获取请求头数据:
//获取指定名称的请求头
String getHeader(String name)

//获取所有请求头名称
Enumeration getHeaderNames()
    
//获取值为int类型的请求头
int getIntHeader(String name)
(3) 获取请求相关的其他方法
//获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
int getContentLength()

/*	
	获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认
	为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
*/
String getContentType()

//返回请求方法,例如:GET/POST
String getMethod()

//返回当前客户端浏览器的Locale。java.util.Locale表示国家和言语,这个东西在国际化中很有用;
Locale getLocale()
    
/*
	获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用
	ISO-8859-1编码;
*/
String getCharacterEncoding()
    
/*
	设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法
	只能对POST请求中的参数有效!
*/
void setCharacterEncoding(String code)

//返回上下文路径,例如:/Dmoe1
String getContextPath()
    
//返回请求URL中的参数,例如:username=zhangSan
String getQueryString()
    
//返回请求URI路径,例如:/Demo1/ServletDemo1
String getRequestURI()
    
/*
	返回请求URL路径,例如:http://localhost/Demo1/ServletDemo1即返回除了参数
	以外的路径信息;
*/
StringBuffer getRequestURL()
    
//返回Servlet路径,例如:/ServletDemo1
String getServletPath()
    
//返回当前客户端的IP地址
String getRemoteAddr()
    
//返回当前客户端的主机名,但这个方法的实现还是获取IP地址
String getRemoteHost()
    
//返回请求协议,例如:http
String getScheme()

//返回主机名,例如:localhost
String getServerName()
    
//返回服务器端口号,例如:8080
int getServerPort()

3)常用方法总结:

  1. 与Http请求相关:
    • getReader():返回一个缓冲读取器,用于读取请求正文中的文本。
    • getContentType() :返回请求正文的MIME类型,或者 null类型是否已知。
    • getContentLength() :返回请求正文的长度(以字节为单位),并由输入流提供,如果长度未知,则返回-1。
    • getCharacterEncoding() :返回此请求正文中使用的字符编码的名称。
    • setCharacterEncoding(java.lang.String env)设置此请求正文中使用的字符编码的名称。
    • setAttribute(String,Object):此方法将属性存储在请求上下文中; 这些属性将在请求之间重置。
    • getProtocol():以protocol / majorVersion.minorVersion格式返回请求使用的协议的名称和版本,例如HTTP / 1.1。
    • getScheme() :返回请求方式,例如 http,https或ftp。
  2. 请求客户端相关:
    • getServerPort(): 返回发送请求的端口号。
    • getRemoteAddr(): 返回发送请求的客户端或最后一个代理的Internet协议(IP)地址。
    • getRemoteHost() :返回客户端的完全限定名称或发送请求的最后一个代理。
    • getServerName(): 返回发送请求的服务器的主机名。
  3. 与request属性相关:
    • setAttribute(java.lang.String name, java.lang.Object o)在此请求中存储属性。 如果第二参数为null 那么相当于removeAttribute
    • getAttributeNames():Returns an Enumeration containing the names of the attributes available to this request.
    • removeAttribute(java.lang.String name):从此请求中删除属性。
    • getParameter(java.lang.String name):以String形式返回请求参数的值,如果参数不存在,则返回null。
    • getParameterMap():返回此请求的参数的java.util.Map。
    • getParameterValues(java.lang.String name):返回包含给定请求参数所具有的所有值的String对象数组,如果参数不存在,则返回null。

4.request获取请求参数

获取请求参数的通用方式(Get/Post均可)
//根据参数名称获取参数值
String getParameter
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值