前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习-JavaServerPages

Java学习-JavaServerPages

作者头像
hyyrent
发布2022-12-26 20:35:41
3050
发布2022-12-26 20:35:41
举报

JavaServerPages学习

环境搭建

打开idea,创建一个新项目

选择 “Maven” 
jdk1.8

组件选择:
org.apache.maven.archetypes 下的 maven-archetype-webapp
image-20221024092133722
image-20221024092133722
image-20221024092446573
image-20221024092446573

项目创建后等待资源加载,第一次时间较久

image-20221024092704609
image-20221024092704609

出现下图表示加载成功

image-20221024093336477
image-20221024093336477

配置编译路径和artifact

快捷键 ctrl+alt+shift+s

image-20221024093649725
image-20221024093649725
image-20221024093729517
image-20221024093729517

配置tomcat服务器

http://tomcat.apache.org 下载对应的版本

在web项目中导入tomcat,点击 idea 右上角的 add configuration

选择 other–tomcatserver–local

image-20221024094058449
image-20221024094058449

配置端口,这里避免端口冲突换成8081,上下保持一致即可

image-20221024094223534
image-20221024094223534

导入tomcat包

image-20221024094341176
image-20221024094341176

fix 添加 war

image-20221024094558974
image-20221024094558974
image-20221024094632134
image-20221024094632134

最终效果

image-20221024094718837
image-20221024094718837

无报错启动成功

访问 http://127.0.0.1:8081/maventest/index.jsp

image-20221024101414367
image-20221024101414367

JSP Servlet实例

  • 作用:Servlet定义是容器端小程序,用于直接处理后端业务逻辑

选择 webapp 右键标记为源根

image-20221024102044136
image-20221024102044136

webapp 下创建一个 com 文件夹,在 com 文件夹下创建一个 serlvet 文件夹

src->main->webapp->com->Servlet

在serlvet文件夹下新建 HelloServlet.java

package com.Servlet;

import java.io.IOException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet实现类HelloServlet
 * 注册一个注解,这样方便我们不通过 web.xml 也可以在web中访问该类
 */
@WebServlet("/HelloServlet")
public class HelloServlet extends HttpServlet {
    public HelloServlet() {
        super();
    }

    /**
     * @param request
     * @param response
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 使用 GBK 设置中文正常显示
        response.setCharacterEncoding("GBK");
        response.getWriter().write("HelloServlet类GET方法被调用");
    }

    /**
     * @param request
     * @param response
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 使用 GBK 设置中文正常显示
        response.setCharacterEncoding("GBK");
        response.getWriter().write("HelloServlet类POST方法被调用");
    }
}

修改 WEB-INF目录下的 web.xml 为如下内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
  <!-- 类名 -->
  <servlet-name>HelloServlet</servlet-name>
  <!-- 所在的包路径 -->
  <servlet-class>com.Servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
  <!-- 与 <servlet> 标签里面的 <servlet-name> 字段保持一致 -->
  <servlet-name>HelloServlet</servlet-name>
  <!-- web访问的网址 -->
  <url-pattern>/TomcatTest/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>

点击运行报错

image-20221024105721661
image-20221024105721661

选择库,点击添加 servlet-api.jar

image-20221024110018742
image-20221024110018742

通过注解访问文件

image-20221024114301962
image-20221024114301962

通过web.xml访问文件

image-20221024114358957
image-20221024114358957

JSP Filter实例

  • Filter也叫过滤器,通常配置在MVC、Servlet和JSP请求前面,常用于后端权限控制

通过注解配置映射关系,直接在GlobalFilter.java完成配置这样就无需在web.xml配置映射了

参数: urlPatterns
作用: 配置要拦截的资源
	以指定资源匹配,例如:"/hello.jsp"
	以目录匹配,例如:"/Servlet/*"
	以后缀名匹配,例如:"*.jsp"
	通配符,拦截所有web资源,例如:"/*"
	
参数: initParams
作用: 配置初始化参数

参数: dispatcherTypes
作用: 配置拦截的类型,可配置多个
默认为DispatcherType.REQUEST

其中DispatcherType是个枚举类型,有下面几个值
FORWARD //转发的
INCLUDE //包含在页面的
REQUEST //请求的
ASYNC //异步的
ERROR //出错的

webapp 下创建一个 com 文件夹,在 com 文件夹下创建一个 filter 文件夹

src->main->webapp->com->filter

在serlvet文件夹下新建 GlobalFilter.java

package com.Filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;

@WebFilter(
        filterName = "/GlobalFilter",
        urlPatterns = "/*",
        initParams = {
                @WebInitParam(name = "origin", value = "@WebFilter"),
                @WebInitParam(name = "testName", value = "testValue")
        },
        dispatcherTypes = {
                DispatcherType.REQUEST,
                DispatcherType.INCLUDE,
                DispatcherType.FORWARD,
                DispatcherType.ERROR,
                DispatcherType.ASYNC})
public class GlobalFilter implements Filter {
    /**
     * web 应用程序启动时
     * web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能
     * 从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)
     * 开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象
     *
     * @param config
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig config) throws ServletException {
        // 获取初始化参数
        String origin = config.getInitParameter("origin");
        String testName = config.getInitParameter("testName");
        // 输出初始化参数
        System.out.println("GlobalFilter类起源: " + origin);
        System.out.println("GlobalFilter类testName值: " + testName);
    }

    /**
     * 该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法
     *
     * @param request  当前请求
     * @param response 当前响应
     * @param chain    用于访问后续过滤器
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 输出站点名称
        response.setCharacterEncoding("GBK");
        response.getWriter().println("我是全局过滤器: GlobalFilter类");

        // 允许访问目标资源,简称 放行
        chain.doFilter(request, response);
    }

    /**
     * Filter容器在销毁过滤器实例前调用该方法
     */
    @Override
    public void destroy() {
        System.out.println("GlobalFilter类,被摧毁了");
    }
}

访问任意资源文件,过滤器的doFilter方法被执行

image-20221024142714373
image-20221024142714373

HttpServletRequest常用方法

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法就可以获取到客户端请求的所有信息

方法

说明

getParameterNames()

获取所有的参数名

getParameter(String name)

通过参数名获取对应的值,如果有重复的名,则返回第一个的值

getParameterValues(String name)

通过参数名获取指定参数的所有值,返回为String数组

getMethod()

获取请求发送的方式,例如:GET/POST

getQueryString()

获取请求的URL地址中附带的参数

getRequestURL()

获取请求的资源

getRequestURL().toString()

获取请求的URL地址

getRequestURI()

获取发出请求字符串的客户端地址

getContextPath()

返回项目的名字,如果项目为根目录,也就是“/”,则返回空

getServletPath()

返回客户端所请求的脚本文件的文件路径

getPathInfo()

返回传递到Servlet的路径,如果没有传递额外的路径信息,则返回NULL

getRemoteAddr()

获取客户端的IP地址

getRemoteHost()

获取客户端的名字

getRemotePort()

获取客户端使用的网络端口号

getRemoteUser()

获取发出请求的客户机的完整主机名

getLocalAddr()

获取WEB服务器的IP地址

getLocalName()

获取WEB服务器的主机名

setAttribute(String name,Object)

将数据作为request对象的一个属性存放到request对象中

getAttributeNames()

获取request对象的所有属性名返回为Enumeration

getAttribute(String name)

获取request对象的name属性的值

removeAttribute(String name)

移除request对象的name属性

getCookies()

获取客户端的所有Cookie对象返回为Cookie数组

getSession()

获取Session会话对象

getHeaderNames()

获取所有request Header的属性名返回为Enumeration

getHeader(String name)

获取指定名字的request Header的所有值

getHeaders(String name)

获取指定名字的request Header的所有值返回为Enumeration

getContentLength()

获取请求的Body的长度

getCharacterEncoding()

获取请求中的字符编码方式

HttpServletResponse常用方法

HttpServletResponse对象用于响应客户端的请求,通过这个对象提供的方法就可以处理服务端对客户端请求响应

方法

说明

setContentType(String var1)

设置当前响应的MIME类型

setCharacterEncoding(String var1)

设置当前响应的字符编码

getWriter()

获取响应打印流对象

getOutputStream()

获取响应流对象

addCookie(Cookie var1)

添加指定的Cookie加入到当前响应中注:遇到同名,依然会进行新增操作

addHeader(String name, String value)

添加指定的名称与值到响应的header头信息中注:遇到同名,依然会进行新增操作

setHeader(String var1, String var2)

设置指定的名称与值到响应的header头信息中注:遇到同名,会进行修改操作

sendError(int var1, String var2)

使用指定状态码与内容发送一个错误到客户端

sendRedirect(String var1)

请求重定向例如:responst.sendRedirect(“index.jsp”);例如:responst.sendRedirect(“http://baidu.com");

setStatus(int var1)

设置状态码,例如:302重定向 304控制缓存

addDateHeader(String var1, long var2)

添加HTTP响应头中的日期,加入对应名称的日期头信息注:遇到同名,依然会进行新增操作

setDateHeader(String var1, long var2)

设置HTTP响应头中的日期,加入对应名称的日期头信息注:遇到同名,依然会进行新增操作

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JavaServerPages学习
    • 环境搭建
      • 配置编译路径和artifact
        • 配置tomcat服务器
          • JSP Servlet实例
            • JSP Filter实例
              • HttpServletRequest常用方法
                • HttpServletResponse常用方法
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档