0
点赞
收藏
分享

微信扫一扫

javaEE基础

楚木巽 2022-01-12 阅读 55

javaEE基础

1.javaEE概述

1.1javaEE容器

javaEE容器不是程序员需要编写的内容,它是依照JavaEE规范提供的集合工具.

  • web容器
  • EJB容器
  • 其他Java应用容器

1.2javaEE组件

运行在javaEE容器里的程序片段,程序以Java为主语言.

2.开发环境

2.1tomcat

Tomcat支持HTTP,并支持Web容器规划的实现,它支持HTTP技术,如:HTML,CSS.也支持JSP,servlet等JavaEE技术.

在这里插入图片描述

文件夹说明
bin放置Tomcat命令,如startup.bat为启动命令,shutdown.bat为关闭命令.
conf放置Tomcat的配置,如编码的设置
lib存放启动的包,比如我们使用Tomcat的数据源,需要将对应的数据库链接包放在这里.
logs放置Tomcat的日志文件
temp放置Tomcat的缓存内容
webappWeb项目部署目录,我们可以把javaEE的Web项目放置在这里,它会自行发布
work工作目录,在web容器运行时,JSP会被翻译成Servlet,而翻译Servlet生成的class文件可以存放在这里,这样后续运行的JSP速度就会更快.

防止Tomcat控制台中发生乱码,在conf文件夹里的配置文件logging.properties里修改 ,重启后就不会乱码了

java.util.logging.ConsoleHandler.encoding=GBK

也可设置Tomcat的运行编码,在conf文件夹的server.xml中找到

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

2.2maven

主要是方便我们引入依赖

2.3项目结构

在这里插入图片描述

文件作用
Java放置我们开发的java类
resource存放各种配置文件
web放置Web项目所需的各类文件,如HTML,JSP,JavaScript
test测试文件
web.xmljavaEE Web项目的配置文件 在Sevrlet3.0以后不是必配
index.jsp一个默认欢迎界面

2.4Web项目发布包

将war包直接放入Tomcat的webapps包下也可以发布项目,一般来说,这样的方式更适合在项目正式发布的时候使用.

3.Web容器组件-Servlet

  • 请求参数(HttpServletRequest):它代表请求,可以从请求中获得对应的参数和与之对应的信息

  • 响应参数(HttpServletResponse):它代表响应客户的请求,可以通过它写入响应信息,也可以设置应答的类型和其他的相关信息

    3.1请求

    Servlet的继承关系:

在这里插入图片描述

init有参 无参
servicedoGet doPost service···方法
destroy销毁方法

Servlet的请求响应过程如图

在这里插入图片描述

//使用@WebServlet将类标识为Servlet,Servlet容器会自动识别它
@WebServlet(
        name = "myServlet",//Servlet名称
        urlPatterns = "/my",//Servlet拦截路径,可以是正则表达式
        asyncSupported = true,//是否异步,默认false
        //启动顺序,小于等于0,不在项目启动时加载(第一次请求),大于0在项目启动时加载
        loadOnStartup = 1,
        initParams = {//设置Servlet参数
                @WebInitParam(name = "init.param1",value = "1"),
                @WebInitParam(name = "init.param2",value = "2")
        }
)
 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获得请求信息(1)
        int port = req.getServerPort();
        String url = req.getRequestURL().toString();
        String uri = req.getRequestURI();
        System.out.println("请求端口:" + port);
        System.out.println("url:" + url);
        System.out.println("uri:" + uri);
        //获取请求头(2)
        String userAgent = req.getHeader("User-Agent");
        System.out.println("User-Agent:"+userAgent);
        //获取参数(3)
        /*String parameter = req.getParameter("....");*/
        //获取请示上下文(4)
        ServletContext application = req.getServletContext();
        //设置上下文属性
        application.setAttribute("application","随便一个值");
        //修改请求参数(5)
        req.setAttribute("param1","随便一个值1");
        //获取session(6)
        HttpSession session = req.getSession();
        //修改session属性和设置超时时间s
        session.setAttribute("session1","随便一个值");
        session.setMaxInactiveInterval(1800);
        //跳转页面(7)
        //会传递请求和响应上下文,同时地址不变
        req.getRequestDispatcher("test.html").forward(req,resp);
        resp.getWriter().print("hello world!");
    }

内置对象作用域
request当次用户请求有效
session浏览器和服务器会话之间有效session是浏览器和服务器通信期间为了保证通讯数据而开辟的内存空间,记录与浏览器之间的会话数据
applicationWeb项目在Servlet容器的存活期间有效
请求头说明示例状态
Accept可接受的响应内容类型(Content-Types)。Accept: text/plain固定
Accept-Charset可接受的字符集Accept-Charset: utf-8固定
Accept-Encoding可接受的响应内容的编码方式。Accept-Encoding: gzip, deflate固定
Accept-Language可接受的响应内容语言列表。Accept-Language: en-US固定
Accept-Datetime可接受的按照时间来表示的响应内容版本Accept-Datetime: Sat, 26 Dec 2015 17:30:00 GMT临时
Authorization用于表示HTTP协议中需要认证资源的认证信息Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE==固定
Cache-Control用来指定当前的请求/回复中的,是否使用缓存机制。Cache-Control: no-cache固定
Connection客户端(浏览器)想要优先使用的连接类型Connection: keep-aliveConnection: Upgrade固定
Cookie由之前服务器通过Set-Cookie(见下文)设置的一个HTTP协议CookieCookie: $Version=1; Skin=new;固定:标准
Content-Length以8进制表示的请求体的长度Content-Length: 348固定
Content-MD5请求体的内容的二进制 MD5 散列值(数字签名),以 Base64 编码的结果Content-MD5: oD8dH2sgSW50ZWdyaIEd9D==废弃
Content-Type请求体的MIME类型 (用于POST和PUT请求中)Content-Type: application/x-www-form-urlencoded固定
Date发送该消息的日期和时间(以RFC 7231中定义的"HTTP日期"格式来发送)Date: Dec, 26 Dec 2015 17:30:00 GMT固定
Expect表示客户端要求服务器做出特定的行为Expect: 100-continue固定
From发起此请求的用户的邮件地址From: user@itbilu.com固定
Host表示服务器的域名以及服务器所监听的端口号。如果所请求的端口是对应的服务的标准端口(80),则端口号可以省略。Host: www.itbilu.com:80Host: www.itbilu.com固定
If-Match仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要用于像 PUT 这样的方法中,仅当从用户上次更新某个资源后,该资源未被修改的情况下,才更新该资源。If-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd”固定
If-Modified-Since允许在对应的资源未被修改的情况下返回304未修改If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT固定
If-None-Match允许在对应的内容未被修改的情况下返回304未修改( 304 Not Modified ),参考 超文本传输协议 的实体标记If-None-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd”固定

3.2响应

HashMap<String, String> map = new HashMap<>();
        map.put("param1","参数1");
        map.put("param1","参数2");
        //转化为JSON数据集
        String json = JSON.toJSONString(map);
        
        //设置响应信息为JSON类型
        resp.setContentType("application/json");
        //设置响应编码为UTF-8
        resp.setCharacterEncoding("UTF-8");
        //设置响应头
        resp.setHeader("success","true");
        //设置状态码,200表示成功
        resp.setStatus(200);
		  //跳转
        resp.sendRedirect("/ch.jsp");

3.3过滤器

package javax.servlet;

import java.io.IOException;

public interface Filter {
    default void init(FilterConfig filterConfig) throws ServletException {
    }

    void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    default void destroy() {
    }
}
//标识为过滤器
@WebFilter(
        //过滤器的名字
        filterName = "myServletFilter",
        //过滤范围
        urlPatterns = {"request/*","/response/*"},
        //过滤的Servlet
        servletNames = {"request","myServlet"}
)
public class MyServletFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //强制转换
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        request.setCharacterEncoding("UTF-8");
        //获取参数
        String s = request.getParameter("void");
        if (s == null || s.trim().equals("")){
            //拦截成功
            return;
        }
        //放行请求
        filterChain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

3.4监听器

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Servlet上下文初始化后的逻辑");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Servlet上下文销毁后的逻辑");
    }
}

contextInitialized会在过滤器的init方法执行之前执行,contextDestroy会在过滤器的destroy方法执行之后执行

3.5Servlet容器初始化器

@HandlesTypes(value = {String.class})
public class WebContainerInitializer implements ServletContainerInitializer{
    @Override
    public void onStartup(Set<Class<?>> set, ServletContext servletContext) throws ServletException {
        
    }
}

3.6使用Cookie

public class MyCookie extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //实例化Cookie
        Cookie cookie = new Cookie("name", "YaoHui");
        Cookie cookie1 = new Cookie("password", "123456");
        //将cookie传入本地浏览器
        resp.addCookie(cookie);
        resp.addCookie(cookie1);
    }
}

3.7提交表单

3.8使用web.xml

<!-- 设置项目主界面-->
<welcome-file-list>
        <welcome-file>main.html</welcome-file>
</welcome-file-list>

服务端获取信息,它的安全性较差,且对提交数据的类型和长度有所限制,同时,参数在URL中是可见的,它的优势是传输速度比较快.POST请求时浏览器向服务端提交数据,数据的类型和长度是不受限的,同时数据参数可以放在表单中,不在URL中显示出来,安全度也较高,但性能可能会低一点.由于表单涉及商业数据,比较重要,因此提交表单的操作会使用POST请求.

3.8使用web.xml

<!-- 设置项目主界面-->
<welcome-file-list>
        <welcome-file>main.html</welcome-file>
</welcome-file-list>
举报

相关推荐

0 条评论