发表于: 2017-10-25 20:43:15
4 720
1;先是任务二的内容servlet学习,前几天做了一个,也了解这个服务小程序,必须部署到web服务器上才行;tomcat就可以,今天继续深入学习下,也是为ssm打基础;
先说一下通过idea部署servlet的几个步骤,前面写了具体细节这里就不在细说了1;创建web应用项目2;编写servlet代码3;部署到tomcat中4;修改一下8080端口。5;发布运行
2;然后想着直接修改配置文件,不通过idea试试来部署servlet,结果除了一大堆问题,就是一大堆问题。。。具体写在下面了。这里也说一下流程
首先是修改路径,给tomcat指明类路径
然后是在汤姆猫的bin目录启动tomcat,这里要先关闭idea的tomcat;还要注意端口是否被占问题。
接着就是成功启动,刷网页出了问题,各种排查。。各种试。。。最后还是不行,然后看了日志,说是类有问题,细节粘在问题了,这种不借助IDE开发工具的就是麻烦,在idea里跑的很流畅。。。还是工具好,屏蔽了好多问题。。。其实,我以为是因为在idea里跑过之后出的问题,我自己又新建了一个,结果还是不行。。。浪费了下午时间。。。。
3;上面问题弄了大半天。。。计划都打乱了,继续servlet的学习,建立登陆界面。。第一次部署失败。。是web配置文件没弄好。。具体写到问题了.这里先简单看下问题与结果
修改之后很ok,
Post方法输入密码账号地址栏不显示,控制台可查
又测试了一下get方法,果然有问号??隔开,果然有显示内容
这里说一下具体流程;先列出遇到的新概念名词
<form> 标签:用于为用户输入创建 HTML 表单;表单能够包含 input 元素,比如文本字段、复选框、单选框、提交按钮等等;表单用于向服务器传输数据。
method 属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面)。而在浏览器使用 method 属性设置的方法将表单中的数据传送给服务器进行处理。共有两种方法:POST 方法和 GET 方法。
其中method="get" 提交数据是常用的提交数据的方式;如果form元素没有提供method属性,默认就是get方式提交数据,get方式的一个特点就是,可以在浏览器的地址栏看到提交的参数,
method="post" 也可以提交数据,但是post不会在地址栏显示提交的参数,如果要提交二进制数据,比如上传文件,必须采用post方式,这就涉及到post和get的选取规律了,这里也简单列举几个,放在最后了;方便以后查阅吧。
然后又把之前一直没看的题头百度了一下DOCTYPE和dtd
<!--DOCTYPE标签是一种标准通用标记语言的文档类型声明,-->
<!--它的目的是要告诉标准通用标记语言解析器,它应该使用什么样的文档类型定义(DTD)来解析文档。-->
<!--dtd文档类型定义(Document Type Definition)是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
A:新建一个 login.html,这应该是就是rest“资源”,然后添加一个form元素,
B:新建LoginServlet类,采用post方法,这里是登陆界面涉及到安全性问题,所以选用 POST 方法,可以加密。然后就是doPost方法中,通过request.getParamter 根据name取出对应的账号和密码;
//因为浏览器中的form的method是post,所以LoginServlet需要提供一个doPost方法
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//在doPost方法中,通过request.getParamter根据name属性取出对应的账号和密码
String name = request.getParameter("name");
String password = request.getParameter("password");
//查看一些网页的输入值
System.out.println("name;" + name);
System.out.println("password;" + password);
C; 映射LoginServlet到路径login
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
D;部署启动,在浏览器查看输入控制台。
4;上一步用sout可以再控制台看到账号密码;然后发现实际上用printwrite输出导浏览器,然后加上equals判断就可以直接在网页查看结果了。
先看结果,输入正确的时候;
输入错误的时候;
再说一下具体步骤吧;
判断账号密码是否为 dudada 1234,如果是就bravo 否则就bullshit
if ("dudada".equals(name) && "1234".equals(password)) {
//结果正确就打印success字符串;错误则是bullshit
html = "<div style ='color:green'> hi guys bravo!!! Success</div>";
} else {
//HTML <div> 元素是块级元素,它是可用于组合其他 HTML元素的容器。
html = "<div style ='color:red'> oh no bullshit!!! Fail</div>";
然后通过response.getWriter().println() 发送到浏览器。
//通过response.getWriter().println()发送到浏览器
PrintWriter pw = response.getWriter();
//pw是代表服务端发向浏览器的输出流
pw.println(html);
//控制台System.out查看网页的输入值
System.out.println("name;"+name);
System.out.println("password;"+password);
修改好之后更新一下就可以了
再总结一下:今天发现一个好玩的思维导图Xmind工具,就拿来试试;
5;最后又了解了http协议
HTTP超文本传输协议 Hyper Text Transfer Protocol;协议就是不同的应用程序之间按照事先做好的约定进行的通信,只有约定好了统一了,应用程序之间就可以按照这个规定来读取双方的意思;而浏览器和web服务器之间正是通过http协议来交互的,就像在地址栏输入一个地址信息,服务器就显示一个页面出来。
明日计划的事情:
1;下午浪费了时间,计划打乱了;明天继续学习servlet的学习吧。
2;把mybatis剩下的内容做完
3;每天抽一个半小时学语法基础。。。今天一个构造方法,看了半天。。
4;有时间的就再看一下springmvc
遇到的问题及解决方法:
1;自己手动部署servlet的时候第一次汤姆猫老是闪退,查看日志发现是server.xml文件配置错误,更改之后暂时
2;就是重启tomcat的时候也要注意,必须先关闭然后正常启动,不然会报错端口被占启动失败
3;然后就是用的之前的写好的sevlet,报了404错,查了半天,最后看了日志发现好像是web应用程序启动失败。
4;登陆界面的时候写映射的时候少写了一个斜线。。报错。。。
5;除了斜线之外,这个url必须与表单名字保持一致,不然登陆界面可以出来,但是输入账号密码会404
此外,随便测了一下,表单里的method属性方法也必须与servlet一致,不然会报错,实际上证明两者方法没有优先级,不写就默认get,要想用post就注明
收获:
1;首先是处理问题上面,不能太专牛尖尖,花了一个小时还不能解决的问题,就暂时可以放弃了;尤其是对后续任务没影响的;就像这次纯粹是为了验证一下,不借助idea工具直接部署tomcat看看能不能行的通。。。。血的教训。。。态度可取,但是这种学习方式不可取mark!!!
2;完成登陆界面,基本懂得流程机制。
3;学会合理规划时间
Ps:这里列举一下百度的get和post;理解一部分,其他等用到再来查阅吧
简单说;get和post的区别
Get;是form默认的提交方式;如果通过一个超链访问某个地址,是get方式;如果在地址栏直接输入某个地址,是get方式;提交数据会在浏览器显示出来;不可以用于提交二进制数据,比如上传文件
Post;必须在form上通过 method="post" 显示指定;提交数据不会在浏览器显示出来;可以用于提交二进制数据,比如上传文件
内部机制;
如果采用 POST 方法,浏览器将会按照下面两步来发送数据。首先,浏览器将与 action 属性中指定的表单处理服务器建立联系,一旦建立连接之后,浏览器就会按分段传输的方法将数据发送给服务器。
在服务器端,一旦 POST 样式的应用程序开始执行时,就应该从一个标志位置读取参数,而一旦读到参数,在应用程序能够使用这些表单值以前,必须对这些参数进行解码。用户特定的服务器会明确指定应用程序应该如何接受这些参数。
另一种情况是采用 GET 方法,这时浏览器会与表单处理服务器建立连接,然后直接在一个传输步骤中发送所有的表单数据:浏览器会将数据直接附在表单的 action URL 之后。这两者之间用问号进行分隔。
一般浏览器通过上述任何一种方法都可以传输表单信息,而有些服务器只接受其中一种方法提供的数据。可以在 <form> 标签的 method (方法)属性中指明表单处理服务器要用方法来处理数据,使 POST 还是 GET。
最后是选取规律;当然前提是表单处理服务器既支持 POST 方法又支持 GET 方法
如果希望获得最佳表单传输性能,可以采用 GET 方法发送只有少数简短字段的小表单。 一些服务器操作系统在处理可以立即传递给应用程序的命令行参数时,会限制其数目和长度,在这种情况下,对那些有许多字段或是很长的文本域的表单来说,就应该采用 POST 方法来发送。
如果你在编写服务器端的表单处理应用程序方面经验不足,应该选择 GET 方法。如果采用 POST 方法,就要在读取和解码方法做些额外的工作,也许这并不很难,但是也许你不太愿意去处理这些问题。
如果安全性是个问题,那么我们建议选用 POST 方法。GET 方法将表单参数直接放在应用程序的 URL 中,这样网络窥探者可以很轻松地捕获它们,还可以从服务器的日志文件中进行摘录。如果参数中包含了信用卡帐号这样的敏感信息,就会在不知不觉中危及用户的安全。而 POST 应用程序就没有安全方面的漏洞,在将参数作为单独的事务传输给服务器进行处理时,至少还可以采用加密的方法。
如果想在表单之外调用服务器端的应用程序,而且包括向其传递参数的过程,就要采用 GET 方法,因为该方法允许把表单这样的参数包括进来作为 URL 的一部分。而另一方面,使用 POST 样式的应用程序却希望在 URL 后还能有一个来自浏览器额外的传输过程,其中传输的内容不能作为传统 <a> 标签的内容。
评论