博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet
阅读量:5992 次
发布时间:2019-06-20

本文共 4385 字,大约阅读时间需要 14 分钟。

hot3.png

CS/BS;Servlet接收表单数据;乱码问题;Servlet运行原理;Servlet路径相关;上下文和预置数据;重定向和转发;

------------------------------------------------------------------------------------------------------------------------

两层CS(Client Server):客户端+DB

特点:
 - 数据库作为Server,使用数据库特定的编程语言编写业务。
 - 客户端提供操作界面和少量的业务逻辑处理。
缺点:
 - 移植性差(更换数据库需要重新编程)
 - 不适合大写应用(客户端需要与数据库之间建立持续的链接)

三层CS:客户端+应用服务器+DB

特点:
 - 数据库只负责管理数据。
 - 应用服务器提供所有的业务逻辑的处理。
 - 客户端只负责提供操作界面。
优点:移植性好,只适合大型应用。
缺点:
 - 客户端需要单独安装,开发复杂(需要自定义协议,编写客户端和服务端的通信模块)

BS:Browser+Web Server + DB

特点:
 - 数据库只负责数据的管理。
 - Web服务器负责业务逻辑的处理。
 - 浏览器负责提供操作界面。
优点:
 - 不需要单独安装客户端。
 - 开发比CS简单,客户端和服务器的通信模块都是使用标准的HTTP协议进行通信。

Servlet:扩展Web服务器功能的组建规范。

Servlet容器:即TomCat。

-------------------------------------------------------------------------------------------
Servlet获取请求参数:(接收表单传入的数据)
 - 通过request获取请求数据,如果参数名不存在则返回null
 - getParameter(name) -> String
 - getParameterValues(name) -> String[]
例    String code = req.getParameter("code");
    String[] interests = req.getParameterValues("interest");

请求方式:浏览器向服务器传递数据的方式。 - req.getMethod();

get:采用路径传承,参数可见。隐私性差。数据大小守路径限制(2k)。
post:采用实体内容传参,参数不可见。数据大小不受限。
 - 向服务器索取(查询)数据时通常用get,向服务器提交(保存)数据时通常用post。

乱码问题:

其中方案一的代码如下:

String code = req.getParameter("code");
code = new String(code.getBytes("iso8859-1"),"utf-8");

Servlet输出中文:在获取WriteOut对象及调用out方法之前调用setContentType方法。

     - res.setContentType("text/html;charset=utf-8");

Servlet运行原理:

Servlet生命周期:

改为在TomCat启动时创建并初始化Servlet的方法:

<servlet>
      <servlet-name>demo</servlet-name>
      <servlet-class>web.DemoServlet</servlet-class>
      <!-- 参数1表示服务器启动时第一个加载此Servlet -->
      <load-on-startup>1</load-on-startup>
</servlet>

Servlet访问路径的方案:

1.精确匹配:<url-pattern>/abc</url-pattern>
2.通配符匹配:<url-pattern>/*</url-pattern>
3.后缀匹配:<url-pattern>*.abc</url-pattern>
 - 优先级最高的是精确匹配,都没匹配成功则容器会查找相应的文件,找到返回文件,否则返回404。       

//项目名

System.out.println(req.getContextPath());
//Servlet网名
System.out.println(req.getServletPath());
//uri:Servlet绝对路径
System.out.println(req.getRequestURI());
//url:Servlet完整路径
System.out.println(req.getRequestURL());
URI和URL的区别:

路径:

 

 - 连接地址:<a href="url"></a>

 - 引入图片:<img src="url"/>
 - 引入子jsp: <c:import url=""><c:import>
 - 表单提交:<form action="url">
 - 重定向: res.sendRedirect(url);
 - 转发: req.getRequestDispatcher(url);
插入图片
路径的处理技巧:
1.使用绝对路径时:
 - 链接地址、表单提交、重定向是从应用名开始写,转发是从应用明之后开始写.

2.获取应用的实际部署名称(项目名称): String req.getContextPath();  如:"/netctoss"

3.获取请求路径: req.ServletPath();  如:"/findCost.do"等

--------------------------------------------------------------------------------------------------------------------------

预制数据:ServletConfig和ServletContext

ServletConfig:给某一个Servlet预置数据。
ServletContext:给所有的Servlet预置数据

在web.xml中预制数据:

    <!-- 预制一个数据 -->
      <init-param>
          <param-name>maxOnline</param-name>
          <param-value>2000</param-value>
      </init-param>

    <!-- 预制一份共有的数据 -->

      <context-param>
          <param-name>size</param-name>
          <param-value>10</param-value>
      </context-param>

读取预制的私有数据:
        ServletConfig cfg = getServletConfig();
        String maxOnline = cfg.getInitParameter("maxOnline");

获取预制的共有数据:

        ServletContext ctx = getServletContext();
        String size = ctx.getInitParameter("size");

Servlet上下文:容器启动后,会为每个web应用创建一个唯一的一个符合ServletContext接口的对象,
           该对象就是servlet上下文。
获取上下文的方式:(有多种)如:通过ServletConfig提供的getServletContext方法获取。

作用:

 - 使用setAttribute绑定数据
 - 使用removeAttribute移除绑定数据
 - 使用getAttribute获取绑定数据
特点:servlet上下文绑定的数据可以被整个应用上的所有组件共享,且可以一直访问。
例:绑定数据count(流量)
        ServletContext ctx= getServletContext();
        ctx.setAttribute("count", 0);
        Object count = ctx.getAttribute("count");
        int c = Integer.parseInt(count.toString())+1;
        ctx.setAttribute("count", c);

----------------------------------------------------------------------------------------------------------------------------

重定向和转发:

一.重定向:response.sendRedirect(String url)

二.转发:

1.绑定数据到request对象:
    - 实现绑定:request.setAttribute(String name,Object obj)
    - 读取绑定值:Object request.getAttribute(String name)
2.获得转发器: 
    - RequestDispatcher rd = request.getRequestDispatcher(String url)

3.转发: 

    - rd.forward(request,response)    通常第二步和第三步合并为一行语句:request.getRequestDispather(url)
例    req.setAttribute("cost", cost);
    req.getRequestDispatcher("WEB-INF/cost/update.jsp").forward(req,res);

重定向与转发的区别:

转发原理:

----------------------------------------------------------------------------------------------------------------------

补充:Bean属性
class Student {

    //对象属性

    private String name;

    //Bean属性:studentName

    public String getStudentName() {
        return this.name;
    }

    public void setStudentName(String name) {

        this.name = name;
    }

}

转载于:https://my.oschina.net/langgege/blog/678824

你可能感兴趣的文章
每个人都可以拥有一款属于自己的 jsFiddle
查看>>
2016成长之路
查看>>
最小化安装OEL6.5和配置
查看>>
我的友情链接
查看>>
spring的事物配置
查看>>
ganglia安装报错解决
查看>>
Win7与虚拟机中Linux的ping通设置
查看>>
win7恢复快速启动栏
查看>>
zabbix的添加自定义监控项目、配置邮件告警、测试告警
查看>>
我的友情链接
查看>>
Java IO最详解
查看>>
依赖注入
查看>>
CentOS 5.5编译安装Nginx1.0.15+MySQL5.5.23+PHP5.3.10
查看>>
“只能通过Chrome网上应用商店安装该程序”解决方法
查看>>
Android 开发踩过的坑以及注意事项
查看>>
怎么查看lib里的jar包的类信息
查看>>
CentOS7下LNMP环境搭建Discuz论坛
查看>>
Sybase SQL Anywhere 9 数据库修复成功
查看>>
router ospf命令
查看>>
Flink 原理与实现:Table & SQL API
查看>>