Web阶段:第十章:Servlet下

简介: Web阶段:第十章:Servlet下

HttpServletRequest类

a)HttpServletRequest类有什么作用。

HttpServletRequest类它的作用是。每次只要有请求进来 。Tomcat服务器就会把请求的协议内容封装到HttpServletRequest对象中。

我们主要是从Request类中获取请求的信息。它表示了请求的全部信息。

b)HttpServletRequest类的常用方法

getRequestURI() 获取请求请求资源地址

getRequestURL() 获取请求的绝对路径(又叫统一资源定位符)

getRemoteHost() 获取客户端的ip地址

localhost做为ip访问得到0:0:0:0:0:0:0:1

127.0.0.1 做为ip访问得到 127.0.0.1

getHeader() 获取请求头

getParameter() 获取请求的参数

getParameterValues() 获取请求参数(多个值)

getMethod() 获取请求的方式GET或POST

域对象

setAttribute(key, value); 保存数据

getAttribute(key); 获取数据

getRequestDispatcher() 获取请求转发对象

getCookies() 获取Cookie对象

getSession() 获取Session对象

reqeust常用API:

protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    // i.getRequestURI() 获取请求请求资源地址
    System.out.println(request.getRequestURI());
    // ii.getRequestURL() 获取请求的绝对路径
    System.out.println(request.getRequestURL());
    // iii.getRemoteHost() 获取客户端的ip地址
    System.out.println(request.getRemoteHost());
    // iv.getHeader() 获取请求头
    System.out.println(request.getHeader("User-Agent"));
    System.out.println(request.getHeader("Host"));
    // vii.getMethod() 获取请求的方式GET或POST
    System.out.println(request.getMethod());
}

c)如何获取请求参数(重要)

页面的表单:

    <body>
        <form action="http://localhost:8080/day07/parameterServlet" method="get">
          用户名:<input type="text" name="username" /><br/>
          密码:<input type="password" name="password" /><br/>
          兴趣爱好:
            <input type="checkbox" name="hobby" value="cpp">C++
            <input type="checkbox" name="hobby" value="C">C
            <input type="checkbox" name="hobby" value="VB">Visual Basic
            <input type="checkbox" name="hobby" value="js">JavaScript
            <br/>
            <input type="submit" />       
        </form>
    </body>

Servlet程序的代码:

    public class ParameterServlet extends HttpServlet {
      private static final long serialVersionUID = 1L;
      protected void doGet(HttpServletRequest request,
          HttpServletResponse response) throws ServletException, IOException {
        // 获取请求参数,用户名信息
        String username = request.getParameter("username");
        // 获取请求参数,密码信息
        String password = request.getParameter("password");
        // 获取兴趣爱好
        String[] hobbies = request.getParameterValues("hobby");
        System.out.println("用户名:" + username);
        System.out.println("密码:" + password);
        // Arrays.asList 把数组转换对应的List集合
        if (hobbies != null) {
          System.out.println("兴趣爱好:" + Arrays.asList(hobbies));
        }
      }
    }

d)GET请求的中文乱码解决

第一种方案:

1、先把收到的请求参数以iso-8859-1进行编码

2、再以UTF-8进行解码

// 获取请求参数,用户名信息
    String username = request.getParameter("username");   
//    1、先把收到的请求参数以iso-8859-1进行编码
    byte[] bytes = username.getBytes("iso-8859-1");
//    2、再以UTF-8进行解码
  username= new String(bytes, "UTF-8");

第二种方案:

找到Tomcat服务器的配置文件server.xml配置文件,找到Connector标签,添加URIEncoding=“UTF-8”

 <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

e)POST请求的中文乱码解决

第一种方案(不推荐使用):

//    1、先把收到的请求参数以iso-8859-1进行编码
    byte[] bytes = username.getBytes("iso-8859-1");
//    2、再以UTF-8进行解码
    username= new String(bytes, "UTF-8");

第二种方案(推荐使用):

// 解决post中文乱码终极方案
// 一定要在调用getParameter方法之前才有效
request.setCharacterEncoding("UTF-8");

f)请求的转发(在jsp的时候使用)

g)Base标签的作用

h)Web中的相对路径和绝对路径

相对路径:

./ 当前目录

…/ 上一级目录

资源名 相当于./资源名 ./可以省略

绝对路径:

http://ip:port/工程名/资源名

在实际项目开发中,不允许简单的使用相对路径!!!

实际项目开发中,只能使用绝对路径 或 base+相对

i)web中/斜杠的不同意义

斜杠/ 就是表示一个绝对路径。

/ 在html页面上,被浏览器解析得到是:http://ip:prot/

/ 在服务器代码上。表示: http://ip:port/工程名/

在web.xml中配置url-pattern /hello ====>>>> http://ip:port/工程名/hello

请求转发request.getRequestDispatcher("/a/b/c.html") 表示http://ip:port/工程名/a/b/c.html

servletContext.getRealPath(“/”); =====>>>>>> 表示到http://ip:prot/工程名/

服务器代码中的特殊情况:

response.sendRedirect(“/”); =====>>>> 表示到端口号http://ip:prot/

6.HttpServletResponse类

a)HttpServletResponse类的作用

httpServletResponse类,表示响应。所有响应的http协议都可以通过HttpServletResponse类去进行设置。

每次请求进来都会创建一个Request对象,也会创建一个Response对象。Tomcat服务器负责创建。

b)两个输出流的说明。

响应有两种流,一种是字符流,一种是字节流。

response.getOutputStream() 字节流 文件下载使用

response.getWriter() 字符流 回传字符串信息(使用频率最高)

你使用了字节流,就不能使用字符流,

你使用字符流,就不能使用字节流。

两个流同时使用就会出现如下异常:

c)如何往客户端回传数据

 protected void doGet(HttpServletRequest request,
          HttpServletResponse response) throws ServletException, IOException {
        // 往客户端回传字符串数据
        // 1、先获取字符流
        PrintWriter writer = response.getWriter();
        // 2、调用字符流的write方法输出字符串
        writer.write("this is the content of response!!!");
    }

d)响应的乱码解决

第一种方案(不推荐使用):

// 设置响应的字符集为UTF-8,设置了服务器支持中文输出
    response.setCharacterEncoding("UTF-8");
    // ISO-8859-1 是默认的字符集,它不支持中文
    System.out.println( response.getCharacterEncoding() );
    // 设置响应头,Content-Type,
    // text/html; 表示返回的是html内容。
    // charset=UTF-8  告诉客户端使用UTF-8字符集查看 
  response.setHeader("Content-Type", "text/html; charset=UTF-8");

第二种方案是(推荐使用):

 // 同时设置服务器和客户端都使用UTF-8字符集,
    // 并且还设置了响应头
    // 必须在获取流对象之前调用
  response.setContentType("text/html; charset=UTF-8");

e)如何设置响应头和响应状态码

protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    System.out.println("请求进来 了,这是Response1");
    // 设置响应状态码302
    response.setStatus(302);
    // 设置响应头
    response.setHeader("Location", "http://localhost:8080/day07/response2");
}

f)请求重定向

//也是请求重定向(推荐)
  response.sendRedirect("http://localhost:8080/day07/response2");

请求重定向的特点:

请求转发和重定向的对比

相关文章
|
2月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
25 1
|
2月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
18 0
|
2月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
30 0
|
4月前
|
自然语言处理 前端开发 Java
Servlet与JSP:Java Web开发的基石技术详解
【6月更文挑战第23天】Java Web的Servlet与JSP是动态网页的核心。Servlet是服务器端的Java应用,处理HTTP请求并响应;JSP则是结合HTML与Java代码的页面,用于动态内容生成。Servlet通过生命周期方法如`init()`、`service()`和`destroy()`工作,而JSP在执行时编译成Servlet。两者在MVC架构中分工,Servlet处理逻辑,JSP展示数据。尽管有Spring MVC等框架,Servlet和JSP仍是理解Web开发基础的关键。
87 12
|
4月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
84 10
|
4月前
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
60 7
|
4月前
|
搜索推荐 Java 数据库连接
探索Java Web开发:Servlet与JSP的协同工作原理
【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
50 7
|
5月前
|
存储 缓存 前端开发
14:Servlet中的页面跳转-Java Web
14:Servlet中的页面跳转-Java Web
135 6
|
5月前
|
缓存 前端开发 Java
15:Servlet 3.0文件上传与下载-Java Web
15:Servlet 3.0文件上传与下载-Java Web
137 5
|
5月前
|
SQL Java 数据库连接
17:数据库连接池与Servlet整合-Java Web
17:数据库连接池与Servlet整合-Java Web
103 3
下一篇
无影云桌面