关于servlet:HttpServletResponse介绍及应用

web服务器接管到客户端http申请,针对这个申请,别离创立一个代表申请的HttpServletRequest对象,代表响应的一个HttpServletResponse; 如果要获取客户端申请过去的参数:找HttpServletRequest如果要给客户端响应一些信息:找HttpServletResponse1、简略分类负责向浏览器发送数据的办法 ServletOutputStream getOutputStream() throws IOException; PrintWriter getWriter() throws IOException;负责向浏览器发送响应头的办法 void setCharacterEncoding(String var1); void setContentLength(int var1); void setContentLengthLong(long var1); void setContentType(String var1); void setDateHeader(String var1, long var2); void addDateHeader(String var1, long var2); void setHeader(String var1, String var2); void addHeader(String var1, String var2); void setIntHeader(String var1, int var2); void addIntHeader(String var1, int var2);响应的状态码 int SC_CONTINUE = 100; int SC_SWITCHING_PROTOCOLS = 101; int SC_OK = 200; int SC_CREATED = 201; int SC_ACCEPTED = 202; int SC_NON_AUTHORITATIVE_INFORMATION = 203; int SC_NO_CONTENT = 204; int SC_RESET_CONTENT = 205; int SC_PARTIAL_CONTENT = 206; int SC_MULTIPLE_CHOICES = 300; int SC_MOVED_PERMANENTLY = 301; int SC_MOVED_TEMPORARILY = 302; int SC_FOUND = 302; int SC_SEE_OTHER = 303; int SC_NOT_MODIFIED = 304; int SC_USE_PROXY = 305; int SC_TEMPORARY_REDIRECT = 307; int SC_BAD_REQUEST = 400; int SC_UNAUTHORIZED = 401; int SC_PAYMENT_REQUIRED = 402; int SC_FORBIDDEN = 403; int SC_NOT_FOUND = 404; int SC_METHOD_NOT_ALLOWED = 405; int SC_NOT_ACCEPTABLE = 406; int SC_PROXY_AUTHENTICATION_REQUIRED = 407; int SC_REQUEST_TIMEOUT = 408; int SC_CONFLICT = 409; int SC_GONE = 410; int SC_LENGTH_REQUIRED = 411; int SC_PRECONDITION_FAILED = 412; int SC_REQUEST_ENTITY_TOO_LARGE = 413; int SC_REQUEST_URI_TOO_LONG = 414; int SC_UNSUPPORTED_MEDIA_TYPE = 415; int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416; int SC_EXPECTATION_FAILED = 417; int SC_INTERNAL_SERVER_ERROR = 500; int SC_NOT_IMPLEMENTED = 501; int SC_BAD_GATEWAY = 502; int SC_SERVICE_UNAVAILABLE = 503; int SC_GATEWAY_TIMEOUT = 504; int SC_HTTP_VERSION_NOT_SUPPORTED = 505;1.1、常见利用1、向浏览器输入音讯2、下载文件1)要获取下载文件的门路2)下载的文件名是啥?3)设置想方法让浏览器可能反对下载咱们须要的货色4)获取下载文件的输出流5)创立缓冲区6)获取输入流对象 7)将FileOutputStream流写入到buffer缓冲区8)应用OutputStream将缓冲区中的数据输入到客户端! ...

June 11, 2021 · 2 min · jiezi

关于servlet:对HttpServletRequest中的Header进行增删

HttpServletRequest 没有提供批改/删除的ApiHttpServletRequest中定义的对Header的操作全是只读,没有批改。 public interface HttpServletRequest extends ServletRequest { ... public long getDateHeader(String name); public String getHeader(String name); public Enumeration<String> getHeaders(String name); public Enumeration<String> getHeaderNames(); public int getIntHeader(String name); ...}HttpServletRequest 只是一个接口,实现由Servlet容器提供。不论是任何容器,实现类,必定是要把申请的Header存储在某个中央,于是能够通过反射来对存储Header的容器进行增删。 先定义一个测试的Controller这个Controller很简略,把客户端的所有Header,以JSON形似响应给客户端。 import java.util.ArrayList;import java.util.Enumeration;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/demo")public class DemoController { // 遍历所有申请Header,响应给客户端。 map<string, string[]> @GetMapping public Object demo (HttpServletRequest request) { Map<String, List<String>> headers = new LinkedHashMap<>(); Enumeration<String> nameEnumeration = request.getHeaderNames(); while (nameEnumeration.hasMoreElements()) { String name = nameEnumeration.nextElement(); List<String> values = headers.get(name); if (values == null) { values = new ArrayList<>(); headers.put(name, values); } Enumeration<String> valueEnumeration = request.getHeaders(name); while (valueEnumeration.hasMoreElements()) { values.add(valueEnumeration.nextElement()); } } return headers; }}应用Tomcat作为容器Tomcat对HttpServletRequest的实现Tomcat应用了外观模式(Facade),这个实现略微有一点点简单 ...

May 10, 2021 · 2 min · jiezi

关于servlet:SpringBoot工程中Web-mvc-请求参数的处理servlet

背景剖析传统java web利用,例如在servlet中获取申请数据,咱们可能间接HttpServletRequest对象获取申请中的url,参数等相干信息(request.getParameter("...")).当然咱们获取到这些参数当前,咱们可能还要进行参数的解析,类型的转换等等. 思考:第一:如果咱们在一个传统的servlet利用中,向服务端发送了一个这样的申请,例如http://localhost/findObjects?pageCurrent=1此时服务端要获取申请中的pageCurrent的值,并赋值给你整数变量你会怎么做? `String page=request.getParameter("pageCurrent");if(page!=null&&"".equals(page)){ Integer pageCurrent=Integer.parseInt(page);}`第二:如果咱们在一个传统的servlet利用中,向服务端发送了一个这样的申请,例如http://localhost/deleteObjects?ids=1,2,3,4,5此时服务端要获取申请中的ids值,而后将这个ids字符串中多个id值存储一个整数数组,你会怎么做? String idsStr=request.getParameter("ids");String []idArray=idsStr.split(",");Integer []ids=new Integer[idArray.length];for(int i=0;i<idArray.length;i++){ ids[i]=Integer.parseInt(idArray[i]);}第三:如果咱们在一个传统的servlet利用中,向服务端发送了一个这样的申请,例如http://localhost/saveObject?id=10&name=20&remark=30此时服务端获取了申请数据当前,要将申请数据存储到Goods对象中,你会怎么做呢? String id=request.getParameter("id");String name=request.getParameter("name");String remark=request.getParameter("remark");Goods g=new Goods();g.setId(Integer.parseInt(id));g.setName(name);g.setRemark(remark)对于如上几种申请参数获取,解析,封装.这样的过程,在咱们的程序中可能会重复呈现,可能对如上重复执行的逻辑或模板性的代码进行简化,进而进步开发效率? 1)间接量形式(八种根本数据类型或者封装类,字符串类型,日期类型,数组)2)pojo对象形式(要求pojo对象中提供与申请参数匹配的set办法)3)map对象形式(须要应用指定注解办法中map类型参数进行形容)4)Rest格调的url中的参数. 1)Spring MVC 管制层办法中的参数值都来自于哪个对象?request2)Spring MVC 管制层办法参数中罕用注解你晓得有几个呢?2.1)@RequestParam (定义参数规定,例如参数是否可选,指定获取哪个参数的值)2.2)@DateTimeFormat (定义能够获取的日期的日期格局)2.3)@RequestBody(示意参数能够接管客户端post申请提交的json原生数据)2.4)@PathVariable(示意参数的值来自url中{}表达式中的数据)3)Spring MVC管制办法上定义申请形式,申请url的注解你理解的有哪些?3.1)@RequestMapping(value="/doGet",method=RequestMethod.GET)3.2)@GetMapping("/path") 个别利用于查问数据的申请形式定义3.3)@PostMapping("/path") 个别利用于增加数据的申请形式定义3.4)@DeleteMapping("/path") 个别利用于删除数据的申请形式定义3.5)@PutMapping("/path") 个别利用于更新数据的申请形式定义 BUG? 1)400 (客户端向服务端传递的申请参数与服务端可解决的模式不匹配)2)405 (客户端申请形式与服务端定义的申请解决形式不匹配)3)404 (客户端申请的资源不存在)

March 13, 2021 · 1 min · jiezi

关于servlet:过滤器和监听器

过滤器和监听器次要内容过滤器介绍 Filter 即为过滤,用于在 Servlet 之外对 Request 或者 Response 进行批改。它次要用于对用户申请进行预处理,也能够对 HttpServletResponse 进行后处理。应用 Filter 的残缺流程: Filter 对用户申请进行预处理,接着将申请交给 Servlet 进行解决并生成响应,最初 Filter 再 对服务器响应进行后处理。在一个 web 利用中,能够开发编写多个 Filter,这些 Filter 组合 起来称之为一个 Filter 链。 单个过滤器 多个过滤器 若是一个过滤器链:先配置先执行(申请时的执行程序);响应时: 以相同的程序执行。 在 HttpServletRequest 达到 Servlet 之前,拦挡客户的 HttpServletRequest 。依据须要查看HttpServletRequest,也能够批改 HttpServletRequest 头和数据。 在HttpServletResponse 达到客户端之前,拦挡 HttpServletResponse。依据须要查看 HttpServletResponse,也能够批改 HttpServletResponse头和数据。 实现 能够通过实现一个叫做javax.servlet.Fileter的接口来实现一个过滤器,其中定义了 三个办法,init(), doFilter(), destroy()别离在相应的机会执行。前期察看生命周期。 Filter 的实现只须要两步: Step1: 编写 java 类实现 Filter 接口,并实现其 doFilter 办法。 ...

November 27, 2020 · 4 min · jiezi

关于servlet:Servlet

Servlet次要内容 ----IDEA的装置与应用 IDEA 全称 IntelliJ IDEA,由JetBrains公司开发,是java编程语言开发的集成环境。在业界被公认为最好的java开发工具,尤其在智能代码助手、代码主动提醒、重构、J2EE反对、各类版本工具(git、svn等)、JUnit、CVS整合、代码剖析、 翻新的GUI设计等方面的性能能够说是超常的。 IDEA的特色性能智能选取丰盛的导航模式历史记录性能编码辅助灵便的排版性能代码查看完满的主动代码实现版本控制的反对… IDEA的下载在浏览器中IntelliJ IDEA百度一下,关上如下官网进入官网,单击DOWNLOAD抉择指定版本,点击DOWNLOAD点击保留,进行下载下载之后的文件IDEA的装置双击运行安装程序,点击 “Next” 下一步批改装置门路(也可应用默认门路),点击 "Next”依据本人电脑的操作系统,来进行相应的抉择默认即可,间接抉择 “Install” ,进行装置装置胜利,可抉择运行IDEA,点击 “Finish” 实现装置若之前装置过其余版本的IDEA,会提醒是否导入原来的配置(抉择不导入即可)抉择本人喜爱的主题,而后始终抉择 “Next”。抉择 "Activation code"形式,输出激活码,点击 “OK”呈现如下画面,则示意激活胜利IDEA创立我的项目创立Java我的项目点击 “Create New Project”增加新的 JDK 版本 (idea默认应用自带的版本)抉择JDK版本,而后 “Next”抉择 “Next”设置项目名称及工作空间我的项目目录构造及提示信息 (提示信息可抉择"Close")创立Java类点击 “src” —> “new” —> “package”,创立一个文件包设置包名,与Eclipse的包相似在包上面创立 Java 类文件,点击包名 —> “New” —> “Java Class”抉择类型,并设置类的名称在类中写一个main办法执行main办法形式一:代码左侧的绿色三角符号形式二:在类中右键,抉择Run或Debug形式三:点击最上方菜单栏的Run呈现以下弹框,点击要运行的文件名,这里是 Hello 运行后果IDEA的根本设置 应用IDEA时,能够对它进行一些简略的设置,通过设置用户的偏好设置,可进步使用者的体验感。 进入设置页面抉择右下角的 “Configure”,抉择"Settings" (或在IDEA中,抉择左上角的 “File”,抉择"Settings")进入设置页面设置字体在Settings窗口中,点击 “Editor” —> “Color Scheme”抉择 “Color Scheme Font”,设置字体格调和字体大小,设置完之后抉择 “Apply” 利用设置中文字体Idea更新2019.2后 中文字体的默认成果 批改字体之后的成果 解决方案: “Editor” —> “Font” —> “Fallback font”, 抉择 SimHei ...

November 25, 2020 · 9 min · jiezi

关于servlet:Servelet

1.什么是servelet:Servelet实质上是一段Java程序,和之前的Java程序不同的是,Servlet程序无奈独立运行,须要将Servlet程序放在服务器中(比方tomcat服务器),由服务器调用才能够执行。-----Servlet: 服务器端的Java程序. 2.Servelet作用:其作用是对服务器接管过去的申请进行解决(作用为解决申请) 继承HttpServlet类,默认会笼罩doGet办法和doPost办法,两个办法的作用为: doGet办法:当浏览器发送申请的形式为GET提交时, 将会调用doGet办法来处理申请 doPost办法:当浏览器发送申请的形式为POST提交时,将会调用doPost办法来解决申请提醒:如果当GET提交和POST提交解决代码雷同时,能够将代码写在其中一个方法里(例如写在doGet中),并在另外一个办法(例如doPost)中调这个办法。这样一来,不论是GET提交还是POST提交,最终doGet办法都会执行,都会对申请进行解决!! Servlet在web.xml中的配置创立servelet时,会主动配置web.xml文件(如果是复制servelet文件,配置文件不会跟着一起复制,需本人配置)(3.0以上版本创立web工程不主动增加web.xml)对于下面的配置信息:a) Eclipse每创立一个Servlet,就会在web.xml文件中增加两个标签:<servlet>和<servlet-mapping>标签(能够将这两个标签看成一个组的标签)b) <servlet>和<servlet-mapping>标签内都会有一个<servlet-name>标签,标签的内容能够更改,但要求更改后的这两个<servlet-name>标签的内容也必须统一。c) <servlet-class>标签用于配置Servlet类的全限定类名(即包名+类名)须要留神:如果在创立Servlet后批改了Servlet类的名称,这个中央也要一起更改,否则将会呈现"ClassNotFoundException" 即类找不到异样d) <url-pattern>标签用于配置浏览器以什么门路拜访以后Servlet(即Servlet对外拜访的门路),默认的门路是:/类名例如:下面为HelloServlet配置的<url-pattern>为/HelloServlet,因而咱们在浏览器中的拜访门路则为:http://主机名/web我的项目拜访门路... request和response介绍request:封装了浏览器发送给服务器的申请信息(申请行、申请头、申请实体等)申请参数:超链接前面通过问号提交的数据,都是申请参数。申请参数时的中文乱码:get:tomcat8.0当前提交不会post:request.setCharacterEncoding("utf-8");(告诉服务器在接管POST提交的参数时,应用utf-8编码来接管!) 作为域对象应用request对象上的map汇合以及request对象的所在范畴称之为域对象存数据:request.setAttribute(String attrName, Object attrValue);-- 往request域中存入一个域属性,属性名(key)只能是字符串,属性值(value)能够是任意类型。取对象:request.getAttribute(String attrName);-- 依据属性名(key)获取对应的属性值(value)。返回的是一个Object类型的对象。 申请转发(forward)(1)转发是一次申请,一次响应(2)申请转发前后,浏览器的地址栏地址不会发生变化。(浏览器--拜访--> A --转发--> B,地址栏地址始终指向A的地址)(3)申请转发前后的两个资源必须属于同一个Web利用,否则将无奈进行转发。(A--转发-->B,A和B必须属于同一个Web利用!)(4)在转发时,能够带数据到目的地(比方,从A转发到B,能够从A带数据给B,须要配合域对象才能够 response:封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service办法执行完后,服务器再将response中的数据取出,依照HTTP协定的格局发送给浏览器。向客户端发送数据:PrintWriter out = response.getWriter();乱码问题:在响应数据之前,告诉服务器应用utf-8发送数据。response.setContentType( "text/html;charset=utf-8" ); 实现重定向(redirct)(1)重定向是两次申请、两次响应(2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次申请都是通过浏览器发动,浏览器晓得这个跳转的过程,因而地址栏地址会变动)(3)重定向前后的request对象不是同一个(因为重定向是两次申请,服务器会依据两次申请创立两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)(4)重定向前后的两个资源能够是来自不同的web利用,甚至能够是来自不同的服务器。(进行跳转的两个资源之间没有限度)实现代码:response.sendRedirect(所重定向到资源的URL地址); 申请转发(forward)和重定向(redirect)的区别?(1)申请转发是一次申请,一次响应; 而重定向是两次申请两次响应(2)申请转发前后地址栏地址不会发生变化; 而重定向前后地址栏地址会发生变化(3)申请转发前后的request对象是同一个,能够配合request域对象带数据到目的地;而重定向前后的request对象不是同一个, 不能联合request域对象在重定向前后带数据.(4)申请转发要求两个资源必须属于同一个Web利用; 而进行重定向的两个资源能够是同一个Web利用,也能够不是同一个Web利用,甚至能够是来自于不同的主机或服务器. 什么时候用申请转发(forward)?什么时候用重定向(redirect)?(1)如果心愿跳转前后地址栏地址不会发生变化, 只能应用转发; 如果心愿跳转前后地址栏地址会发生变化, 只能应用重定向(2)如果心愿在跳转前后, 可能通过request对象带数据到目的地, 只能应用转发(3)如果仅仅是做一个跳转,没有其余要求,此时举荐应用转发(转发是一次申请,一次响应,能够缩小拜访服务器的次数,升高服务器的压力)

November 7, 2020 · 1 min · jiezi

关于servlet:Servlet入门

1.什么是Servlet?Servlet是由SUN公司提供的一门动静Web资源开发技术 动态web资源:不同的人,在不同的条件下拜访后看到的是雷同的成果,这样的资源叫做动态web资源(html,css,js等) 动静web资源:在不同的拜访条件下看到的是不同的成果,这样的资源叫做动静web资源。(Servlet,jsp,.net,php等) Servlet实质上是一段Java代码,和之前的Java程序不同的是,Servlet程序无奈独立运行,须要讲Servelt程序放在服务器中,(比方tomcat服务器),由服务器调用才能够执行。 Servlet:服务器端的Java程序. Servlet是运行在服务器端的Java程序,其作用是什么? 其作用是对服务器接管过去的申请进行解决(作用为解决申请) 2.开发Servlet程序第一步:写一个类,实现一个Servlet接口或者继承Servlet接口的子类(GenericServlet/HttpServlet),并实现其中的办法 Servlet接口 GenericServlet类(抽象类) HttpServlet类第二步:在Web利用的web.xml文件中配置Servlet程序对外拜访门路。Eclipse在创立一个Servelt时,会在web.xml文件中生成Servlet配置,所以不须要咱们手动配置。 应用Eclipse创立Web我的项目 以上是Web我的项目在工程视图(Project)和包视图(package)下构造,举荐应用包视图! 1.创立一个Web工程:在左侧窗口中,点击鼠标右键---->New--->Dynamic Web Project. 2.接着会弹出如下窗口: 留神: (1) 3.0版本不会创立web.xml文件,并且创立Servlet时也不会在web.xml文件中生成Servelt相干的配置信息,记得改为2.5. (2) Target runtime选项中如果没有可选的服务器,可点击右侧的New Runtime...进行配置。 详情操作步骤在《5.2配置Target runtime(Web我的项目运行环境)》 3.Eclipse中创立的Web工程的目录构造 (1) day09 : 工程名称/项目名称 (2) src : 源码目录,创立的java源文件,配置文件(properties,xml文件等)都能够放在src源码目录下 (3) build/classes: 编译文件的输入目录,src源码目录中的文件编译后会输入到classes目录下。 其中的classes目录会在公布时会放在WEB-INF目录下,随着我的项目一起公布到服务器中(4) WebContent :就是Web利用的目录,其中能够寄存 html,css,js,jsp,图片以及编译后的class文件,jar包,web.xml文件等。未来公布我的项目到服务器,其中就是将WebContent中的所有内容一起公布到服务器中。 (5) WebContent/WEB-INF/lib: 用于寄存以后我的项目所依赖的jar包。比方要拜访mysql数据库,须要导入mysql驱动包,间接将jar包拷贝到lib目录下即可!(也不必再去做 build path --> add to build path) 应用Eclipse创立Servlet 1.选中我的项目中的src目录,鼠标右键--->New--->Servlet 2.在弹出的窗口中,依据提醒填写内容 3.点击Finish即可实现Servlet创立过程,创立好的Servlet如下: 通过Eclipse创立Servlet,默认继承HttpServlet。因为HttpServlet也是Servlet接口的子类,让HelloServlet继承HttpServlet,相当于间接实现了Servelt接口 ...

September 30, 2020 · 1 min · jiezi

关于servlet:JavaWebServlet概述及快速入门

Servlet概述servlet = server + applet: 运行在服务器端的java程序Servlet是一个接口. 一个类要想通过浏览器被拜访到, 那么这个类就必须间接或间接的实现Servlet接口作用: 接管申请, 解决逻辑, 响应后果疾速入门案例案例需要编写一个一般的java类,通过浏览器能够拜访代码编写步骤剖析创立Web我的项目编写一般Java类, 实现Servlet接口在web.xml中配置url-pattern部署web我的项目启动测试步骤实现创立Web我的项目 编写一般Java类,实现Servlet接口执行原理

September 16, 2020 · 1 min · jiezi

关于servlet:Servlet和Tomcat

一.Tomcat: web服务软件,中小型的JavaEE服务器,仅仅反对大量的JavaEE标准servlet/jsp。批改端口号:在conf/server.xml,也能够在idea中批改部署web我的项目的办法有三种 间接将我的项目放到webapps目录下即可。配置conf/server.xml文件在confCatalinalocalhost创立任意名称的xml文件。在文件中编写<Context docBase="D:hello" />* 虚拟目录:xml文件的名称部署我的项目到idea中,new project,java ee。而后去配置tomcat的配置文件 二.Servlet: 实现: 定义一个类,实现Servlet接口:public class ServletDemo1 implements Servlet实现接口办法去web.xml去配置Servlet<!--配置Servlet --> <servlet> <servlet-name>demo1</servlet-name> <servlet-class>cn.itcast.web.servlet.ServletDemo1</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo1</servlet-name> <url-pattern>/demo1</url-pattern> </servlet-mapping> 执行原理: 当服务器承受到客户端浏览器的申请后,会解析申请URL门路,获取拜访的Servlet的资源门路查找web.xml文件,是否有对应的<url-pattern>标签体内容。如果有,则在找到对应的<servlet-class>全类名tomcat会将字节码文件加载进内存,并且创立其对象调用其办法也能够用Servlet3,在创立我的项目时能够抉择,用Servlet3就比较简单,不必去配置web.xml文件,只须要注解配置,其中/demo就是urlPatterns(),和在web.xml配置的原理一样。 @WebServlet("/demo")public class ser implements Servlet{ @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("init"); }Servlet中的生命周期办法: 被创立:执行init办法,只执行一次 默认状况下,第一次被拜访时,Servlet被创立能够配置执行Servlet的创立机会。在<servlet>标签下配置 1. 第一次被拜访时,创立: `<load-on-startup>`的值为正数在服务器启动时,创立: <load-on-startup>的值为0或正整数Servlet的init办法,只执行一次,阐明一个Servlet在内存中只存在一个对象,Servlet是单例的。 多个用户同时拜访时,可能存在线程平安问题。解决:尽量不要在Servlet中定义成员变量。即便定义了成员变量,也不要对批改值。比方买票,定义个成员变量,他就会共享。如果同时买票,或者退票,就会呈现问题。提供服务:执行service办法,执行屡次:每次拜访Servlet时,Service办法都会被调用一次。被销毁:执行destroy办法,只执行一次。 Servlet被销毁时执行。服务器敞开时,Servlet被销毁,只有服务器失常敞开时,才会执行destroy办法。destroy办法在Servlet被销毁之前执行,个别用于开释资源。

August 27, 2020 · 1 min · jiezi

关于servlet:Eclipse中创建的Web工程的目录结构

(1) day09: 工程名称/项目名称(2) src: 源码目录, 创立的java源文件、配置文件(properties、xml文件等)都能够放在src源码目录下(3) build/classes: 编译文件的输入目录, src源码目录中的文件编译后会输入到classes目录下。其中的classes目录在公布时会放在WEB-INF目录下,随着我的项目一起公布到服务器中(4) WebContent: 就是Web利用的目录,其中能够寄存 html、css、js、jsp、图片以及编译后的class文件、jar包、web.xml文件等. 未来公布我的项目到服务器,其实就是将WebContent中的所有内容一起公布到服务器中。(5) WebContent/WEB-INF/lib: 用于寄存以后我的项目所依赖的jar包。比方要拜访mysql数据库,须要导入mysql驱动包,间接将jar包拷贝到lib目录下即可!(也不必再去做 build path --> add to build path)

August 27, 2020 · 1 min · jiezi

关于servlet:添加Servlet模板

1.通过Eclipse创立一个Servlet类,将其中的内容批改成本人冀望的模板格局,并复制其内容,例: package ${enclosing_package};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;/** * author: bjzhangsz@tedu.cn * datetime: ${date} ${time} */public class ${primary_type_name} extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {![image](/img/bVbLWib) doGet(request, response); }}2.点击菜单栏中的windows-->3.在呈现的窗口左侧顺次点击:Java-->Editor-->templates-->(在左边的窗口中) 点击New… :4.呈现的新窗口填写:5.替换包门路和类名(作用是在新建Servlet生成的Servlet模版中应用以后类的包门路和类型)图: 成果:6.点击OK保留,创立新的Servlet文件,测试: 将原有的Servlet所有内容删除,并输出"servlet",按"Alt+/"生成

August 26, 2020 · 1 min · jiezi

关于servlet:Servlet的管理机制生命周期和继承关系

Servlet的管理机制浏览器每一次拜访服务器都会发送一个信息的申请,每一次发送申请如果是申请操作,那么调用的Servlet对象是惟一的。为了保障Servlet对象是惟一的,就须要让服务器去治理Servlet对象,保障它的唯一性。治理形式次要有如下两种:(采纳Tomcat服务器) - 立刻加载:当服务器启动时,底层就会依据web.xml配置文件找到所有Servlet类,并通过反射机制创建对象将对象保留在汇合中,当须要调用Servlet对象,就从该汇合中取出来- 提早加载:当服务器启动时,不会事后创立所有的Servlet对象,而是什么时候用到就什么时候创立Tomcat服务器采纳的是提早加载的形式(这是默认的形式)当Tomcat启动的时候,Tomcat读取了web.xml配置文件,首先读取申请的操作名和对应的名字,也就是配置文件中的url-parttern和servlet-name,将这两个名字存入一个键值对的汇合中保存起来。并且还有另一个键值对汇合是用来存储和servlet-name对应的servlet-class,然而这个不是一开始就加载,而是当须要用Servlet对象的时候再创立,并将创立之后的对象保留到该汇合中。咱们能够扭转默认加载的形式,只有在web.xml配置文件中,在<servlet>下增加一个配置,<load-on-startup>整数0</load-on-startup><servlet> <servlet-name>test</servlet-name> <servlet-class>TestController</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>那么在Tomcat启动时,这个servlet类就会被创立 Servlet生命周期Tomcat为了更好的治理servlet对象的产生和销毁,提供了三个办法标识Servlet对象的生命周期,别离是init(),service()和destroy(); servlet通过调用init()办法进行初始化 因为servlet对象是单例的,所以init()在servlet第一次创立的时候就被调用,之后就不会再被调用servlet调用service()来解决客户端发送过去的申请每一次服务器收到一个操作申请时,服务器就会产生一个线程并调用servlet,执行service()办法servlet通过调用destroy()办法中值 当servlet生命周期完结时会调用,会调用一次destroy()办法Servlet的继承关系HttpServlt类继承了一个抽象类GenericServletGenericServlet实现了三个接口,别离是Servlet、ServletConfig和SerializableServletConfig接口有四个办法 String getServletName();ServletContext getServletContext();String getInitParameter(String var1);Enumeration<String> getInitParameterNames();Servlet接口外面有五个办法 void init(ServletConofig var1) throws ExceptionServletConfig getServletConfig();void service(ServletRequest var1, ServletResponse var2);void destroy();String getServletInfo();GenericServlet抽象类(实现了ServletConfig和Servlet接口,体现出了缺省适配器模式) 将两个接口中的9个办法都增加了过去,将其中的8个办法都进行了重写,除了Destroy()多增加了一个init()无参数的办法留下一个办法是没有具体实现的service办法增加了log()办法HttpServlet抽象类 存在的目标:增加了具体的申请形式对应的办法,比方doGet、doPostHttpServlet保留了GenericServlet抽象类的Service,本人增加了一个带两个参数HttpServletRequest和HttpServletResponse的service办法,保留的这个service最终调用了自带的service形式。本人增加的service办法内容先获取申请的形式,最初调用绝对应的办法比方doGet/doPost执行本篇文章到此就完结了,次要也是记录我的一个学习过程,请读者带着批评的角度去浏览,如有谬误还望纠正

July 17, 2020 · 1 min · jiezi

关于servlet:Servlet的介绍与使用

Servlet介绍Servlet是运行在Web服务器或应用服务器上的程序,它是作为来自Web浏览器或其余HTTP客户端的申请和HTTP服务器上的数据库或应用程序之间的中间层,上面所说的web服务器以Tomcat为例 MVC架构介绍理解申请和响应的过程能更好的了解Servlet做的事件。这里咱们联合MVC架构进行形容,先介绍什么是MVC V是View的简写,为视图层,就是用户可能看到的局部,比方浏览器的页面C是Controller的简写,为管制层,解决浏览器发送过去的申请,将申请交由模型层去解决,并将解决的最初后果返回给浏览器,中间层的含意。M是Model的简写,为模型层,模型层又能够细分三个局部 service:解决业务逻辑,比如说浏览器发送一个用户登录的申请,服务器接管到之后把它交由管制层去解决,管制层接管到之后交给service,让service去解决用户登录的后果,判断用户的账号和明码是否正确dao:数据长久层,用来读取和写入数据,联合下面提到的登录用例,当service要判断用户的账号和明码是否正确时,service首先要从数据库中查找该账号和对应的明码。这时候service把查找这件事交由给dao去负责,dao连贯数据库查找,将查找获取到的后果包装成domain实体返回给service,service再依据返回的后果进行判断domain:用来示意实体局部,也就是Java中的类,一个用户对象就是一个实体申请和响应的过程联合我所画的图阐明整个过程假如浏览器发给服务器一个登录的申请,整个过程如下: 浏览器向服务器发送一个登录申请,服务器接管到申请之后,调用handler线程解决申请,handler先解析申请,获取申请的资源名和申请携带的参数,之后将申请的资源名和申请携带的参数包装成request对象,并创立response对象,response对象用来寄存响应回来的信息。最初将request和response发给ServletController类ServletController类接管到之后,首先先从request对象中获取申请的资源名,判断是动态资源还是操作资源。因为登录是操作资源,所以ServletController会参考我的项目当中的配置文件,寻找有没有一个叫登录的操作,如果有的话会依据配置文件中登录操作对应的Controller类,并将申请交给这个Controller类。如果没有的话返回404状态码给浏览器,示意并没有这个操作资源这个具体的Controller类是继承自HttpServlet,HttpServlet有一个service办法,controller重写了这个办法。当ServletController将申请交给这个具体的Controller对象,这个对象会执行service办法,在service办法中调用service层的对象解决业务逻辑service执行完之后将后果返回给controller对象,这个对象将失去的后果写回给浏览器浏览器接管后将响应信息展现给用户这就是大抵的一个流程,但并不是所有的申请响应过程都是截然不同,有的可能比较复杂,有的可能比较简单 Servlet的应用在下面提到的申请和响应的过程中,Servlet就是Controller类,controller继承了Servlet类。创立一个Servlet类,须要如下几步(这里我用的是IDEA编译器,应用的Tomcat容器) 创立一个类,继承HttpServlet重写Service办法,办法里带有两个参数HttpServletRequest和HttpServletResponse,办法有两个异样ServletException和IOException,办法是没有返回值的。代码如下:import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class TestController extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("这是Servlet类"); }}配置文件,该配置文件是告知Tomcat服务器有一个本人定义的类须要治理,在我的项目下的web文件夹下的WEB-INFO文件夹中的web.xml文件,配置信息如下: <servlet> <servlet-name>test</servlet-name> <servlet-class>TestController</servlet-class> </servlet> <servlet-mapping> <servlet-name>test</servlet-name> <url-pattern>/test</url-pattern> </servlet-mapping>url-pattern是申请的操作名,servlet-name是申请操作名对应的名字,servlet-class是servlet-name对应的Servlet类。 运行启动Tomcat服务器,关上浏览器输出URL地址+申请的操作名,如下:http://localhost:8080/untitled_war_exploded/test在控制台就能看到TestController执行了,输入信息如下: 本篇文章就到此结束,下篇文章将介绍Servlet对象的继承关系

July 17, 2020 · 1 min · jiezi