Servlet总结(1)

       本以为不会再用到servlet和jsp了,也忘得差不多了,没想到最近的项目又遇到了T_T。没办法,只好把以前学过的这方面基础内容总结一下,方便日后查看。

1. 什么是Servlet?

sun公司制订的一种用来扩展web服务器功能的组件规范,用来处理动态资源的请求。servlet就是一个组件,需要部署到servlet容器(Tomcat)里面才能运行。

2.Servlet如何运行?

比如在浏览器地址栏输入http://127.0.0.1:8080/example/hello

step1.浏览器依据ip,port与tomcat建立连接。
step2.浏览器将请求数据打包并发送请求。即按照http协议的要求,创建请求数据包,并把该请求数据包发送给tomcat。
step3.tomcat收到请求数据包之后,按照http协议要求,解析请求数据包的内容,并且将解析到的数据存放到request对象里面,同时创建一个response对象。
step4.tomcat将servlet实例化,然后调用该实例的service方法。tomcat会将request对象和response对象作为参数传递给service方法。可以通过调用request对象提供的方法来获取请求数据包里面的数据,也可以将处理结果写入response对象。
step5.tomcat会从response对象中获取处理结果,然后打包发送给浏览器。
step6.浏览器解析响应数据包,生成页面。

3.如何写一个Servlet?

step1.写一个java类,实现Servlet接口或者继承HttpServlet抽象类。
step2.编译。
step3.打包。(变成一个组件)
    appname (应用名)
        WEB-INF
            classes (放 .class文件)
            lib (可选,放.jar文件)
            web.xml (部署描述文件)
step4.部署。
    将step3创建的整个文件夹拷贝到容器里面。可以使用jar命令将step3创建的整个文件夹压缩成".war"结尾的文件,然后再拷贝这个文件就可以了。
step5.启动servlet容器,访问servlet。 http://ip:port/appname/url-pattern.注:url-pattern在web.xml文件中设置。

4.读取请求参数值

1.String request.getParameter(String paramName); 如果请求参数名写错,返回null。

2.String[] request.getParameterValues(String paramName);有多个请求参数名相同时,用该方法。

5.容器如何处理请求资源路径?

比如,在浏览器地址输入 http://ip:port/hello/aaa.html
step1. 容器默认认为访问的是一个servlet,去查看web.xml,看是否有匹配的servlet。
    注:有三种匹配方式
    a. 精确匹配  
            <url-pattern>/aaa.html</url-pattern>
    b. 通配符匹配 
            使用"*"来匹配零个或者多个任意的字符,比如
            <url-pattern>/*</url-pattern>
            <url-pattern>/demo/*</url-pattern>
    c. 后缀匹配
            使用"*."开头,后接一个任意的后缀,比如
            <url-pattern>*.do</url-pattern>
            以上配置会匹配所有以.do结尾的请求。

step2. 如果没有匹配的servlet,再去查找对应位置的文件。

让一个Servlet处理多种请求

step1. 该servlet采用后缀匹配。
<servlet-mapping>
    <servlet-name>actionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

step2.分析请求路径,依据分析结果,进行不同的处理。
    2.1 获得请求资源路径
    String uri = request.getRequestURI();
    System.out.println("uri: " + uri);

    2.2 为了方便比较,截取请求资源路径的一部分,
    //我们把这一部分称之为请求路径
    String path = uri.substring(uri.lastIndexOf("/"),uri.lastIndexOf("."));
    System.out.println("path: " + path);

    2.3 进行判断。依据请求路径,进行对应的处理
    if("/list".equals(path)){
        ......
    }else if("/add".equals(path)){
        ......
    }

6.Servlet上下文

6.1什么是Servlet上下文?

容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext接口要求的对象,该对象一般我们称之为servlet上下文。
    唯一性:一个web应用对应一个上下文。
    持久性:只要容器不关闭,应用没有被卸载,那么上下文就会一直存在。

6.2如何获得Servlet上下文?

GenericServlet提供了getServletContext()方法来获得上下文。

6.3作用

6.3.1)绑订数据

 setAttribute
 getAttribute
 removeAttribute
注:
    request,session,servlet上下文都提供了绑订数据相关的方法,如何选取?
    a. 这三个对象,生存时间长度依次为request < session < servlet上下文,在满足使用条件的情况下,尽量优先使用生命周期短的。
    b. 见下图

6.3.2)读取全局的初始化参数

a.什么是全局的初始化参数?
可以被同一个应用中的所有组件共享的初始化参数。
b.如何使用?
step1.配置
    <!-- 配置全局的初始化参数 -->
    <context-param>
        <param-name>company</param-name>
        <param-value>IBM</param-value>
    </context-param>
step2.读取
    ServletContext.getInitParameter(String paramName);

7.Servlet输出中文时产生的乱码问题

7.1为什么会有乱码?

out输出时,默认会使用iso-8859-1来编码。

7.2如何解决?

8.表单包含有中文参数值产生的乱码问题

8.1为什么会有乱码?

表单提交时,会对中文参数值进行编码,按照打开该表单所在的页面时的字符集来编码。比如,使用utf-8来编码;

而服务器端默认会使用iso-8859-1来解码,所以产生了乱码。

8.2如何解决?

8.2.1 post请求

8.2.2 get请求   修改server.xml

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
初学java的可以边学边练,效果盛佳! 3 编程题(改代码,写代码) 3.1 下拉列表实现 使用ajax技术完成下拉列表对应显示内容。 当选择下拉列表某项时: 显示对应内容: 参考答案: 1)ActionServlet copytextpop-up package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ActionServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String uri = request.getRequestURI(); String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf(".")); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); if(path.equals("/prod")){ String name = request.getParameter("name"); System.out.println("name:" + name); if(name.equals("qq")){ out.println("性价比高"); }else if(name.equals("bmw")){ out.println("驾驶性能出众"); }else{ out.println("好车,也贵"); } } out.close(); } } package web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ActionServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String uri = request.getRequestURI(); String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf(".")); response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); if(path.equals("/prod")){ String name = request.getParameter("name"); System.out.println("name:" + name); if(name.equals("qq")){ out.println("性价比高"); }else if(name.equals("bmw")){ out.println("驾驶性能出众"); }else{ out.println("好车,也贵"); } } out.close(); } } 2)product.jsp copytextpop-up <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <html> <head> <title>Insert title here</title> <style> #d1{ background-color:#fff8dc; width:220px; } </style> <script type="text/javascript" src="js/prototype-1.6.0.3.js"> </script> <script type="text/javascript"> function getXmlHttpRequest(){ var xhr = null; if((typeof XMLHttpRequest)!='undefined'){ xhr = new XMLHttpRequest(); }else { xhr = new ActiveXObject('Microsoft.XMLHttp'); } return xhr; } function change(v1){ var xhr = getXmlHttpRequest(); xhr.open('get','prod.do?name='+v1,true); xhr.onreadystatechange=function(){ if(xhr.readyState == 4){ var txt = xhr.responseText; $('d1').innerHTML = txt; } } xhr.send(null); } </script> </head> <body style="font-size:30px;"> <select style="width:120px;" id="s1" onchange="change(this.value);"> <option value="qq">QQ</option> <option value="bmw">宝马</option> <option value="ff">法拉利</option> </select> <div id="d1"></div> </body> </html>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值