servlet

Servlet HTTP method GET is not supported HTTP 405

谁都会走 提交于 2019-12-05 08:33:36
写好一个Servlet后访问时抛出"HTTP method GET is not supported by this URL"的错误,先是自己找了一下原因,后又在网络查找相关的原因后找到解决方案。 问题的原因是用Eclipse生成Servlet时,会在doGet和doPost自动添加默认调用父类的构造方法,如下红色标识代码: /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request,

<1>精研Servlet,HttpServlet的实现追究

蹲街弑〆低调 提交于 2019-12-05 07:52:57
提前声明:个人说的不一定对,如有错误之处,请批评指出. Servlet的优点: servlet可以很好地替代公共网关接口(Common Gateway Interface,CGI)脚本。通常CGI脚本是用Perl或者C语言编写的,它们总是和特定的服务器平台紧密相关。而servlet是用Java编写的,所以它们一开始就是平台无关的。这样,Java编写一次就可以在任何平台运行(write once,run anywhere)的承诺就同样可以在服务器上实现了。servlet还有一些CGI脚本所不具备的独特优点: 1、servlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。与之相反,CGI脚本是短暂的、瞬态的。每一次对CGI脚本的请求,都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI脚本的每一次使用,都会造成程序初始化过程(例如连接数据库)的重复执行。 2、servlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。 3、servlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求

第一个 Maven 应用程序

冷暖自知 提交于 2019-12-05 07:46:21
概述 下面我们来学习如何使用 Maven 创建一个 Java Web 应用程序 # 创建 Maven 项目 选择 File -> New -> Project... 选择 Maven 项目 填写项目信息 选择工作空间 # 目录结构 Java Web 的 Maven 基本结构如下: ├─src │ ├─main │ │ ├─java │ │ ├─resources │ │ └─webapp │ │ └─WEB-INF │ └─test │ └─java 结构说明: src :源码目录 src/main/java :Java 源码目录 src/main/resources :资源文件目录 src/main/webapp :Web 相关目录 src/test :单元测试 # IDEA Maven 项目管理 在 IDEA 界面的右侧 Maven Projects 选项,可以管理 Maven 项目的整个生命周期、插件、依赖等 # 完善 Java Web 程序 # POM 修改 pom.xml 配置,内容如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema

过滤器Filter

拜拜、爱过 提交于 2019-12-05 07:41:43
为什么要有过滤器或者说它在哪里发挥作用? 字符集过滤器:解决web应用中的请求和响应中中文乱码的问题。 访问权限的限制,比如用户未登录访问资源。   2. 以字符集过滤器为例,编码: 创建servlet public class Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("你好,世界"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } 配置web.xml,没有添加过滤器 <servlet> <servlet-name>servlet</servlet-name> <servlet-class>per.lc.Servlet.Servlet</servlet-class> </servlet> <servlet-mapping> <servlet

JavaWeb项目导入Servlet出错(javax.servlet相关异常)

谁说我不能喝 提交于 2019-12-05 06:53:16
转载于: https://blog.csdn.net/JoBo199501/article/details/86680071 右击项目——>属性(Properties)——>找到Build Java Path——>右边有libraries选项,点击——>Add Libraries——>Server Runtime——>next,再选中你的tomcat服务器——>finish,回到Java Build Path右边界面中的Orader and Export——>选中刚刚添加的ok就可以了 来源: https://www.cnblogs.com/rj182jysstudy/p/11911752.html

web.xml模板

谁都会走 提交于 2019-12-05 06:41:46
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置springmvc, 将所有请求交给springmvc来处理 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet<

SpringBoot 源码解析 (七)----- Spring Boot的核心能力 - 自定义Servlet、Filter、Listener是如何注册到Tomcat容器中的?(SpringBoot实现SpringMvc的原理)

浪子不回头ぞ 提交于 2019-12-05 06:27:25
上一篇我们讲了SpringBoot中Tomcat的启动过程,本篇我们接着讲在SpringBoot中如何向Tomcat中添加Servlet、Filter、Listener 自定义Servlet、Filter、Listener Spring容器中声明ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean @Bean public ServletRegistrationBean customServlet() { return new ServletRegistrationBean(new CustomServlet(), "/custom"); } private static class CustomServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("receive by custom servlet"); } } 先自定义一个 Servlet,重写 service实现自己的业务逻辑

Servlet中ServletContext方法getNamedDispatcher() an...

佐手、 提交于 2019-12-05 06:02:01
获取RequestDispatcher有三中方法 1. RequestDispatcher dispatch = request.getRequestDispatcher(arg);这里的参数可以是一个相对路径或者是一个不定的资源( sp, servlet ) 2. RequestDispatcher dispatch = getServletContext.getRequestDispatcher(arg)这里的参数必须是一个绝对路径RUL(已/开始),有效的servlet或者jsp.这里的URL是在web.xml文件里定义的,必须以/开始 3. RequestDispatcher dispatch = getServletContext.getNamedDispatcher("string"); 这里的参数必须是一个servlet的名字.在web.xml定义 Example 1 NamedDispatcher Returns a RequestDispatcher object that acts as a wrapper for the named servlet. getNamedDispatcher(String) method takes the name of the Servlet as parameter which is declared via

Servlet跳转方式sendReDirect()和forward()

戏子无情 提交于 2019-12-05 06:01:47
在web应用服务中,经常会面对不同SERVLET之间的跳转,目前我们可以通过以下两种方式实现: 1.RequestDispatcher.forward() 2.ServletResponse.sendReDirect() 两者的区别: 1.redirect 方式可以 跨应用访问 ,forward 只能在同一个应用中跳转。 2.forward 客户端访问服务器,服务器找到要跳转的相应URL并执行返回给客户端。客户端的地址栏显示的是 原始URL 。 redirect 客户端访问服务器,服务器找到要跳转的URL并将URL发给客户端,再由客户端对新的URL重新发送请求。客 户端的地址栏显示的是 第二次请求的URL 。 3.数据的传输:在request中的数据,forward可以访问,redirect不行,因为redirect已经是一个新的请求。 forward跳转的理解: 1.获得跳转 getRequestDispatcher方法以String参数描述ServletContext作用域的路径。该路径必须相对于ServletContext的根,并且以“/”开头。该方法使用路径(path)来查找servlet,用RequestDispatcher对象包装,然后返回结果对象。如果没有基于指定路径的servlet,提供一个RequestDispatcher返回路径值。

Servlet一次乱码排查后的总结

做~自己de王妃 提交于 2019-12-05 05:58:43
由来 在写一个小小的表单提交功能的时候,出现了乱码,很奇怪request上来的参数全部是乱码,而从数据库查询出来的中文显示到页面正常,锁定肯定是request对象那里出了问题。后来经过排查,发现是我封装的框架中出了问题,总结为在setCharacterEncoding方法之前,调用了getParameter方法,导致字符集改变失败。没看过Tomcat实现Servlet的源码,貌似是一旦调用getParameter方法Request的参数就会全部被解析,从而再调用setCharacterEncoding就无效了。 原理解析 其实编码问题本质还是两点: 浏览器在封装Http请求的时候的编码和服务器在解析Http请求编码不一致 服务器返回数据的时候编码和浏览器解析不同。 那么我们就从这两点入手解析。 浏览器请求 在点击提交表单的那一刻,浏览器把表单内容封装成一个Http请求,数据通过 a=1&b=2 这样的形式直接请求服务器,表单值会被浏览器最一次urlencode,对于不同的请求方式编码不同: Get和Post请求 浏览器会读取页面的编码(页面编码会在Content-type头中体现),用此编码对表单值做urlencode,那么到服务器的编码方式就是你Content-Type里的编码。很多通过JS提交表单为了规避浏览器的urlencode带来的编码混淆