Jakarta ee 如何从WEB-INF加载图像?

Jakarta ee 如何从WEB-INF加载图像?,jakarta-ee,servlets,servlet-filters,servlet-3.0,web-inf,Jakarta Ee,Servlets,Servlet Filters,Servlet 3.0,Web Inf,只要图像在web中,这就可以正常工作;当图像位于WEB-INF中时,如何加载图像 NetBeansProjects/WebApplication/ ├── build.xml ├── nbproject │   ├── ant-deploy.xml │   ├── build-impl.xml │   ├── genfiles.properties │   ├── private │   ├── project.properties │   └── project.xml ├── README.

只要图像在
web
中,这就可以正常工作;当图像位于
WEB-INF
中时,如何加载图像

NetBeansProjects/WebApplication/
├── build.xml
├── nbproject
│   ├── ant-deploy.xml
│   ├── build-impl.xml
│   ├── genfiles.properties
│   ├── private
│   ├── project.properties
│   └── project.xml
├── README.md
├── src
│   ├── conf
│   └── java
└── web
    ├── duke.gif
    ├── index.html
    └── WEB-INF

7 directories, 9 files
html:


登录
我叫苏菲尔,bjfdkl34363fjsl,你叫什么?
登录:

jsp:


登录
我的名字是${requestScope.controller.myName},${requestScope.controller.myId},你的名字是什么?
登录:

${sessionScope.authorization.greeting}
过滤器:

package net.bounceme.dur.webapp.filter;

import net.bounceme.dur.webapp.tokens.AuthenticationToken;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@WebFilter(
        filterName = "authenticationFilter",
        description = "authentication",
        urlPatterns = "/*",
        initParams = {
            @WebInitParam(name = "1", value = "bart"),
            @WebInitParam(name = "2", value = "homer")})

public class AuthenticationFilter implements Filter {

    private static final Logger log = Logger.getLogger(AuthenticationFilter.class.getName());
    private FilterConfig filterConfig = null;
    private final Map<String, String> mapOfUsers = new HashMap<>();
    private final AuthenticationToken token = new AuthenticationToken();
    private final String className = AuthenticationFilter.class.getName();
    private Map<String, String> parameters = new HashMap<>();
    private Map<String, String> users = new HashMap<>();
    private boolean auth = false;
    private String contextPath;

    public AuthenticationFilter() {
    }

    private void doBeforeProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException {
        log.fine("do before processing..");  //init?
    }

    private void doAfterProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException {
        log.fine("do after processing");  //add image here?
    }

    private void initFilterParams() {
        log.info(className + "\tinitFilterParams..");
        Enumeration parameterNames = filterConfig.getInitParameterNames();
        users = new HashMap<>();  //?
        String name = null;
        String val = null;
        while (parameterNames.hasMoreElements()) {
            name = parameterNames.nextElement().toString();
            val = filterConfig.getInitParameter(name);
            users.put(name, val);
        }
        log.info(className + "\n" + users);
        log.info(className + "\t..initFilterParams");
    }

    private void initParams(HttpServletRequest request) {
        log.info(className + "\tinitParams..");
        parameters = new HashMap<>();  //?
        Enumeration<String> params = request.getParameterNames();
        String name = null;
        String val = null;
        while (params.hasMoreElements()) {
            name = params.nextElement();
            val = request.getParameter(name);
            parameters.put(name, val);
        }
        log.info(className + "\n" + parameters);
        log.info(className + "\t..initParams");
    }

    private void setToken(HttpServletRequest request) {
        initParams(request);
        String login = null;
        if (parameters.containsKey("login")) {
            login = parameters.get("login").toLowerCase();
            token.setLogin(login);
            if (users.containsValue(login)) {
                auth = true;
                token.setGreeting("welcome " + login + " you've been authorized.");
            } else {
                auth = false;
                token.setGreeting("welcome " + login);
            }
        } else {
            auth = false;
        }
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.setAttribute("authorization", token);
        }
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info(className + "do filter..");
        setToken((HttpServletRequest) request);
        chain.doFilter(request, response);
        log.info(className + "..do filter");
    }

    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) {
        log.info(className + "\tinit..");
        this.filterConfig = filterConfig;
        if (filterConfig != null) {
            log.fine("SessionCheckFilter:Initializing filter");
        } else {
            log.warning("null filterConfig");
        }
        String context = filterConfig.getServletContext().getServletContextName();
        String path = filterConfig.getServletContext().getContextPath();
        contextPath = "http://localhost:8080" + context + path;
        String duke = contextPath + "/duke.gif";
        token.setDuke(duke);
        initFilterParams();
        log.info(token.toString());
        log.info(className + "\t..init");
    }

    @Override
    public String toString() {
        return token.toString();
    }

    private void sendProcessingError(Throwable t, ServletResponse response) {
        log.fine("send processing error");
        String stackTrace = getStackTrace(t);

        if (stackTrace != null && !stackTrace.equals("")) {
            try {
                response.setContentType("text/html");
                try (PrintStream ps = new PrintStream(response.getOutputStream()); PrintWriter pw = new PrintWriter(ps)) {
                    pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N
                    pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
                    pw.print(stackTrace);
                    pw.print("</pre></body>\n</html>"); //NOI18N
                }
                response.getOutputStream().close();
            } catch (Exception ex) {
            }
        } else {
            try {
                try (PrintStream ps = new PrintStream(response.getOutputStream())) {
                    t.printStackTrace(ps);
                }
                response.getOutputStream().close();
            } catch (Exception ex) {
            }
        }
    }

    public static String getStackTrace(Throwable t) {
        String stackTrace = null;
        try {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            t.printStackTrace(pw);
            pw.close();
            sw.close();
            stackTrace = sw.getBuffer().toString();
        } catch (Exception ex) {
        }
        log.warning(stackTrace);
        return stackTrace;
    }

}
package net.bounceme.dur.webapp.filter;
导入net.bounceme.dur.webapp.tokens.AuthenticationToken;
导入java.io.IOException;
导入java.io.PrintStream;
导入java.io.PrintWriter;
导入java.io.StringWriter;
导入java.util.Enumeration;
导入java.util.HashMap;
导入java.util.Map;
导入java.util.logging.Logger;
导入javax.servlet.Filter;
导入javax.servlet.FilterChain;
导入javax.servlet.FilterConfig;
导入javax.servlet.ServletException;
导入javax.servlet.ServletRequest;
导入javax.servlet.ServletResponse;
导入javax.servlet.annotation.WebFilter;
导入javax.servlet.annotation.WebInitParam;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpSession;
@网络过滤器(
filterName=“authenticationFilter”,
description=“身份验证”,
urlPatterns=“/*”,
initParams={
@WebInitParam(name=“1”,value=“bart”),
@WebInitParam(name=“2”,value=“homer”)})
公共类AuthenticationFilter实现筛选器{
私有静态最终记录器log=Logger.getLogger(AuthenticationFilter.class.getName());
private FilterConfig FilterConfig=null;
private final Map mapOfUsers=新HashMap();
private final AuthenticationToken token=新的AuthenticationToken();
私有最终字符串className=AuthenticationFilter.class.getName();
私有映射参数=new HashMap();
私有映射用户=新HashMap();
私有布尔auth=false;
私有字符串上下文路径;
公共身份验证筛选器(){
}
私有void doBeforeProcessing(ServletRequest请求、ServletResponse响应)抛出IOException、ServletException{
log.fine(“处理前执行…”;//初始化?
}
私有void doAfterProcessing(ServletRequest请求、ServletResponse响应)引发IOException、ServletException{
log.fine(“处理后执行”);//是否在此处添加图像?
}
私有void initFilterParams(){
log.info(className+“\tinitFilterParams..”;
枚举parameterNames=filterConfig.getInitParameterNames();
users=新HashMap();/?
字符串名称=null;
字符串val=null;
while(parameterNames.hasMoreElements()){
name=parameterNames.nextElement().toString();
val=filterConfig.getInitParameter(名称);
users.put(名称,val);
}
log.info(className+“\n”+用户);
log.info(className+“\t..initFilterParams”);
}
私有void initParams(HttpServletRequest请求){
log.info(className+“\t图片..”);
参数=新HashMap();/?
枚举参数=request.getParameterNames();
字符串名称=null;
字符串val=null;
while(params.hasMoreElements()){
name=params.nextElement();
val=request.getParameter(名称);
参数.put(名称,val);
}
log.info(className+“\n”+参数);
log.info(className+“\t..initParams”);
}
私有void setToken(HttpServletRequest请求){
initParams(请求);
字符串login=null;
if(parameters.containsKey(“登录”)){
login=parameters.get(“login”).toLowerCase();
token.setLogin(login);
if(users.containsValue(登录)){
auth=true;
setGreeting(“欢迎”+登录+“您已被授权”);
}否则{
auth=false;
token.setGreeting(“欢迎”+登录);
}
}否则{
auth=false;
}
HttpSession session=request.getSession(false);
if(会话!=null){
session.setAttribute(“授权”,令牌);
}
}
@凌驾
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException、ServletException{
log.info(className+“do filter..”);
setToken((HttpServletRequest)请求);
链式过滤器(请求、响应);
log.info(className+“.do过滤器”);
}
公共筛选器配置getFilterConfig(){
返回(this.filterConfig);
}
public void setFilterConfig(FilterConfig FilterConfig){
this.filterConfig=filterConfig;
}
@凌驾
公共空间销毁(){
}
@凌驾
public void init(FilterConfig FilterConfig){
log.info(className+“\tinit..”;
this.filterConfig=filterConfig;
if(filterConfig!=null){
log.fine(“SessionCheckFilter:initializefilter”);
}否则{
日志警告(“空过滤器配置”);
}
字符串上下文=filterConfig.getServletContext().getServletContextName();
字符串路径=filterConfig.getServletContext().getContextPath();
上下文路径=”http://localhost:8080“+上下文+路径;
字符串duke=contextPath+“/duke.gif”;
代币。塞杜克(杜克);
initFilterParams();
log.info(token.toString());
log.info(className+“\t..init”);
}
@凌驾
公共字符串toString(){
返回token.toString();
}
private void sendProcessingError(Throwable t,ServletResponse响应){
对数鳍
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>login</title>
    </head>
    <body>
        <img src="${sessionScope.authorization.duke}"> 
        my name is ${requestScope.controller.myName}, ${requestScope.controller.myId}, what's yours?
        <form name="user_name_form" action="controller" method="POST">
            login: <input type="text" name="login" value="" size='20' />
            <p>
                <input type="submit">
            </p>
        </form>
        ${sessionScope.authorization.greeting}
    </body>
</html>
package net.bounceme.dur.webapp.filter;

import net.bounceme.dur.webapp.tokens.AuthenticationToken;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

@WebFilter(
        filterName = "authenticationFilter",
        description = "authentication",
        urlPatterns = "/*",
        initParams = {
            @WebInitParam(name = "1", value = "bart"),
            @WebInitParam(name = "2", value = "homer")})

public class AuthenticationFilter implements Filter {

    private static final Logger log = Logger.getLogger(AuthenticationFilter.class.getName());
    private FilterConfig filterConfig = null;
    private final Map<String, String> mapOfUsers = new HashMap<>();
    private final AuthenticationToken token = new AuthenticationToken();
    private final String className = AuthenticationFilter.class.getName();
    private Map<String, String> parameters = new HashMap<>();
    private Map<String, String> users = new HashMap<>();
    private boolean auth = false;
    private String contextPath;

    public AuthenticationFilter() {
    }

    private void doBeforeProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException {
        log.fine("do before processing..");  //init?
    }

    private void doAfterProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException {
        log.fine("do after processing");  //add image here?
    }

    private void initFilterParams() {
        log.info(className + "\tinitFilterParams..");
        Enumeration parameterNames = filterConfig.getInitParameterNames();
        users = new HashMap<>();  //?
        String name = null;
        String val = null;
        while (parameterNames.hasMoreElements()) {
            name = parameterNames.nextElement().toString();
            val = filterConfig.getInitParameter(name);
            users.put(name, val);
        }
        log.info(className + "\n" + users);
        log.info(className + "\t..initFilterParams");
    }

    private void initParams(HttpServletRequest request) {
        log.info(className + "\tinitParams..");
        parameters = new HashMap<>();  //?
        Enumeration<String> params = request.getParameterNames();
        String name = null;
        String val = null;
        while (params.hasMoreElements()) {
            name = params.nextElement();
            val = request.getParameter(name);
            parameters.put(name, val);
        }
        log.info(className + "\n" + parameters);
        log.info(className + "\t..initParams");
    }

    private void setToken(HttpServletRequest request) {
        initParams(request);
        String login = null;
        if (parameters.containsKey("login")) {
            login = parameters.get("login").toLowerCase();
            token.setLogin(login);
            if (users.containsValue(login)) {
                auth = true;
                token.setGreeting("welcome " + login + " you've been authorized.");
            } else {
                auth = false;
                token.setGreeting("welcome " + login);
            }
        } else {
            auth = false;
        }
        HttpSession session = request.getSession(false);
        if (session != null) {
            session.setAttribute("authorization", token);
        }
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info(className + "do filter..");
        setToken((HttpServletRequest) request);
        chain.doFilter(request, response);
        log.info(className + "..do filter");
    }

    public FilterConfig getFilterConfig() {
        return (this.filterConfig);
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig filterConfig) {
        log.info(className + "\tinit..");
        this.filterConfig = filterConfig;
        if (filterConfig != null) {
            log.fine("SessionCheckFilter:Initializing filter");
        } else {
            log.warning("null filterConfig");
        }
        String context = filterConfig.getServletContext().getServletContextName();
        String path = filterConfig.getServletContext().getContextPath();
        contextPath = "http://localhost:8080" + context + path;
        String duke = contextPath + "/duke.gif";
        token.setDuke(duke);
        initFilterParams();
        log.info(token.toString());
        log.info(className + "\t..init");
    }

    @Override
    public String toString() {
        return token.toString();
    }

    private void sendProcessingError(Throwable t, ServletResponse response) {
        log.fine("send processing error");
        String stackTrace = getStackTrace(t);

        if (stackTrace != null && !stackTrace.equals("")) {
            try {
                response.setContentType("text/html");
                try (PrintStream ps = new PrintStream(response.getOutputStream()); PrintWriter pw = new PrintWriter(ps)) {
                    pw.print("<html>\n<head>\n<title>Error</title>\n</head>\n<body>\n"); //NOI18N
                    pw.print("<h1>The resource did not process correctly</h1>\n<pre>\n");
                    pw.print(stackTrace);
                    pw.print("</pre></body>\n</html>"); //NOI18N
                }
                response.getOutputStream().close();
            } catch (Exception ex) {
            }
        } else {
            try {
                try (PrintStream ps = new PrintStream(response.getOutputStream())) {
                    t.printStackTrace(ps);
                }
                response.getOutputStream().close();
            } catch (Exception ex) {
            }
        }
    }

    public static String getStackTrace(Throwable t) {
        String stackTrace = null;
        try {
            StringWriter sw = new StringWriter();
            PrintWriter pw = new PrintWriter(sw);
            t.printStackTrace(pw);
            pw.close();
            sw.close();
            stackTrace = sw.getBuffer().toString();
        } catch (Exception ex) {
        }
        log.warning(stackTrace);
        return stackTrace;
    }

}