JavaServerPages 学习
环境搭建
打开 idea,创建一个新项目
1
2
3
4
5
|
选择 “Maven”
jdk1.8
组件选择:
org.apache.maven.archetypes 下的 maven-archetype-webapp
|
项目创建后等待资源加载,第一次时间较久
出现下图表示加载成功
配置编译路径和 artifact
快捷键 ctrl+alt+shift+s
配置 tomcat 服务器
到 http://tomcat.apache.org 下载对应的版本
在 web 项目中导入 tomcat,点击 idea 右上角的 add configuration
选择 other–tomcatserver–local
配置端口,这里避免端口冲突换成 8081,上下保持一致即可
导入 tomcat 包
fix 添加 war
最终效果
无报错启动成功
访问 http://127.0.0.1:8081/maventest/index.jsp
JSP Servlet 实例
- 作用:Servlet 定义是容器端小程序,用于直接处理后端业务逻辑
选择 webapp 右键标记为源根
在 webapp
下创建一个 com
文件夹,在 com
文件夹下创建一个 serlvet
文件夹
src->main->webapp->com->Servlet
在 serlvet 文件夹下新建 HelloServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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 为如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?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>
|
点击运行报错
选择库,点击添加 servlet-api.jar
通过注解访问文件
通过 web.xml 访问文件
JSP Filter 实例
- Filter 也叫过滤器,通常配置在 MVC、Servlet 和 JSP 请求前面,常用于后端权限控制
通过注解配置映射关系,直接在 GlobalFilter.java 完成配置这样就无需在 web.xml 配置映射了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
参数: 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
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 方法被执行
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 响应头中的日期,加入对应名称的日期头信息注:遇到同名,依然会进行新增操作 |
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)