首先 可以通过URL 在浏览器端访问servlet,因为在web.xml中配置了URL与类全名的 映射.

我们初学时,很容易分不清,浏览器端访问的 是jsp页面还是servlet.  其实当我们用浏览器访问servlet时,

servlet一般只有两种做法:

第一种,最简单,一般仅适用于试验测试. 就是用out对象输出 一个html页面.实质就是out.print("");方法可以在浏览器端 输出内容. (就像在后台输出内容一样)

而一个很重要的点 就是这个方法中可以 输出 html标签. 将其输出为一个html页面. 并且默认是用doGet方法访问的.(原因不明??)

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 HelloServlet extends HttpServlet { /**
* Constructor of the object.
*/
public HelloServlet() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} /**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //response.setContentType("text/html");
PrintWriter out = response.getWriter();
//out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
//out.println("<HTML>");
//out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
// out.println(" <BODY>");
out.print(" This is ");
out.println("doGet() <br>");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} /**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(" 怎么了不出现");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} /**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
} }

当输出html标签时,这个页面就相当于是一个jsp页面,因为jsp页面就是这样 由<html>标签构成的.  这也让我们 分不清访问的究竟是servlet还是jsp页面.

而且访问servlet的URL是由web.xml文件的映射里面设置的,有一个默认的url(由/开始,这个/不能省),所以单独访问servlet类时,需要在浏览器中输出项目的url再加上这个URL.

第二种  这才是servlet的最重要的作用

在servlet中 实现向jsp页面的跳转,并传值.

但是,理论上是一个浏览器页面jsp页面 在上面点击一个操作,对应引发提交给一个URL连接.(那么这个URL就是一个servlet映射对应的URL,是不是绝对路径的URL??)

传给一个servlet类处理这个页面动作.(并且提交的时候选择时doGet方法访问还是doPost方法访问servlet,并且选择是不是表单传递参数)

所以这个servlet类,任务就是处理这个页面操作,调用相应的service 处理,并返回参数(这个是怎么做的,  好像处理后没有传参数?,但是数据库数据改变了,最后结果当你重新跳转jsp页面,这个页面非常重要,要显示最开始那个动作的实现的结果页面,应该与最开始的jsp页面只有一点小小的变化).所以就是调用一个重新查看数据库的jsp页面,也就是最初的页面.

那么有一个疑问就是:为什么最初的jsp页面会有对数据库的查询功能呢? 是因为我们最开始访问的jsp页面 其实就是访问的servlet  实现数据库扫描的作用 最后的跳转的jsp页面结果吗????

是的,很聪明.因为单纯的jsp页面,是不可能读取到数据库信息的.所以我们一开始就要执行读取数据库数据的操作,就是我们第一次访问这个网站时,实质访问的就是一个servlet的URL. 在servlet里面处理读取数据库数据的操作,并将访问的数据存到内存,当做参数传递给 servlet最后跳转的那个jsp页面.\

这里,又出现了一个重要问题,那就是 jsp中怎么接受 servlet中得到的结果 参数.

处理遍历时,老师并没有将参数存到session中,而是存到req.setAttribute  这个属性中

//向页面传值
req.setAttribute("command", command);
req.setAttribute("description", description);
//这两个参数不传也可以,因为只有这用到,其它层当做参数传出去 req.setAttribute("messageList", listService.query(command, description));

最后将req当做参数???传递jsp页面  (还要一个重要的事就是这个jsp是只能绝对路径吗,是一个什么样的路径,有多少种写法??)

req.getRequestDispatcher("/WEB-INF/jsp/back/list.jsp").forward(req,
resp);

那么jsp页面怎么接受呢  这个参数,并传值给jsp页面并表示出来?

好像在jsp页面  使用jQuery方法还是OGNL方法直接调用java对象(即参数,参数就是java对象?或者类的属性)????

还有一个重要问题就是,为什么条件查询和 查询混在一起.??用一个动作 servlet ,这样简化了,性能高吗

对servlet的 再总结 (精品)的更多相关文章

  1. Servlet

    建议:对于javaEE,在如何学习jsp和servlet时,初学者往往是一头雾水.我当时就被jsp的各种标签.内置对象和servlet整的很惨.所以,学习方法变得特别特别重要:而且,随着技术的更新和发 ...

  2. struts2的action是多例,servlet是单例

    struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...

  3. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

    一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...

  4. web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  5. Servlet 单例多线程

    Servlet如何处理多个请求访问? Servlet容器默认是采用单实例多线程的方式处理多个请求的: 1.当web服务器启动的时候(或客户端发送请求到服务器时),Servlet就被加载并实例化(只存在 ...

  6. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处 理有关,形成一个基础,在开发别的应用项目的时候则可以从 ...

  7. JSP/Servlet基础语法

    相关学习资料 http://my.oschina.net/chape/blog/170247 http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp ...

  8. 在cmd下编译一个简单的servlet时出现程序包javax.servlet不存在

    由于servlet和JSP不是Java平台JavaSE(标准版)的一部分,而是Java EE(企业版)的一部分,因此,必须告知编译器servlet的位置. 解决“软件包 javax.servlet不存 ...

  9. 【转】Servlet与web.xml的配置

    Web.xml常用元素<web-app><display-name></display-name>定义了WEB应用的名字<description>< ...

随机推荐

  1. Oracle Shared Pool 原理

    Oracle Shared Pool 原理 由于shared pool中最重要的是library cache,所以本文主要讲解Library cache的结构,library cache latch, ...

  2. go——接口(二)

    多态是指代码可以根据类型的具体实现采取不同行为的能力. 如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 标准库里有很好的例子,如io包里实现的流式处理接口. io包提供了 ...

  3. oracle中记录被另一个用户锁住的原因与解决办法

    oracle数据中删除数据时提示“记录被另一个用户锁住” 解决方法: 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from ...

  4. Getting Started with Rails (1)

    按照官网http://guides.rubyonrails.org/getting_started.html上学习了一下例子.在过程中有很多刚开始没理解的地方,写下来. 首先,建立了一个resourc ...

  5. CreateWindow创建无边框 可拉伸窗体

    createwindow 定义 HWND WINAPI CreateWindow( _In_opt_ LPCTSTR lpClassName, _In_opt_ LPCTSTR lpWindowNam ...

  6. SpringBoot @Annotation

    Annotation简介 Annotation是JDK1.5引入的特性,包含在java.lang.annotation包中. 它是附加在代码中的一些元信息,将一个类的外部信息与内部成员联系起来,在 编 ...

  7. Curator的监听机制

    原生的zookeeper的监听API所实现的方法存在一些缺点,对于开发者来说后续的开发会考虑的细节比较多. Curator所实现的方法希望摒弃原声API 的不足,是开发看起来更加的简单,一些重连等操作 ...

  8. mysql DATE_FORMAT 年月日时分秒格式化

    SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s')

  9. Dijkstra算法 - 最短路径算法

    2017-07-26 22:30:45 writer:pprp dijkstra算法法则:设置顶点集合S,首先将起始点加入该集合,然后根据起始点到其他顶点的路径长度, 选择路径长度最小的顶点加入到集合 ...

  10. WebUploader 解决文件多次上传和删除上传文件的问题

    文件多次上传有两种情况: 1. 上传前的多次选择 2. 上传成功后,再次选择 其实API上,已经有了介绍了,不知道为什么有同学还是不知道如何做,我来抛砖引玉吧. 配置项: duplicate {Boo ...