javaweb 第三次课的笔记

2021/5/10 22:32:58

本文主要是介绍javaweb 第三次课的笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.获取请求的数据
request.getParameter("表单元素的name")
getParameterValues("表单元素的name")

2.两种跳转方式

response.sendRedirect(String path)
响应重定向是向目标资源重新发送请求,生成新的响应

请求转发 
request.getRequestDispatcher(String path).forward(request, response);
备注:响应重定向不带参  请求转发带参 

一个小案例:

需求:

登陆页面 用户名密码  
判断用户名密码是否为空   8----16

思想:先设计一个登陆页面 在表单里添加用户文本框 密码框 下拉列表 登陆和取消按钮

设计一个登陆失败的页面:

设计一个登陆成功的页面,但是我们此时不用html文件,而是当登陆成功时再跳转到一个servlet里

LoginServlet2 接收登陆页面的各种标签属性 跳转页面

配置web.xml:

<servlet>
    <servlet-name>Login2</servlet-name>
    <servlet-class>LoginServlet2</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Login2</servlet-name>
    <url-pattern>/LoginServlet2</url-pattern>
  </servlet-mapping>

当我们使用无参跳转方法时

在跳转的successful servelet文件的doget()方法里写出输出语句:

运行结果:

失败时:

成功时:

当我们使用有参跳转方法时,我们删去successful里doget()方法里的内容

并且在dopost()方法里设置参数:

在LoginServlet里使用带参的跳转方法:

运行结果:

在eclipse里输入中文往往会乱码:

解决乱码的方法:

在LoginServlet2

request.setCharacterEncoding("utf-8");解决post 中文乱码

response.setCharacterEncoding("utf-8");//设置 HttpServletResponse使用utf-8编码

response.setHeader("Content-Type", "text/html;charset=utf-8");    //通知浏览器使用utf-8解码 解决get

可以只用如下方式:

response.setContentType("text/html;charset=utf-8");

运行结果:

此时中文可以正常显示了

三种servlet的访问方式 
form  method   get  post
1.url  
2.超级链接
<a href="servlet名字 "></a>
调用doget()
3.表单 
总结:
1、直接使用URL访问,是GET方式,调用doGet方法;

2、超级链接访问,是GET方式,调用doGet方法;

3、表单提交访问,取决form的method属性的值,默认是get,指定为post时,调用doPost方法;
 <a href=“TestPramServlet?page=1&author=wangxh”>传递两个请求参数,名字分别为page和author,值分别为1和wangxh;
servlet加载初始化参数

welcome-file-list表示的是访问文件的顺序

servlet的访问方法实例1:

先设置一个页面 index.html:

此题中是用超链接的方式访问servlet form表单中的地址为servlet的url

此html页面为两个表单

TestThreeMethodsServlet的代码如下:

配置web.xml:

运行结果;

点击超级链接时:

会自动访问servlet,会默认调用doGet()方法

提交第一个表单:

提交第二个表单:

运行post的方法:

 <a href=“TestPramServlet?page=1&author=wangxh”>传递两个请求参数,名字分别为page和author,值分别为1和wangxh;
servlet加载初始化参数

servlet初始化的小案例:

进一步通过代码去理解初始化参数

创建一个名为TestPramServlet的servlet

我们在doGet()方法中对两个参数page和author进行请求获取 但是由于现在并不存在这两个变量 所以获取到的都是null空值

web.xml配置:

运行结果:

那么我们如何去初始化参数呢

我们需要创建一个名为testPram的html文件

在这个html文件中 首先我们表单的地址是连接的TestPramServlet,方式为post

表单中含有用户名文本框,密码框,复选按钮,提交按钮

而第8行所写的就是初始化servlet参数的方法 我们建立了一个超链接 地址为TestPramServlet 并且分别给page赋值为2,author赋值为ford 在初始化参数时,servlet与参数之间用?连接

多个属性之间用&连接

运行testPram.html

当我们点击测试传参按钮:

我们会发现参数已将成功被初始化,我们可以改变html文件里参数的值来更新初始化

因为初始化参数是要获得前台页面中的表单元素,所以我们自然的写在了doGet()方法中

隐藏域

现在我们来了解一下隐藏域的问题:

我们可以将一些元素隐藏起来,只有执行某些操作时才会显示出来

还是利用上面的testParm.html 和TestPramServlet代码

在testParm.html中有一行代码之前没有解释

这一行代码就是隐藏域的写法 在html中input标签类型定义为hidden value进行赋值即可

现在我们因为要向页面中提交信息 所以我们要写doPost()方法:

在TestPramServlet的doPost()方法中写出显示信息的代码:

我们用request.getParameter()方法获取值,以name为条件,利用String类型数组接受复选按钮的属性,增强型for循环遍历输出复选按钮的属性值

执行结果:

点击提交按钮:

通过结果我们发现隐藏参数的值被显示出来了。

在web.xml配置中实现初始化参数

我们可以在web.xml中实现初始化参数

语法格式:

在web.xml中的<servlet></servlet>中添加如下代码:

<init-param>
     <param-name>path</param-name> 参数名称
      <param-value>WEB-INF/config</param-value> 参数值 
</init-param>


servlet获取初始化的参数 
java.lang.String getInitParameter(java.lang.String name) 
 

小实例:

我们创建一个名为TestInitServlet的servlet

在doGet()方法中获取初始化参数的值 其中this表名当前servlet类

配置web.xml:

由于web.xml中

<param-name>标签中为path1

所以当在servlet中获取名为path1时,会输出初始化参数值为HelloWorld

执行结果:

当我们想修改初始化参数时,直接在web.xml中修改<param-value>标签中的值即可

注:该执行结果不显示在页面上,而是在控制台中直接输出。

全局参数

利用上述方法的初始化参数只能被一个servlet获取并且调用,那么我们有没有什么方法可以让所有servlet都获取到一个参数呢

这样我们就涉及到了创建全局参数的方法:

创建全局参数  (所有的servlet都可以使用该参数)

只需要在web.xml的根节点写上如下代码:
 <context-param>
    <param-name>propsFile</param-name>//参数名称
    <param-value>config.properties</param-value>//参数值
  </context-param>    
全局参数可以在应用下所有Servlet中获取使用,但是需要使用到上下文对象ServletContext(不能直接用getInitParameter方法调用,上下文对象后期会学)

servlet加载启动项 初始化servlet对象

servlet 启动的加载

在web.xml中配置如下语法格式:
<servlet>
    <description></description>
    <display-name>TestLoadServlet</display-name>
    <servlet-name>TestLoadServlet</servlet-name>//servlet名称
    <servlet-class>com.chinasofti.chapter02.section01.TestLoadServlet</servlet-class>//servlet路径
    <load-on-startup>2</load-on-startup> 表示该对象会被第二个加载  数字表示执行servlet的顺序
  </servlet>    

servlet加载启动项小实例:

我们先创建一个名为TestLoadServlet的servlet

我们在这个servlet中只写无参构造方法

配置web.xml

运行结果:

 

Servlet配置中通配符*的用法

要访问Servlet,必须为Servlet配置<url-pattern>,可以使用通配符*进行配置,从而通配多种访问模式;
*使用有两种方式
*.扩展名 : 比如 *.do、*.action
以 / 开头,同时以 /* 结尾,比如  /*  、/admin/*

通配符的使用实例:

我们创建一个TestPatternServlet

按照如下方式配置web.xml

我们并没有像以前那样按照默认方式去写映射

并且我们在这一个servlet里用通配符写了多个映射

执行时:

我们任意输入地址只要以.action结尾都可以跳转到该servlet

同样的当输入/admin/后面输入任意内容都可以跳转到该servlet

我们输入任意地址内容只要以.do结尾依然可以跳转到该servlet

学会了掌握通配符的方法我们就无需受映射的限制了 可以随意写出映射 方便运行servlet

web.xml中首页即错误页面等其他配置信息

后期学习会有关于在servlet运行时遇到错误或者异常页面的内容 需要用到http 超文本传输协议 

404错误:

<error-page>
    <error-code>404</error-code>
    <location>/404.html</location>
  </error-page>

空指针异常错误:

<error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/exception.html</location>
  </error-page>

我们只需要自己写两个提示页面即可404.HTML,exception.html

servlet中的一些方法

创建一个名为TestHeadServlet的servlet里面包含一些头方法

doGet()中包含以上三个方法

配置web.xml

运行结果:

这节课内容较多,我们几乎大体了解了servlert的全部信息



这篇关于javaweb 第三次课的笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程