Servlet之路

编程入门 行业动态 更新时间:2024-10-20 16:34:29

Servlet<a href=https://www.elefans.com/category/jswz/34/1770107.html style=之路"/>

Servlet之路


IDE(eclipse[ java se] +myeclipse [ 插件  可以支持jsp/servlet/struct/spring/hibernate....]) response.setCharacterEncoding("utf-8"); 防止中文乱码 response.setContentType("text/html;charset=utf-8"); //直接告诉浏览器以什么编码格式编译 response.setCharacterEncoding(this.getServletConfig().getInitParameter("encoding")); //从配置文件中获取编码格式 文件改名要慎重,因为配置文件中还是用的原来文件名 form中的action应该这样写      /web应用名/Servlet的url
servlet提供了两种页面跳转的方式  Sendredirect     转向      forward     转发 sendRedirect的url格式: /web应用名/servlet url
可以使用a实现页面跳转  href格式为:/web应用名/servlet url
Tomcat原理
import java.*; import java.io.*; public class test {         public static void main(String [] args ) throws Exception{              ServerSocket ss = new ServerSocket(9999);               while ( true ){              Socket s = ss .accept();              System. out .println( "在9999等待连接...." );              OutputStream os = s .getOutputStream();              BufferedReader br = new BufferedReader( new FileReader( "d:\\hello.html" ));              String buf = "" ;               while (( buf = br .readLine())!= null ){                                           os .write( buf .getBytes());              }                             br .close();               os .close();               s .close();              }        } }
浏览器会缓存近期访问网站获取的文件。当你再次访问相同的网站时,浏览器会先判断是否有缓存,有的话直接取,没有的话再访问
端口被占用 查看端口占用情况 netstat -an netstat -anb netstat -ano 用任务管理器关闭占用端口的进程
更改需要的端口号 conf\server.xml <Connector connectionTimeout="2000" port="8080"/>(20秒就超时,端口号为8080)
tomcat的目录结构 bin:启动和关闭comcat的bat文件 conf:配置文件      server.xml:该文件用于配置和server相关的信息,比如tomcat启动端口后,配置Host,配置Context即           web应用 web.xml:该文件配置与web应用(web应用就相当于是一个web站点) tomcat-user.xml:该文件用户配置tomcat的用户密码和权限 lib目录:该目录防止运行tomcat运行需要的jar包 logs目录:存放日志,当我们需要去查看日志的时候,很有用 webapps目录:该目录下,放置我们的web应用(web站点) work工作目录:该目录用于存放jsp被访问后 生成的对应的server文件 和.class文件
配置的代码是 web.xml 文件中添加: <welcome-file-list> <welcome-file>hello.html</welcome-file> </welcome-file-list>
web-inf目录下的 classes 目录将来是存放 class文件 web.xml 配置当前这个web应用的信息


在C:windows/system32/drivers/etc 下的host文件 在tomcat的server.xml里面添加一个主机名
Servlet基础知识 servlet是用纯java写的程序,运行在服务器端,几乎可以完成网站所有的功能,是jsp的基础,被web服务器管理








<!--根据servlet规范,需要将Servlet部署到web.xml文件,该部署配置可以从examples下拷贝--> <servlet>      <!--servlet-name 给该Servlet取名,该名字可以自己定义:默认就使用该Servlet的名字-->      <servlet-name>MyHttpServlet</servlet-name>      <!--servlet-class要指明该servlet放在哪个包下,形式是包/包/../类-->      <servlet-class>com.lch.MyHttpServlet</servlet-class> </servlet>      <!--Servlet的映射--> <servlet-mapping>      <!--这个Servlet-name要和上面的servlet-name名字一样-->      <servlet-name>MyHttpServlet</servlet-name>      <!--url-pattern 这里就是将来访问该Servlet的资源名部分,默认命名规范:就是该Servlet的名字-->      <url-pattern>/MyHttpServlet</url-pattern> </servlet-mapping>
当编译器找不到servlet包

解决办法:

从tomcat lib目录下拷贝一个servlet-api.jar的包到“JDK\jre\lib\ext”目录下

凡是出现找不到包的情况,都可以将找到的包放到JDK\jre\lib\ext下,然后再编译就能够通过

一个注册好的servlet可以被多次映射


在匹配的时候,要参考的标准是: (1)看谁的匹配度高,谁就被选择 (2)*.do的优先级最低
防止中文乱码问题 response.setCharacterEncoding("utf-8");
Servlet单例问题 当Servlet被第一次访问后,就被加载到内存,以后该实例对各个请求服务。即在使用中是单例
因为Servlet是单例,因此会出现线程安全问题:比如: 售票系统.如果不加同步机制,则会出现问题: 原则:      (1)如果一个变量需要多个用户共享,则应当在访问该变量的时候加同步机制                synchronized(对象){//同步代码}       (2) 如果一个变量不需要共享,则直接在doGet()或者doPost()中定义



servlet中的<load-on-startup>配置 需求:当我们的网站启动的时候,可能会要求初始化一些数据,(比如创建临时表)      再比如,我们的网站有一些要求定时完成的任务[定时写日志,定时备份数据库...定时发送邮件]      解决方法:可以通过<load-on-startup>配合 线程知识搞定
先说明<load-on-startup>:通过配置<load-on-startup>我们可以指定某个Servlet自动创建 <!--1表示被init()顺序--> <load-on-startup>1</load-on-startup>

在这里配置的信息只供该servlet读取
如果这里配置的参数可被所有的servlet读取
深度剖析Http协议 超文本传输协议 工作在tcp/ip协议基础上的
通过httpwatch插件来抓取http请求内容 http1.0短连接  http1.1长连接  目前通用的是1.1版本 http是TCP/IP协议的一个应用层协议,http也是我们web开发的基础

request.getHeader("Host");
Referer:可通过它来判断来自哪里 从本网站过来才有值,超链接过来没有值 referer==null||!referer.startsWith("http://localhost:8080/servletPro"); 功能:允许本网站的用户才能访问该servlet文件



200:请求和响应没有发生错误 302:表示当你请求一个资源的时候,服务器返回302表示让浏览器转向另外一个资源 404:表示找不到资源 500:服务器端错误







sendRedirect()的使用 需求:当用户登录成功后,把该用户名字显示再登录成功页面
解决思路 1、使用java基础  static 2、使用sendRedirect() 3、使用session传递信息 既可以传字符串也可以传对象
4、使用request的转向 转向是在web服务器发生的 两个页面使用的是同一个request和response对象
1、使用forward不能转向到该web应用外的url 2、因为forward是发生在web服务器,所以Servlet1和Servlet2使用的是同一个request和response 使用sendRedirect()方法不能通过request.setAttribute()把属性传递给下一个Servlet
面试题: 请问  sendRedirect()和forward区别是什么 答: (1)叫法不同,sendRedirect()叫重定向,转发     forward()叫转向 (2)实际发生的位置不一样      sendRedirect发生在浏览器 forward发生在web服务器 (3)用法不一样 request.getRequestDispatcher("/资源URI").forward(request,response) response.sendRedirect("/web应用/资源URI") (4)能够去的URL不一样 sendRedirect可以去任何URL forward只能去当前的WEB应用资源
怎样算是一次http请求 只要没有停止,也没有回到浏览器重定向,就算一次(无论走了多少的servlet) 无论转向多少次,浏览器的地址栏一直都保存在最开始的URL
说明: 基本格式 response.sendRedirect("servlet的地址?参数名=参数值&参数名=参数值....")
在接收数据的servlet中: String 参数 = request.getParameter(参数名);  参数值是string,不能穿对象。参数名应该避免中文,最好按照规范命名


中文乱码专题
发生乱码有三种情况
① 表单 form (1)post 解决方法:     request.setCharacterEncoding("utf-8");     //gbk gb2312 (2)get 解决方法:     String u = new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8"); (最好写成一个工具类) ② 超链接 <a href="="林">测试</a> 超链接提交本质是get提交 ③ sendRedirect()发生乱码 response.sendRedirect("servlet地址?username=林");
response细节
HttpServletRequest常用方法 request.getQueryString(); 该函数可以获取请求部分的数据,就是请求头?后面的所有内容  

在下载的时候中文文件名变成乱码
如果接受的是单个内容,使用     String sex = request.getParameter("sex");
如果接受复选框的内容,则使用getparameterValues String [  ] hobbies = request.getParameterValues("hobby");

防止遍历数组出错
什么时候使用hidden传输数据      1、不希望用户看到该数据      2、不希望影响界面,同时要使用该数据


数据库验证










































































































更多推荐

Servlet之路

本文发布于:2024-03-23 23:53:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1744324.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:之路   Servlet

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!