美文网首页
Servlet 教程——检视阅读(下)

Servlet 教程——检视阅读(下)

作者: 卡斯特梅的雨伞 | 来源:发表于2020-05-04 01:43 被阅读0次
        String country = locale.getCountry();
    
        // 设置响应内容类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
    
        String title = "检测区域设置";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + language + "</h1>\n" +
                "<h2 align=\"center\">" + country + "</h2>\n" +
                "</body></html>");
    }
    

    }

    
    #### 语言设置
    
    Servlet 可以输出以西欧语言(如英语、西班牙语、德语、法语、意大利语、荷兰语等)编写的页面。在这里,为了能正确显示所有的字符,设置 Content-Language 头是非常重要的。
    
    第二点是使用 HTML 实体显示所有的特殊字符,例如,"&#241;" 表示 "ñ","&#161;" 表示 "¡"
    
    

    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 设置西班牙语言代码
    response.setHeader("Content-Language", "es");

    
    #### 特定于区域设置的日期
    
    您可以使用 java.text.DateFormat 类及其静态方法 getDateTimeInstance() 来格式化特定于区域设置的日期和时间。
    
    

    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 获取客户端的区域设置
    Locale locale = request.getLocale( );
    String date = DateFormat.getDateTimeInstance(
    DateFormat.FULL,
    DateFormat.SHORT,
    locale).format(new Date( ));

    
    #### 特定于区域设置的货币
    
    您可以使用 java.text.NumberFormat 类及其静态方法 getCurrencyInstance() 来格式化数字(比如 long 类型或 double 类型)为特定于区域设置的货币。
    
    

    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 获取客户端的区域设置
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getCurrencyInstance(locale);
    String formattedCurr = nft.format(1000000);

    
    #### 特定于区域设置的百分比
    
    您可以使用 java.text.NumberFormat 类及其静态方法 getPercentInstance() 来格式化特定于区域设置的百分比。
    
    

    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    // 获取客户端的区域设置
    Locale locale = request.getLocale( );
    NumberFormat nft = NumberFormat.getPercentInstance(locale);
    String formattedPerc = nft.format(0.51);

    
    
    
    ### 疑问
    
    Q:Servlet 在 Web 服务器的地址空间内执行。这样它就没有必要再创建一个单独的进程来处理每个客户端请求。这句话怎么理解?
    
    
    
    Q:为什么工作中遇到的JSP页面一般不会写java代码,而是html与js或者说jquery整合?
    
    A:让Servlet只负责业务逻辑部分,而不会生成HTML代码;同时JSP中也不会充斥着大量的业务代码,这样能大提高了代码的可读性和可维护性。这是因为我们采用**MVC模式,**这样一来避免了Servlet**通过字符串拼接的方式生成动态HTML内容,这样就容易导致代码维护困难、可读性差**的缺点,也避免了**JSP在HTML中混入大量、复杂的业务逻辑**。
    
    
    
    Q:什么是函数式编程?
    
    
    
    Q:servlet怎么请求jsp页面?
    
    一种:在webapp下的jsp文件可以通过如这个链接直接访问,为什么把jsp文件放在创建的文件夹下就不行了呢?`<http://localhost:8080/hellomybatis/upload.jsp> `
    
    另一种:通过`context.getRequestDispatcher("/index3.jsp") .forward(request, response);`把请求转发到该jsp页面上。
    
    示例:
    
    ```java
    @WebServlet("/jsptest")
    public class JspTestServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request,
                             HttpServletResponse response)
                throws ServletException, IOException {
            ServletContext context = getServletContext();
            //request.setAttribute("specials", getSpecials());
            context.getRequestDispatcher("/index3.jsp")
                    .forward(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request,
                              HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    }
    

    扩展阅读

    单点登录技术

    单点登录的目的是为了能在分布式系统或者集群中对用户的请求校验登录状态。

    一般我们用到的是共享session或者唯一token来实现。共享session一般是给网页或者说http请求用,而token一般是给安卓、IOS系统等前端用。

    在这里我们说下共享session。一般我们会用单点登录系统或者是在tomcat上配置redis,当用户请求页面的时候,会根据用户在cookie里默认的sessionId到tomcat上配置redis配置的redis上校验是否存在,存在则不同的系统都共有这个session会话。不存在则跳到登录页面登录。理论上单点登录系统也是这样,一般是通过redis来缓存session会话,实现单点登录。

    servlet和jsp的区别

    1、Servlet在Java代码中可以通过HttpServletResponse对象动态输出HTML内容

    2、JSP是在静态HTML内容中嵌入Java代码,然后Java代码在被动态执行后生成HTML内容。

    servlet和jsp的各自的特点

    1、Servlet虽然能够很好地组织业务逻辑代码,但是在Java源文件中,因为是通过字符串拼接的方式生成动态HTML内容,这样就容易导致代码维护困难、可读性差。

    2、JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑

    通过MVC双剑合璧

    JSP和Servlet都有自身的适用环境,那么有没有什么办法能够让它们发挥各自的优势呢?答案是肯有的,MVC模式就能够完美解决这一问题。

    MVC模式,是Model-View-Controller的简称,是软件工程中的一种软件架构模式,分为三个基本部分,分别是:模型(Model)、视图(View)和控制器(Controller):

    Controller——负责转发请求,对请求进行处理

    View——负责界面显示

    Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现

    在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:

    image.png

    1、Web浏览器发送HTTP请求到服务端,然后被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)

    2、Controller(Servlet)调用核心业务逻辑——Model部分,获得结果

    3、Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容

    4、动态生成的HTML内容返回到浏览器显示

    MVC模式在Web开发中有很大的优势,它完美规避了JSP与Servlet各自的缺点,让Servlet只负责业务逻辑部分,而不会生成HTML代码;同时JSP中也不会充斥着大量的业务代码,这样能大提高了代码的可读性和可维护性。

    参考

    Servlet教程——菜鸟

    相关文章

      网友评论

          本文标题:Servlet 教程——检视阅读(下)

          本文链接:https://www.haomeiwen.com/subject/uvisghtx.html