Web中Servlet

一:

web.xml中的代码如下

<web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>AddServlet</servlet-name><servlet-class>servlets.AddServlet</servlet-class></servlet><servlet-mapping><servlet-name>AddServlet</servlet-name><url-pattern>/add</url-pattern></servlet-mapping><!--用户发请求 action=add当前项目中 web.xml中找到url-pattern=/add找12行的名字 servlet-name =Addsevlet找到和servlet-mapping中servlet-name一致的servlet,即第8行找到第八行servlet-class用户发送的post请求 ,因此会执行AddServlet中的doPost方法-->
</web-app>

通过url-pattern找到对应的servlet-name(目前简单这样子理解,之后学习的过程中会注意)

在根据servlet-name找到我们创建的类所需要初始化的服务。

​
public class AddServlet extends HttpServlet {//响应页面中的post请求@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//post方式下设置编码防止中文乱码   get方式目前不需要(基于tomcat8)//设置编码这一句必须在参数获取之前设置req.setCharacterEncoding("UTF-8");String fname = req.getParameter("fname");String pricestr = req.getParameter("price");int price = Integer.parseInt(pricestr);String fcountstr = req.getParameter("fcount");int fcount = Integer.parseInt(fcountstr);String remark = req.getParameter("remark");FruitDAO fruitDAO = new FruitDAOImpl();boolean flag = fruitDAO.addFruit(new Fruit(0, fname, price, fcount, remark));System.out.println(flag?"添加成功!":"添加失败");}
}​

二:细节

2.servlet的继承关系(1、继承关系:javax.servlet.Servlet接口javax.servlet.GenericServlet抽象类javax.servlet.HttpServlet 抽象子类(2、相关方法:Servlet:void init(config)-初始化方法void service(request,response) -服务方法void destroy()-销毁方法javax.servlet.GenericServlet:void service(request,response) 仍然是抽象的javax.servlet.HttpServlet:void service(request,response)(1.String method = req.getMethod(); 获取请求的方式各种if判断,根据请求方式不同决定去调用不用的do方法在httpservlet抽象类中,do方法都差不多(3.小结:继承关系 HttpServlet->GenericServlet->ServletServlet中的核心方法服务方法:当有请求过来时service方法会自动响应(Tomcat容器调用)

三:servlet的生命周期

1)生命周期:从出生到死亡的过程就是生命周期。对应Servlet中的3个方法init,service,destroy2)默认情况下,第一次接受请求会Servlet会使用反射进行实例化(调用构造方法())、初始化(init())然后服务(service())第二次请求开始每一次都会服务,当容器关闭时所有的servlet实例会被销毁3)通过案例发现:Servlet实例Tomcat只会创建一个,所有请求都依赖这个实例去响应第一次请求时会初始实例化好处:提供系统的启动速度坏处:第一次请求时耗时较长因此,如果要提高响应速度则需要设置Servlet的响应时机4)Servlet初始化时机:默认是第一次请求时 初始化可以通过web.xml中的 <load-on-startup>设置启动时机,数字越小启动越靠前5)Servlet在容器中是单例、线程不安全的因此尽量不要再Servlet中定义成员变量。如果不得不加成员变量:不要修改成员变量的值不要根据成员变量的值做一些判断

四:HTTP协议

HTTP:Hyper Text Transfer Protocol 超文本传输协议
1)HTTP是无状态的
2)HTTP请求响应包含两个部分:请求和响应-请求:请求包含3个部分;1.请求行;2、请求消息头 3、请求主体请求行包含三个信息:1.请求的方式 2.请求的URL 3.请求的协议版本。请求消息头中包含许多客户端需要告诉服务器的信息,比如浏览器的星号、版本、客户端接受的类型、发送内容的类型等等请求体:三种情况get方式,没有请求体,但有queryString(紧跟url之后)post方式:有请求体,form datajson格式:有请求体request payload-响应:响应也包含三个部分:1.响应行 2.响应头 3.响应体响应行包含三个信息:1.协议 2.响应状态码 3.响应状态响应头:包含了服务器的信息、服务器发送给浏览器的信息(内容的媒体类型、编码、长度)响应体:响应的实际内容()

五:会话

1)-HTTP是无状态的:服务器无法判断两次请求是不是一个客户端发过来的-现实问题:第一次请求是添加商品到购物车 第二次请求是结账;如果无法区分是不是一个客户端发过来的就会发生混乱(我结账结的别人的购物车)-通过会话跟踪技术解决无状态的问题
2)会话跟踪技术-客户端第一次发送请求给服务器,服务器获取session,获取不到则创建新的,然后响应给客户端-下次客户端给服务器发送请求时,会把sessionId带给服务器,服务器会判断这次请求和上次请求是同一个客户端,从而能够区分-常用的API:request.getSession() ->获取当前的会话,没有则创建新的会话request.getSession(true) ->效果和不带参数的一样request.getSession(false) ->获取当前会话,没有则返回Null,不会创建新的sessionsession.getId() ->获取sessionIDsession.isNew() ->判断当前session是否是新的session.getMaxInactiveInterval() ->session的非激活间隔时长默认为1800s,(即不操作的情况下session的存在时长)session.setMaxInactiveInterval() ->设置非激活间隔时长session.invalidate() ->强制性让会话立即失效3)Session保存作用域session的保存作用域和某个具体的session是对应的常用的API:void session.setAttribute(k,v)Object session.getAttribute(k)void removeAttribute(k)

六:

1)服务器内部转发:request.getRequestDispatcher("...").forward(request,response)一次请求响应的过程,对于客户端而言内部的变化不知道地址栏没有变化
 
2)客户端重定向:request.sendRedirect("...")两次请求的响应,客户端知道URL的变化地址栏有变化

 

 
七:Thymeleaf -视图模板技术

//servlet3.0开始支持注解的方式注册
@WebServlet("/index")
public class IndexServlet extends com.atguigu.myssm.myspringmvc.ViewBaseServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {FruitDAO fruitDAO = new FruitDAOImpl();List<Fruit> fruitList = fruitDAO.getFruitList();//保存到session中HttpSession session = req.getSession();session.setAttribute("fruitList",fruitList);//处理模板//Thymeleaf会将index这个逻辑视图的名称对应到物理视图名称上去//逻辑视图名称:index//物理视图名称:view-prefix + 逻辑视图名称 +view-suffix//所以真是的视图名称为    /     index     .htmlsuper.processTemplate("index",req,resp);}
}​
1).添加Thymeleaf.jar包
2)新建一个servlet类叫viewbaseServlet(从Thymeleaf中拷入)
3)在web.xml文件中添加配置配置prefix和suffix
4)使servlet类继承与viewbaseServlet
5)根据逻辑视图名称得到物理视图名称//处理模板//Thymeleaf会将index这个逻辑视图的名称对应到物理视图名称上去//逻辑视图名称:index//物理视图名称:view-prefix + 逻辑视图名称 +view-suffix//所以真是的视图名称为    /     index     .htmlb

八、保存作用域

(1)page(不用了)
(2)request一次响应的请求范围通过请求2无法获得lili这个数据(3)session一次会话的范围
(4)application一次应用程序的范围(直到Tomcat停止)

 

其他:

//200:正常响应
//404:找不到资源
//405:请求方式不支持
//500:服务器内部错误

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/418071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thymeleaf视图模板的学习以及一些语法用法

流程&#xff1a;客户端向服务端的index组件发送请求&#xff0c;index组件会调用FruitDAO直至获取到数据库的数据&#xff1b;服务端获取到fruitList之后&#xff0c;存入到Session中&#xff0c;方便之后使用&#xff1b;之后调用ViewBaseServlet中的processTemplate方法&…

21 RadioGroup ListFragment

结构 MainActivity.java package com.qf.day21_radiogroupfragment_demo3;import java.util.ArrayList; import java.util.List;import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.…

XML与过滤器、事务管理

一 XML 二&#xff1a;过滤器&#xff08;Filter&#xff09; 功能&#xff1a; WebFilter("/demo01.do") public class Demo01Filter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doF…

Mybatis获取参数值的各种情况

public interface SelectMapper {//根据ID查询用户信息User getUserById(Param("id") Integer id);//查询所有用户信息List<User> getAllUser();//查询用户信息的总记录数Integer getCount();//查询用户信息使用mapMap<String, Object> getUserByIdToMap…

Mybatis中的配置文件xml

在配置的过程中&#xff1a;我们的mapper接口要与映射的XML文件处在同一位置下&#xff08;层级相同&#xff09; 比如&#xff1a;java.mybatis.mapper.ParameterMapper 对应: resoureces.mybatis.mapper.ParameterMapper 否则在进行测试的时候会出现无效的绑定 Invalid b…

Mybatis中处理多对一的映射关系

数据库中的结构&#xff1a; 实体类&#xff1a; 最终结果&#xff1a; 一&#xff1a;级联属性查询 自定义resultMap中可以这样设置&#xff1a; <resultMap id"empAndDeptResultMapOne" type"Emp"><id property"eid" column"ei…

Mybatis中处理一对多的映射关系

一对多与多对一的区别&#xff1a; 以部门表为单位&#xff0c;一个部门会有很多员工为一对多的关系 以员工表为单位&#xff0c;会有多个员工在一个部门中为多对一的关系 一&#xff1a;collection 由于一个部门中会有多个员工&#xff0c;即一对多的关系因此我们需要的实体…

Mybatis中缓存

1、一级缓存 SqlSession sqlSession SqlSessionUtils.getSqlSession();CacheMapper mapper sqlSession.getMapper(CacheMapper.class);Emp emp1 mapper.getEmpByEid(1);System.out.println(emp1);Emp emp2 mapper.getEmpByEid(1);System.out.println(emp2); 可以看到只访问…

HTML页面、CSS样式的以及js学习与介绍

html决定页面显示什么内容 css决定页面的美观程度html语言是解释型语言&#xff0c;解释不出来就不管了&#xff0c;不区分大小写 浏览器是容错的1&#xff09;html页面由一对标签组成:<html><html/>&#xff0c;分别成为开始标签和结束标签 2&#xff09;title:表…

lwip连续发数据卡死_Mysteel:12月全球铁矿石发运量稳中微增 进口矿咋走?

十一月份铁矿石供需差收紧价格上行。展望十二月份&#xff0c; 全球铁矿石发运稳中微增&#xff0c;到港小幅下降&#xff0c;澳洲方面&#xff0c;力拓财年末冲量将带来部分增量&#xff0c;但BHP仍受检修影响环比或将有所减量&#xff0c;整体来看&#xff0c;预计澳洲发运量…

CS模式与BS模式以及Tomcat的了解

一、CS与BS的差异 二、Tomcat Tomcat :web container 可执行文件目录 配置文件 部署项目的一个文件夹&#xff08;现在不怎么用这种方法&#xff09; 在webapp中&#xff0c;可以创建自己的web项目&#xff1a; 里面需要包含一个文件夹&#xff1a;WEB-INF以及自己的网页 之后…

贴花纸怎么贴_电子便签贴怎么使用?怎么在电脑上贴便签

电脑上的电子便签贴怎么使用&#xff1f;怎么在电脑上贴便签&#xff1f;Windows电脑上的便签贴小工具有很多&#xff0c;以敬业签桌面便签贴为例&#xff0c;将这个便签贴小工具在电脑桌面上安装好之后&#xff0c;注册一个会员账号和密码&#xff0c;可参考如下教程演示的步骤…

Servlet学习

一、以添加数据为例 在add.html页面的表单中&#xff0c;我们输入数据&#xff0c;通过点击添加操作&#xff0c;根据action发给我们服务器端的add组件&#xff0c;这个add组件会用JDBC中添加的方法向数据库中添加数据。 1、add组件 AddServlet servlet&#xff08;服务器端…

b 树查找时间复杂度_心里没点 B 树。。。

B 树和红黑树的动画小吴还在制作当中&#xff0c;比想象中的复杂好多好多好多&#xff0c;今天先来一个图解版的 B 树。。。1 引言数据库的增删改查等操作是开发过程中最为常见也是尤为重要的&#xff0c;尤其是现在大数据的兴起&#xff0c;导致数据存储量急剧增加&#xff0c…

HTTP与会话的学习

一、HTTP协议 请求 1请求行 2、请求消息头 3、请求主体 响应 1、响应行 2、响应头 3、响应体 二、会话 HTTP无状态&#xff1a;服务器无法判断两次请求是否为同一个客户端发过来的。 因此通过会话跟踪来解决这个问题 Overrideprotected void service(HttpServletRequest req,…

3650m5服务器内存选择 ibm_各大品牌服务器租用价格表明细(附详细表单)

企业在进行IT建设的花费肯定不少&#xff0c;其中就包括了服务器租用。那如何租到性价比高的服务器&#xff1f;可以先了解一下各大品牌的报价情况&#xff0c;对比服务器租用价格表&#xff0c;找到价格合适的。不过也不可一味的遵从低价格&#xff0c;毕竟一分钱一分货也是一…