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 第三次课的笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?