javaWeb编程_Servlet02

来源:互联网 发布:ubuntu系统下安装win7 编辑:程序博客网 时间:2024/06/08 07:36

Servlet02

一、B/S和CS:

    1、B/S:Brower/Server浏览器--服务器架构。

    2、C/S:Client/Server客户端--服务器架构。

    3、B/S和C/S的优缺点:

(1)B/S:服务器负荷重,维护成本相对来说低。

(2)C/S: 服务器负荷轻,但维护成本相对来说高。

    4、B/S模式工作原理:

在B/S模式中,客户端运行浏览器软件。浏览器以超文本形式向Web服务器提出访问数据库的要求,Web服务器接受客户端请求后,将这个请求转化为SQL语法,并交给数据库服务器,数据库服务器得到请求后,验证其合法性,并进行数据处理,然后将处理后的结果返回给Web服务器,Web服务器再一次将得到的所有结果进行转化,变成HTML文档形式,转发给客户端浏览器以友好的Web页面形式显示出来

二、Servlet类:

1、右键直接创建servlet的类的时候可以选择重写父类javax.servlet.http.HttpServlet的一些方法,比如doGet(),doPost(),service()等,根据自己的需要选择重写相应的方法。

在创建的第二步会到配置servlet的页面这里可以选择Mapping-URL的名字,确定好过后就会在web.xml中自动配置好了该servlet,一般创建好了过后到web.xml中看一下配置是否正确,是否需要修改,手动配置在上一篇文章中提到过。

doGet()方法:当请求方式是GET的时候调用该方法。

doPost()方法:当请求方式是POST的时候调用该方法。 


 在上一篇文章中我们有提到过重写service()方法,这里的doGet(),doPost()可以做相同的操作,而且更加明确,清楚的知道是客户端是以什么方式访问的。

一般在项目中这样写:

这里在doGet方法中调用了doPost方法,当不知道是什么方式请求的时候就可以考虑到两种情况。

2、可以改变Servlet的初始化时间

服务器启动的时候自动初始化:

在该servlet的配置时,在<servlet>标签中添加<load-on-startup>0<load-on-startup>

标记容器是否在启动的时候就加载这个servlet。当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。

三、转发和页面重定向:

1、请求转发——服务器内部跳转

服务端页面A自行将请求发送到别的页面B,由B进行响应输出。这种转发由服务端自行完成。

     目标页面B可以获得A之前获得的请求数据“request”。(但这需要api能够传递request和response参数传到目标

页面B)。页面之间相当于能够数据共享。

转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

对于javaWeb项目来说,使用request对象可以做到这点。

       <%

       RequestDispatcher rd=request.getRequestDispatcher("/ 转到的页面");

       rd.forward(request,response);

      %>

转发之前如果有输出语句,那些内容将被抛弃。

可以通过forward方法将提交信息在多个页面间进行传递。

"/"表示项目的根目录,不加"/"表示当前servlet所在的目录

例:

在这个例子中就用到了转发,当user不等于空时跳转到success.jsp界面,上面一句

request.setAttribute("username",username)设置的属性值为username 通过键值对的方式发送到转发

的页面,在那边用${username}或者request.getAttribute("username")来获取。

2.重定向

    服务端指示浏览器跳转。然后客户端浏览器会重新发起相应的新的internetURL地址请求,从而实现页面转向。

    浏览器之前向服务端发送的请求数据 “request中的内容”将不会发送到新的URL中去。

在浏览器地址栏中可以显示转向后的地址。

通过浏览器测试,可以发现浏览器收到过服务器状态码Status Code:302 OK。

 

对于javaWeb项目来说,response对象的方法void sendRedirect (“/项目名/转到的页面”);可以实现这种重定向。在 这句后,程序员最好立即调return;才不容易出错。

如果真的发生了重定向,之前如果有输出语句,那些内容将被抛弃。、

  注:jsp:forward动作的功能也基本和此功能一致。(jsp:forward是服务器端转发。)

"/"表示项目的根目录,不加"/"表示当前servlet所在的目录,因为重定向后还会执行下面的代码,所以让return

来结束该方法。

浏览器发出两次请求-即该Servlet和“/项目名/转到的页面”地址(自动发出该次请求)

请求重定向是把“/项目名/转到的页面”的地址发给浏览器,让浏览器进行二次请求,所以浏览器的地址是“/项目名/转到的页面”

的地址。

例如:跳转到百度:response.sendRedirect("http://www.baidu.com");

四、常用的几个路径字符串(重要)
以下几个路径字符串很重要,它们是许多有经验的程序员总结出来的,也是许多大型公司常常在jsp文件头部使用的代码。
<%
(1)  String path = request.getContextPath();//当前应用程序名。  如果应用刚好发布为容器的缺省应用(即没有应用名),则这个方法就会返回一个空字符串
//如得到 /test
(2)  String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";  //当前应用的全路径(也就是包含进协议和主机名)。 用它拼接上诸如 /css、/js  ,就刚好能访问该应用根目录下的静态资源
//如得到 http://www.baidu.com:8080/test
(3)String url = request.getRequestURI()+"?"+request.getQueryString();//得到除“协议、主机”之外的仅针对本容器的 统一资源定位符(1)其中request.getRequestURI()得到统一资源定位符,(2)request.getQueryString()得到查询串
//如得到/test/acontroller/b/c.page?x=1&y=2&z=3
(4)String baseurl=request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + url; //当前的网址
//如得到http://www.baidu.com:8080/test/acontroller/b/c.page?x=1&y=2&z=3
%>




原创粉丝点击