Servlet
来源:互联网 发布:mac book pro 2015 编辑:程序博客网 时间:2024/06/05 18:43
1.用IDEA创建web项目
在IDEA中直接点击 File -> New -> Project,
后面直接在左侧有个Java Enterprise
然后配置tomcat、java ee 7
下面列出的是组件,就是jar库,依赖其他的框架,
需要找到web appication ,选上。
创建完毕,然后开始学习会使用servlet教程。
创建完毕,这时候你打开项目中的External Libraries,会发现他自己就帮你把依赖的jar包导入进来了:
2个:JDK1.8 + Tomcat需要依赖的jar包
还有index.jsp 和web.xml
启动tomcat,访问localhost:8080就可以看到index.jsp页面的
内容了。
2.Servlet
代码:
第一部分:
HelloServlet
/** * Author:林万新 lwx * Date: 2017/11/11 * Time: 16:32 */public class HelloServlet implements Servlet { //这个地方我明白了,我自己写的HelloServlet是实现了servlet接口,所以拥有它的所有资源,而ServletConfig //是servlet的,或者更上层的东西;! private ServletConfig servletConfig; @Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("执行了init()..."); this.servletConfig = servletConfig; System.out.println("config : <"+ servletConfig + ">"); } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("执行了service()..."); System.out.println("req: <" + servletRequest + ">, res: <" + servletResponse + ">"); servletResponse.getWriter().print("<h1>HelloServlet</h1>"); } @Override public String getServletInfo() { return null; } @Override public void destroy() { System.out.println("执行了destroy()..."); }}配置web.xml <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>test.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello.servlet.do</url-pattern> </servlet-mapping> 解释: 1. url-pattern <url-pattern/>用来指定Servlet的访问路径,必须以/开头.可以在<servlet-mapping/>配置多个<url-pattern/>, 此时一个Servlet实例就绑定多个URL.可以在<url-pattern/>中使用通配符*,可以使一个Servlet绑定一组URL, 但*不能出现在中间位置,也不能只有*通配符, 另外, 通配符只是一种模糊匹配URL的方式,如果存在更具体的<url-pattern/>,那么会优先选择精确匹配.运行方式:在浏览器上输入:http://localhost:8080/hello.servlet.do结果显示:浏览器内容:HelloServlet控制台内容:执行了init()...config : <org.apache.catalina.core.StandardWrapperFacade@76a327cd>执行了service()...req: <org.apache.catalina.connector.RequestFacade@33a1b77d>, res: <org.apache.catalina.connector.ResponseFacade@15393b10>如果关闭tomcat会显示:执行了destroy()...第2部分:HttpServlet代码:HelloHttpServlet实例/** * Author:林万新 lwx * Date: 2017/11/11 * Time: 17:24 */@WebServlet(name = "HelloHttpServlet", urlPatterns = "/hello_http_servlet.do")public class HelloHttpServlet extends HttpServlet{ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doPost() ..."); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet() ..."); }}运行结果显示: 1)浏览器端 : 输入网址:http://localhost:8080/hello_http_servlet.do 显示什么也没有(因为没写) 2)控制台: doGet() ... 说明执行了doget方法,来获得浏览器的请求第3部分HttpServletRequest例子在第2部分的基础上加上: @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet() ..."); //下面开始使用方法中的参数:HttpServletRequest String referer = request.getHeader("Referer"); String userAgent = request.getHeader("User-Agent"); composeResponse(referer,userAgent,response); } private void composeResponse(String referer,String userAgent,HttpServletResponse response) throws IOException { response.setHeader("Content-Type", "text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); if (referer != null){ writer.print("<h1>来源地址: " + referer + "</h1>"); } else { writer.print("<h1>来自浏览器地址栏</h1>"); } writer.print("<hr>"); writer.print("<h1>来源信息: " + userAgent + "</h1>"); } 在浏览器中运行结果:来自浏览器地址栏来源信息: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36第4部分HttpServletResponse例子第一个例子:@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.sendError(404, "nothing!!"); response.setStatus(404);}运行结果:可以看到浏览器显示:404错误,找不到网页第2个例子 //设置重定向(302, Location) @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); response.setHeader("Location", "http://www.baidu.com");} 运行结果显示: 在浏览器输入网址后,直接跳转到百度页面 HttpServletResponse还提供了另外一种重定向的方式, 直接使用sendRedirect()方法, 避免了以上的步骤protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.sendRedirect("http://www.baidu.com");}第3个例子字符响应流@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter writer = response.getWriter(); writer.print("<html>"); writer.print("<h1>content</h1>"); writer.print("</html>");}缓冲区 PrintWriter的默认缓冲区大小为8K, 因此当响应数据大小<8K时, 数据存放在缓冲区, 而不会立刻发送到浏览器, 直到Servlet执行结束,因此如果希望马上发送给浏览器, 需要调用Response的flushBuffer()方法手动刷新缓冲区.第5部分ServletConfig在容器初始化Servlet时, 会将一个ServletConfig实例传给init()方法,其封装了@WebServlet/部署描述符传递给Servlet的配置信息:在helloservlet中使用@Override public void init(ServletConfig servletConfig) throws ServletException { System.out.println("执行了init()..."); this.servletConfig = servletConfig; //System.out.println("config : <"+ servletConfig + ">"); //在容器初始化Servlet时, 会将一个ServletConfig实例传给init()方法,其封装了@WebServlet/部署描述符传递给Servlet的配置信息: Enumeration<String> names = servletConfig.getInitParameterNames(); while(names.hasMoreElements()){ String name = names.nextElement(); String value = servletConfig.getInitParameter(name); System.out.println(name + "->" + value); } }web.xml下配置 <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>test.HelloServlet</servlet-class> <init-param> <param-name>admin</param-name> <param-value>com.lwx</param-value> </init-param> <init-param> <param-name>e-mail</param-name> <param-value>1203631049@qq.com</param-value> </init-param> </servlet> 运行结果: 在控制台可以看到输出如下: 执行了init()...admin->com.lwxe-mail->1203631049@qq.com第6部分ServletContextServletConfig中提供了获取ServletContext的方法getServletContext(), ServletContext代表Servlet应用程序,且每个应用程序仅有一个ServletContext实例,其在容器启动时创建, 在容器关闭时销毁, 因此可以利用其在多个Servlet中传递数据. 所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:例子应用初始化参数前面看到ServletConfig可以获取针对本Servlet的初始化参数,而利用ServletContext可以获取针对本应用程序的公共初始化参数: 在web.xml下配置 <context-param> <param-name>admin</param-name> <param-value>lwx</param-value> </context-param> <context-param> <param-name>email</param-name> <param-value>1203631049@qq.com</param-value> </context-param> 在hellohttpservlet下protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("doGet() ..."); // ServletContext context = getServletContext(); String admin = context.getInitParameter("admin"); String email = context.getInitParameter("email"); System.out.printf("admin %s%n",admin); System.out.printf("email %s%n",email); }运行结果显示:在控制台输出:doGet() ...admin lwxemail 1203631049@qq.com获取资源可以使用ServletContext来获取Web应用下的资源路径/资源流等内容:
阅读全文
0 0
- Servlet
- servlet
- Servlet
- servlet
- Servlet
- servlet
- servlet
- Servlet
- Servlet
- servlet
- Servlet
- servlet
- servlet
- servlet
- Servlet
- servlet
- servlet
- servlet
- 【Python】从字符串中提取字母字符串的几种方法
- wampserver允许同一局域网下(手机或其他设备)访问配置教程
- vmware安装方法及共享文件夹设置方法
- 整数补码——如何定义相反数。
- Docker容器和本机之间的文件传输
- Servlet
- Git版本管理--基础操作
- 1082字符串
- synchronize关键字互斥
- Nginx指定用户
- 第十周
- ajax,json学习笔记(四)跨域
- fzu 2238 Daxia & Wzc's problem
- 1095求和问题