简介:Servlet与JSP都可以动态生成HTML内容。
**Servlet是在服务器上运行的小程序,**一个servlet就是一个java类,并且可以通过请求-响应编程模型来访问这个驻留在服务器内存里的servlet程序
继承javax.servlet.http.HttpServlet类
servlet技术的重要性不言而喻,jsp也是在servlet上发展起来的。 servlet(java服务器小程序)特点:
由服务器调用和执行用java编写有一套自己的servlet规范几乎可以完成所有网站的功能是jsp的基础Tomcat是web服务器的同时,也是servlet和jsp的容器
客户端向服务器端请求某个servlet
服务器端接收请求
服务器创建ServletRequest对象,将客户端的请求封装到这个对象中
服务器创建ServletResponse对象
服务器调用HttpServlet的service方法,将ServletRequest对象和ServletResponse对象传入该方法,service方法将根据ServletRequest对象中的信息选择调用doGet或者doPost方法,然后执行相应的逻辑代码
服务器调用HttpServletResponse对象的相关方法生成响应数据,发送给客户端
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2WUXdTLb-1602117505753)(C:\Users\Administrator\Desktop\javaweb笔记\servlet工作原理.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rm1c2c0P-1602117505755)(C:\Users\Administrator\Desktop\javaweb笔记\servlet图png.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8uWDIhj1-1602117505757)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200812133303160.png)]
继承HttpServlet开发Servlet(最常用)
编写servlet文件,需要重写doget和dopost方法
package cn.icbc.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @WebServlet("/LogoutServlet")//使用注解方式部署到web.xml文件 public class LogoutServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request,response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("utf-8");//作用是设置对客户端请求进行重新编码的编码。 response.setCharacterEncoding("utf-8");//作用是指定对服务器响应进行重新编码的编码 response.setContentType("text/html;charset=UTF-8");//指定对服务器响应进行重新编码的编码 HttpSession session=request.getSession(); PrintWriter out=response.getWriter(); } }web.xml的配置
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>cn.icbc.servlet.LoginServlet</servlet-class>/*servlet 所在的路径*/ </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern>/*注意加"/"*/ </servlet-mapping>我们post方法实现一次 简单写一个表单,action指向servlet的
<body> <form action ="loginServlet" method="post"> 账号:<input type="text "name="username"> <input type="submit" vaule="登录"> </form> </body>Servlet 加载—>实例化—>服务—>销毁。
注:每一个servlet都是单例的,servlet一旦被创建,客户端再去访问servlet时其实访问都是同一个servlet。因此,在高并发的情况下,容易产生线程安全问题,要注意使用同步机制来预防。
init():
在Servlet的生命周期中,仅执行一次init()方法****(第二次直接去tomcat里找编译好的.class文件)****。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
⭐️init(ServletConfig config)
该方法执行在单线程的环境下,因此开发者不用考虑线程安全的问题。
public class HelloServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException {//此方法只初始化一次 String classname=config.getInitParameter("classname"); System.out.println("init正在初始化...."+ classname); System.out.println(config.getServletContext().getInitParameter("contextparm")); } <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>cn.oa.servlet.HelloServlet</servlet-class><!-- servlet 所在路径 --> <init-param> <param-name>classname</param-name> <param-value>oracle.....</param-value> </init-param> <load-on-startup>0</load-on-startup><!-- 在Tomcat启动之前就先初始化,值越小,优先级越高 --> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/HelloServlet</url-pattern> </servlet-mapping> <servlet> <context-param> <param-name>contextparm</param-name><!--全局的--> <param-value>全局的Parm</param-value> </context-param>service():
它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。它会根据请求的方式,调用doGet,doPos以及其他的doXXXt方法
区别:
service(ServletRequest, ServletResponse)方法是重写的其父类GenericServlet类的方法,这个方法是公共的(public)。
service(HttpServletRequest, HttpServletResponse)方法是HttpServlet类定义的方法,是受保护的(protected),主要作用是接受标准的Http请求(HttpServletRequest),并根据请求方式不同分发到不同的doXXX(HttpServletRequest, HttpServletResponse)方法
destroy():
仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
**Float.parseFloat()**字符串转float
SimpleDateFormat sf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
sf.parse() 字符串转换成日期类型
sf.format() 日期类型格式化
request.setCharacterEncoding(“utf-8”);//作用是设置对客户端请求进行重新编码的编码。 response.setCharacterEncoding(“utf-8”);//作用是指定对服务器响应进行重新编码的编码 response.setContentType(“text/html;charset=UTF-8”);//指定对服务器响应进行重新编码的编码
显示某一页的数据的sql语句:
select from ( select rownum r,t.from (select s. from student s order by sno asc) t where rownum<=页数页面大小
) where r>=(页数-1)*页面大小+1 ;
总页数:
总页数= 数据总数 % 页面大小==0 ?数据总数 /页面大小:数据总数 /页面大小 + 1;
数据总数 (select count(主键或*) from xxx ,查数据库)
简介:ajax全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML); 是指一种创建交互式网页应用的网页开发技术。下面为大家介绍使用ajax的基本步骤。
1、创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();2、准备发送
xhr.open();3、执行发送
xhr.send();4、指定回调函数
xhr.onreadystatechange = functiion(){}; EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。
jsp脚本:<%=request.getAttribute(name)%> EL表达式替代上面的脚本:${requestScope.name}
EL最主要的作用是获得四大域中的数据,格式:${EL表达式} EL获得pageContext域中的值:${pageScope.key}; EL获得request域中的值:${requestScope.key}; EL获得session域中的值:${sessionScope.key}; EL获得application域中的值:${applicationScope.key}; EL从四个域中获得某个值:${key}; —同样是依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找
//存储一个集合 List<User> list = new ArrayList<User>(); User user1 = new User(); user1.setId(2); user1.setName("lisi"); user1.setPassword("123"); list.add(user1); User user2 = new User(); user2.setId(3); user2.setName("wangwu"); user2.setPassword("123"); list.add(user2); application.setAttribute("list", list); <!-- 使用EL表达式获得域中的值 --> ${applicationScope.list[1].name}1.获取JSP中域中的数据:pageScope , requestScope , sessionScope , applicationScope
2.param,paramValues - 接收参数,相当于request.getParameter() request.getParameterValues()
3.header,headerValues - 获取请求头信息,相当于request.getHeader(name)
4.initParam - 获取全局初始化参数,相当于this.getServletContext().getInitParameter(name)
5.cookie - WEB开发中cookie,相当于request.getCookies()—cookie.getName()—cookie.getValue()
6.pageContext - WEB开发中的pageContext,pageContext对象。可以用来访问JSP其他8个内置对象
<!-- 使用el获得参数 --> ${param.username }//相当于request.getParameter() ${header["User-Agent"] }//获取请求头信息,相当于request.getHeader(name) ${initParam.aaa }// ${cookie.name.value } <!-- 通过el表达式获得request对象 --> ${pageContext.request }1、介绍 表述:顾名思义在条件符合某种情况时,被触发执行的相关操作。
时间:事件发生前before和发生后after
事件:
名称介绍update可用old访问旧数据,new访问新数据delete可用old访问旧数据insert可用new访问新数据其中new和old相当于一个对象,封装了当前操作数据的所有字段
创建一个触发器,作用:在删除topic 之前先删除news(主要是应用级联和外键的情况)
create trigger trigger_delete_topic before delete on topic for each row Begin delete from news where ntid=old.tid; end; TRIGGER `tr_a_insert` AFTER INSERT ON `t_a` FOR EACH ROW BEGIN --Trigger触发后,同时对t_b新增同步一条数据 INSERT INTO `t_b` SET username = NEW.username, groupid=NEW.groupid; END;之前先删除news(主要是应用级联和外键的情况)
create trigger trigger_delete_topic before delete on topic for each row Begin delete from news where ntid=old.tid; end; TRIGGER `tr_a_insert` AFTER INSERT ON `t_a` FOR EACH ROW BEGIN --Trigger触发后,同时对t_b新增同步一条数据 INSERT INTO `t_b` SET username = NEW.username, groupid=NEW.groupid; END;