手记

【九月打卡】第九天 Servlet进阶-Servlet开发应用实践

课程信息

● 学习课程:Java工程师2022版
● 章节名称:Servlet进阶-Servlet开发应用实践
● 讲师:八戒猪

课程内容

1、Web应用的中文乱码
发送发与接受方对数据使用不同的字符集解析就会产生乱码
解决:保证浏览器与服务器统一为UTF-8编码
在Servlet中请求与响应都需要设置UTF-8字符集
Tomcat8之后对于发送过来GET的请求参数默认编码为UTF-8进行解析
Tomcat8之前,默认编码为IOS-8859-1,需要在Server.xml配置字符集

<Connector port="8080" ... URIEncoding="UTF-8">

对于Post请求需要指定编码
request.setCharacterEncoding(“UTF-8”);
对于响应头信息指定编码
response.setContentType(“text/html;charset=utf-8”);
2.web.xml常用配置

  • 修改web应用默认首页
  • web.xml中配置
<Welcom-file-list>
  <!-- 按顺序查找默认首页,out目录中存在就加载-->
  <welcom-file>index.html</welcom-file>
  <welcom-file>default.html</welcom-file>
</Welcom-file-list>  
  • Servlet通配符映射及初始化参数
<servlet>
  <servlet-name>pattern</servlet-name>
  <sevlet-class>com.imooc.servlet.PatternServlet</servlet-class>
  </servlet>
<servlet-mapping>
  <serlet-name>pattern</servlet-name>
  <!--通配URI配置http://localhost:8080/class/780-->
  <url-pattern>/class/*</url-pattern>
</servlet-mapping>

<!--前缀+后缀的混合通配符是不可以的,如"/class/*/class”是错误的。-->
<!-- 对所有的请求进行映射,使用“/”而不是“/*”。-->

// doGet方法获取课程id
String uri = request.getRequestURI(); // URI:/class/785
String id = uri.substring(uri.lastIndexOf("/") +1 );

  • 启动时加载Servlet 工作中用于系统的预处理
  • web.xml使用设置启动加载,servlet中init方法执行顺序
 <load-on-startup>0-9999</load-on-stratup> 数字越小优先级越高
<servlet>
  <servlet-name>initTable</servlet-name>
  <servlet-class>com.imooc.servlet.startup.InitTable</servlet-class>
  <!--启动参数配置-->
  <init-param>
    <param-name>database</param-name>
    <param-value>db01</param-value>
  </init-param>
  <!--启动加载-->
  <load-on-startup>0</load-on-startup>
</servlet>
// 参数获取
public void init(ServletConfig config) throws ServletException{
	String database = config.getInitParameter("database");
    System.out.println("正向数据库"+database+"写入数据");
}
  • 设置404、500等状态码默认页面
<!--    设置404和500的自定义页面-->
<error-page>
  <error-code>404</error-code>
  <location>/error/404.html</location>
</error-page>
<error-page>
  <error-code>500</error-code>
  <location>/error/500.html</location>
</error-page>
  1. JavaWeb打包与发布
    采用war包进行发布,在pom.xml文件中进行配置,使用packaging标签。使用maven的package命令,打包到target目录。只需要一个配置语句即可
<packaging>war</packaging>

利用Maven实现war包导出,将程序运行所需的所有资源都包含进来了。
使用scope声明pom中依赖组件的作用范围

<dependencies>     
  <dependency>         
    <groupId>javax.servlet</groupId>         
    <artifactId>javax.servlet-api</artifactId>         
    <version>3.1.0</version> 
    <scope>provided</scope>     
  </dependency> 
</dependencies>
<!-- 这里使用provided的目的是因为javax.servlet-api已经在Tomcat的lib目录中包含了,
本身运行时已经依赖这个组件,因此无需再在运行时,一并包含在war包中了。-->
<!-- 打包时,可以给war包起名,使用build标签 -->
<build>     
  <finalName>web-servlet</finalName> 
</build>

maven的Scope属性
compile默认值依赖组件作用与所有阶段
provided 依赖组件仅作用在编译与测试阶段
runtime 依赖组件仅作用在测试和运行
test 依赖组件仅作用在测试阶段
system 本地Jar文件仅在编译与测试阶段
4、程序发布和运行:将war包复制到{TOMCAT_HOME}/webapps目录下
复制到目录后,双击startup.bat运行Tomcat,,此时会解压缩war包,本地可以访问了。
http://localhost:8080/session/login
本地访问时,会有404问题,原因就是解压缩的工程师文件生成的web-servlet
文件夹会被认为是应用上下文。
取消上下文,在Tomcat的server.xml文件中,在host标签中配置context标签。

<Context docBase="web-servlet" path="/"/>

然后就和在开发环境中访问程序是一致的了。

学习收获

学习了对于常见问题UTF-8的原因以及解决办法,然后是对于web.xml的配置,比如配置首页,设置通配符,设置启动加载,配置404,500等页面,然后是maven打war包配置,发布,对于maven中scoped属性配置的含义

打卡截图

0人推荐
随时随地看视频
慕课网APP